Kryptografisk sikre PRNG'er
Udforsk /dev/urandom, ChaCha20-CSPRNG og Fortuna.
Kryptografisk sikre PRNG'er er en gratis Cryptology Academy-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Cryptology Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Cryptology Academy-kurset indeholder 4 lektioner i alt.
Opsummering af CSPRNG-krav
En CSPRNG skal opfylde: (1) uforudsigelighed af næste bit — selv når du kender alle tidligere bit, kan den næste bit ikke forudsiges med sandsynlighed > 1/2 + en forsvindende lille værdi. (2) modstandsdygtighed mod kompromittering af tilstanden — kendskab til den aktuelle tilstand afslører intet om tidligere resultater.
/dev/urandom og getrandom()
Linux /dev/urandom bruger en CSPRNG, der seedes fra entropipuljen. Efter den første initialisering (128 bit entropi) er den sikker at bruge, selv når puljen er "tom" — CSPRNG'en vedligeholder sin egen interne tilstand. getrandom() er det moderne ækvivalente systemkald.
ChaCha20-baseret CSPRNG
Linux-kernen 5.17+ erstattede sin CSPRNG med en ChaCha20-baseret konstruktion. ChaCha20 er hurtig (kræver ingen hardwareacceleration), giver 256-bit sikkerhed og har et velunderbygget sikkerhedsbevis. Noncen er tælleren, og nøglen kommer fra entropipuljen.
Fortuna
Fortuna (Ferguson & Schneier, 2003) er en CSPRNG-konstruktion, der vedligeholder 32 entropipuljer og opsamler entropi løbende. Generatoren seedes igen fra puljerne, efterhånden som de fyldes. Den er modstandsdygtig over for angreb med nulstilling af RNG'en og delvis kompromittering af tilstanden.
DUAL_EC_DRBG-bagdøren
NIST SP 800-90A indeholdt oprindeligt DUAL_EC_DRBG, som er baseret på elliptiske kurver. Snowden-dokumenter afslørede, at NSA havde indsat en bagdør: EC-punkterne var valgt, så NSA kunne forudsige uddata fra ethvert seed. Brug aldrig DUAL_EC_DRBG. NIST fjernede den i 2014.
CTR_DRBG
CTR_DRBG (NIST SP 800-90A) bruger AES i tællertilstand som CSPRNG. Seed = 256-bit nøgle + 128-bit nonce. Hvert kald fører tælleren frem. Den er bredt implementeret i OpenSSL, BoringSSL og Windows BCrypt. Den er hardwareaccelereret på CPU'er med AES-NI.
HASH_DRBG og HMAC_DRBG
HASH_DRBG bruger en hashfunktion (SHA-256) iterativt sammen med en seed-værdi. HMAC_DRBG bruger HMAC til sammenblanding. HMAC_DRBG er enklere at implementere korrekt og bruges i mange indlejrede systemer (mbedTLS, WolfSSL).
Ny seeding og entropitilførsel
Selv CSPRNG'er skal seedes igen med jævne mellemrum. CTR_DRBG har et interval på 2^48 anmodninger mellem hver nye seeding. Fortuna seedes igen fra sine entropipuljer. Manuel seeding igen: Tilfør frisk entropi (getrandom-byte) til CSPRNG-tilstanden ved opstart og efter fork().
Problemet med fork
Når en proces forgrener sig, arver både forælder- og barneprocessen den samme CSPRNG-tilstand — de vil producere identiske uddata. Løsning: Kald getrandom() for at seede igen umiddelbart efter fork(). OpenSSL håndterer dette automatisk via pthread_atfork() i nyere versioner.
CSPRNG i praksis: Python
import secrets key = secrets.token_bytes(32) # 256-bit nøgle nonce = secrets.token_bytes(12) # 96-bit nonce til AES-GCM pin = secrets.randbelow(10**6) # PIN-kode på 6 cifre # Brug aldrig modulet random til kryptografi
Kryptografi i browseren
window.crypto.getRandomValues(typedArray) er browserens CSPRNG. Den kalder operativsystemets entropikilde. Den bruges af WebCrypto API til generering af nøgler. Brug aldrig Math.random() til sikkerhed — det er en ikke-kryptografisk PRNG, der seedes fra systemtiden.
Hurtigt tjek
Hvilket Python-modul bør du bruge til at generere kryptografisk tilfældige byte?
Opsummering
CSPRNG'er som ChaCha20, CTR_DRBG og Fortuna genererer uforudsigelige uddata fra entropiseeds. Undgå DUAL_EC_DRBG, random.random() og Math.random(). Brug secrets (Python) eller window.crypto (browseren). Næste emne: fejl i entropi fra virkeligheden.
Lær Cryptology Academy med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 67
- Lektioner
- 261
Ofte stillede spørgsmål
Er lektionen “Kryptografisk sikre PRNG'er” gratis?
Ja — hele teksten til “Kryptografisk sikre PRNG'er” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Cryptology Academy-kurset, skal du opgradere til CoddyKit PRO. Cryptology Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Kryptografisk sikre PRNG'er”?
Udforsk /dev/urandom, ChaCha20-CSPRNG og Fortuna. Du øver dig i Cryptology Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Cryptology Academy?
Der kræves ingen tidligere erfaring. Cryptology Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.
Hvor lang tid tager lektionen “Kryptografisk sikre PRNG'er”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Cryptology Academy-lektion?
Ja. Alle Cryptology Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Ægte tilfældighed kontra pseudotilfældighed
- Kryptografisk sikre PRNG'er
- Entropimangel og fejl med svage nøgler
- Sikker generering af nøgler, noncer og IV'er