Kryptografisch sichere PRNGs
Erkunden Sie /dev/urandom, ChaCha20-CSPRNG und Fortuna.
Kryptografisch sichere PRNGs ist eine kostenlose Cryptology Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Cryptology Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Cryptology Academy-Kurs umfasst insgesamt 4 Lektionen.
Zusammenfassung der CSPRNG-Anforderungen
Ein CSPRNG muss Folgendes erfüllen: (1) Next-Bit-Unvorhersagbarkeit — selbst bei Kenntnis aller vorherigen Bits darf das nächste Bit nicht mit einer Wahrscheinlichkeit von mehr als 1/2 + negligible vorhergesagt werden können. (2) Resistenz gegen Zustandskompromittierung — das Erlernen des aktuellen Zustands darf keine Informationen über frühere Ausgaben preisgeben.
/dev/urandom und getrandom()
Linux /dev/urandom verwendet einen aus dem Entropie-Pool gestarteten CSPRNG. Nach der ersten Initialisierung (128 Bit Entropie) kann er auch dann sicher verwendet werden, wenn der Pool „leer“ ist – der CSPRNG verwaltet seinen eigenen internen Zustand. getrandom() ist das moderne Äquivalent auf Systemaufrufebene.
ChaCha20-basierter CSPRNG
Der Linux-Kernel 5.17+ hat seinen CSPRNG durch ein auf ChaCha20 basierendes Design ersetzt. ChaCha20 ist schnell (keine Hardwarebeschleunigung erforderlich), bietet 256-Bit-Sicherheit und verfügt über einen gut verstandenen Sicherheitsnachweis. Die Nonce ist der Zähler; der Schlüssel stammt aus dem Entropie-Pool.
Fortuna
Fortuna (Ferguson & Schneier, 2003) ist ein CSPRNG-Design, das 32 Entropie-Pools verwaltet und kontinuierlich Entropie sammelt. Der Generator wird aus den Pools neu initialisiert, sobald diese sich füllen. Er ist widerstandsfähig gegen Angriffe durch Zurücksetzen des RNG und gegen Angriffe durch teilweise Offenlegung des Zustands.
DUAL_EC_DRBG-Hintertür
NIST SP 800-90A enthielt ursprünglich DUAL_EC_DRBG, das auf elliptischen Kurven basiert. Aus den Snowden-Dokumenten ging hervor, dass die NSA eine Hintertür eingefügt hatte: Die EC-Punkte wurden so gewählt, dass die NSA die Ausgabe aus jedem Seed vorhersagen konnte. Verwenden Sie DUAL_EC_DRBG niemals. NIST entfernte es 2014.
CTR_DRBG
CTR_DRBG (NIST SP 800-90A) verwendet AES im Zählermodus als CSPRNG. Seed = 256-Bit-Schlüssel + 128-Bit-Nonce. Jeder Aufruf erhöht den Zähler. Weit verbreitet implementiert in OpenSSL, BoringSSL und Windows BCrypt. Auf CPUs mit AES-NI hardwarebeschleunigt.
HASH_DRBG und HMAC_DRBG
HASH_DRBG verwendet iterativ eine Hashfunktion (SHA-256) zusammen mit einem Seed-Wert. HMAC_DRBG verwendet HMAC zum Mischen. HMAC_DRBG ist einfacher korrekt zu implementieren und wird in vielen eingebetteten Systemen verwendet (mbedTLS, WolfSSL).
Neuinitalisierung und Entropiezufuhr
Auch CSPRNGs müssen regelmäßig neu initialisiert werden. CTR_DRBG hat ein Intervall von 2^48 Anforderungen für die Neuinitalisierung. Fortuna wird aus seinen Entropie-Pools neu initialisiert. Manuelle Neuinitalisierung: Fügen Sie dem Zustand des CSPRNG beim Start und nach fork() frische Entropie (getrandom-Bytes) hinzu.
Das Fork-Problem
Wenn ein Prozess einen Fork ausführt, übernehmen sowohl der übergeordnete Prozess als auch der Kindprozess denselben CSPRNG-Zustand – sie erzeugen identische Ausgaben. Lösung: Rufen Sie unmittelbar nach fork() getrandom() auf, um den Zustand neu zu initialisieren. OpenSSL erledigt dies in aktuellen Versionen automatisch über pthread_atfork().
CSPRNG in der Praxis: Python
import secrets key = secrets.token_bytes(32) # 256-bit key nonce = secrets.token_bytes(12) # 96-bit nonce for AES-GCM pin = secrets.randbelow(10**6) # 6-digit PIN # Verwenden Sie das Modul random niemals für Kryptografie
Browser-Kryptografie
window.crypto.getRandomValues(typedArray) ist der CSPRNG des Browsers. Er ruft die Entropiequelle des Betriebssystems auf. Er wird von der WebCrypto API zur Schlüsselerzeugung verwendet. Verwenden Sie Math.random() niemals für sicherheitsrelevante Zwecke – es handelt sich um einen nicht kryptografischen PRNG, der mit der Systemzeit initialisiert wird.
Schnelltest
Welches Python-Modul sollten Sie verwenden, um kryptografisch sichere Zufallsbytes zu erzeugen?
Zusammenfassung
CSPRNGs wie ChaCha20, CTR_DRBG und Fortuna erzeugen aus Entropie-Seeds nicht vorhersehbare Ausgaben. Vermeiden Sie DUAL_EC_DRBG, random.random() und Math.random(). Verwenden Sie secrets (Python) oder window.crypto (Browser). Als Nächstes: Fehler bei der Entropie in der Praxis.
Häufig gestellte Fragen
Ist die Lektion „Kryptografisch sichere PRNGs“ kostenlos?
Ja — der vollständige Text von „Kryptografisch sichere PRNGs“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Cryptology Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Cryptology Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Kryptografisch sichere PRNGs“?
Erkunden Sie /dev/urandom, ChaCha20-CSPRNG und Fortuna. Du übst Cryptology Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Cryptology Academy zu starten?
Keine Vorkenntnisse erforderlich. Cryptology Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.
Wie lange dauert die Lektion „Kryptografisch sichere PRNGs“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Cryptology Academy-Lektion Code schreiben und ausführen?
Ja. Jede Cryptology Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Echte Zufälligkeit vs. Pseudozufälligkeit
- Kryptografisch sichere PRNGs
- Entropiemangel und Fehler durch schwache Schlüssel
- Schlüssel, Nonces und IVs sicher erzeugen