Riot: Klassifizieren Sie RNG "Zufälligkeit" im Code

Erstellt am 19. Juli 2016  ·  3Kommentare  ·  Quelle: RIOT-OS/RIOT

Um die Diskussion über RNG-Initialisierung etc. effektiver zu gestalten, habe ich versucht, die Anforderungen an unsere Zufallszahlengeneratoren für verschiedene Anwendungen zu klassifizieren:

  1. nur ein paar Zahlen ausspucken
    Einfach. Sogar rand() macht das. Es ist immer die gleiche Reihenfolge, aber für einige Anwendungen ok. Dies ist der aktuelle Stand der Dinge.
    Genug für (langweiliges) Tetris.
    Unzureichend für die Vernetzung (unterbricht zufälliges Backoff, ...).
  2. pro Knoten unterschiedliche Reihenfolge
    Dies würde das Seeding von PRNGs mit etwas mehr oder weniger Einzigartigem pro Knoten erfordern. CPUID würde mybe tun. Siehe #5321.
    Löst das "zufällige Backoff"-Problem.
    Völlig unzureichend für jede Art von Kryptografie.
  3. geheime pro Knoten unterschiedliche Sequenz
    Abhängig von der Aussaat eines Prngs würde dies es ermöglichen, erste geheime Kryptoschlüssel zu erstellen (glaube ich).
    Dazu muss die CPUID ausreichend groß sein und der PRNG benötigt Unterstützung für große Seed-Werte.
    (Ein uint32_t Seed-Wert würde nur zu 2**32 verschiedenen Seed-Werten führen, was ihn wieder unbrauchbar macht)
    CPUID kann geheim sein oder nicht (z. B. nur der Person bekannt sein, die den Knoten geflasht hat), da sie von einer Seriennummer oder MAC-Adresse abgeleitet sein könnte.

In Bezug auf das Seeding, die verwendeten PRNG- und Kryptoalgorithmen könnte dies eine (suboptimale) Basis für die Kryptografie sein.

Löst das Problem „Anfänglichen Kryptoschlüssel erstellen“.

  1. richtig ausgesätes PRNG mit injizierter Entropie
    Zufällige Ereignisse werden verwendet, um irgendwie Entropie in die PRNG-Ausgabe einzuspeisen.
    Es gibt zwar viele Möglichkeiten, dies zu implementieren, aber wenn es gut gemacht ist, ist es wahrscheinlich so gut wie es ohne ein HWRNG wird.

Löst die Probleme „kaum genug für Krypto“ und „Tetris weniger langweilig machen“.

  1. HWRNG verbessertes PRNG
    HWRNGs versprechen "wirklich zufällige Zahlen", sind aber oft langsam. Normalerweise werden sie also nur verwendet, um die Zufälligkeit von PRNGs zu verbessern.

Löst das „hoffentlich gut genug für Krypto“-Problem.

  1. hochwertige HWRNG
    Was auch immer das heißt.
security RFC

Hilfreichster Kommentar

Ich habe gerade festgestellt: Es ist wahrscheinlich kein so gutes Zeichen, dass wir nicht einmal ein Label "Sicherheit" im Issue-Tracker haben. ;)

Alle 3 Kommentare

IMHO sollten wir diese Klassifizierung für Code verfügbar machen, damit zB Kryptocode zumindest eine Warnung ausspucken kann, wenn er ohne oder mit einer schlechten Zufallsquelle verwendet wird.

Ich habe gerade festgestellt: Es ist wahrscheinlich kein so gutes Zeichen, dass wir nicht einmal ein Label "Sicherheit" im Issue-Tracker haben. ;)

Einige Funktreiber (z. B. at86rf2xx) bieten ein "echtes" RNG basierend auf Transceiver-Ereignissen. Sollte für die meisten Anwendungen schnell genug sein :)

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen