Kryptografisesti turvalliset PRNG:t
Tutustukaa /dev/urandomiin, ChaCha20-CSPRNG:hen ja Fortunaan.
Kryptografisesti turvalliset PRNG:t on ilmainen Cryptology Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Cryptology Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Cryptology Academy-kurssilla on yhteensä 4 oppituntia.
CSPRNG-vaatimusten kertaus
CSPRNG:n on täytettävä seuraavat vaatimukset: (1) seuraavan bitin ennustamattomuus — vaikka kaikki aiemmat bitit tunnettaisiin, seuraavaa bittiä ei voi ennustaa todennäköisyydellä > 1/2 + mitätön määrä. (2) tilan vaarantumisen jälkeisen laajentamisen kestävyys — nykyisen tilan paljastuminen ei paljasta mitään aiemmasta tulosteesta.
/dev/urandom ja getrandom()
Linuxin /dev/urandom käyttää entropiapoolista alustettua CSPRNG:tä. Alkuperäisen siemennyksen (128 bittiä entropiaa) jälkeen sitä on turvallista käyttää, vaikka pooli olisi "tyhjä" — CSPRNG ylläpitää omaa sisäistä tilaansa. getrandom() on nykyaikainen vastaava järjestelmäkutsu.
ChaCha20-pohjainen CSPRNG
Linux-ytimen versiosta 5.17 alkaen CSPRNG korvattiin ChaCha20-pohjaisella rakenteella. ChaCha20 on nopea (laitteistokiihdytystä ei tarvita), tarjoaa 256-bittisen turvallisuuden ja perustuu hyvin tunnettuun turvallisuustodistukseen. Nonce on laskuri; avain tulee entropiapoolista.
Fortuna
Fortuna (Ferguson ja Schneier, 2003) on CSPRNG-rakenne, joka ylläpitää 32:ta entropiapoolia ja kerää entropiaa jatkuvasti. Generaattori siemennetään uudelleen pooleista niiden täyttyessä. Se kestää RNG:n nollaus- ja osittaiseen tilan vaarantumiseen perustuvia hyökkäyksiä.
DUAL_EC_DRBG:n takaovi
NIST SP 800-90A sisälsi alun perin elliptisiin käyriin perustuvan DUAL_EC_DRBG:n. Snowdenin asiakirjoista kävi ilmi, että NSA oli lisännyt siihen takaoven: EC-pisteet valittiin niin, että NSA pystyi ennustamaan tulosteen mistä tahansa siemenestä. Älkää koskaan käyttäkö DUAL_EC_DRBG:tä. NIST poisti sen vuonna 2014.
CTR_DRBG
CTR_DRBG (NIST SP 800-90A) käyttää AES:ää laskuritilassa CSPRNG:nä. Siemen = 256-bittinen avain + 128-bittinen nonce. Jokainen kutsu kasvattaa laskuria. Se on laajasti toteutettu OpenSSL:ssä, BoringSSL:ssä ja Windows BCryptissä. AES-NI-suorittimet kiihdyttävät sitä laitteistolla.
HASH_DRBG ja HMAC_DRBG
HASH_DRBG käyttää hajautusfunktiota (SHA-256) iteratiivisesti yhdessä siemenen kanssa. HMAC_DRBG käyttää HMAC:ia sekoittamiseen. HMAC_DRBG on helpompi toteuttaa oikein, ja sitä käytetään monissa sulautetuissa järjestelmissä (mbedTLS, WolfSSL).
Uudelleensiemennys ja entropian syöttäminen
Myös CSPRNG:t on siemennettävä uudelleen säännöllisesti. CTR_DRBG:n uudelleensiemennyksen aikaväli on 2^48 pyyntöä. Fortuna siemennetään uudelleen entropiapooleista. Manuaalinen uudelleensiemennys: lisätkää tuoretta entropiaa (getrandom-tavuja) CSPRNG:n tilaan käynnistyksen yhteydessä ja fork():n jälkeen.
Fork-ongelma
Kun prosessi haarautuu, sekä isä- että lapsiprosessi perivät saman CSPRNG-tilan — ne tuottavat samanlaisen tulosteen. Korjaus: kutsukaa getrandom()-funktiota uudelleensiemennystä varten heti fork():n jälkeen. OpenSSL hoitaa tämän automaattisesti pthread_atfork()-funktion avulla uusimmissa versioissa.
CSPRNG käytännössä: 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 # Never use random module for cryptography
Selaimen kryptografia
window.crypto.getRandomValues(typedArray) on selaimen CSPRNG. Se kutsuu käyttöjärjestelmän entropialähdettä. WebCrypto API käyttää sitä avainten luomiseen. Älkää koskaan käyttäkö Math.random()-funktiota tietoturvaan — se on ei-kryptografinen PRNG, jonka siemenenä käytetään järjestelmän aikaa.
Pikatarkistus
Mitä Python-moduulia pitäisi käyttää kryptografisten satunnaistavujen luomiseen?
Kertaus
ChaCha20:n, CTR_DRBG:n ja Fortunan kaltaiset CSPRNG:t tuottavat ennustamatonta tulostetta entropiasiementen avulla. Välttäkää DUAL_EC_DRBG:tä, random.random()-funktiota ja Math.random()-funktiota. Käyttäkää secrets-moduulia (Python) tai window.cryptoa (selain). Seuraavaksi: todellisen maailman entropiaongelmat.
Opi Cryptology Academy tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 67
- Oppitunnit
- 261
Usein kysytyt kysymykset
Onko oppitunti ”Kryptografisesti turvalliset PRNG:t” ilmainen?
Kyllä – oppitunnin ”Kryptografisesti turvalliset PRNG:t” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Cryptology Academy-kurssin, päivitä CoddyKit PROhon. Cryptology Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Kryptografisesti turvalliset PRNG:t”?
Tutustukaa /dev/urandomiin, ChaCha20-CSPRNG:hen ja Fortunaan. Harjoittelet Cryptology Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Cryptology Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Cryptology Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.
Kuinka kauan ”Kryptografisesti turvalliset PRNG:t”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Cryptology Academy-oppitunnilla?
Kyllä. Jokainen Cryptology Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Todellinen satunnaisuus ja pseudorandomisuus
- Kryptografisesti turvalliset PRNG:t
- Entropian ehtyminen ja heikoista avaimista johtuvat virheet
- Avainten, nonce-arvojen ja IV-arvojen turvallinen luominen