Cryptology Academy · Oppitunti

Kryptografisesti turvalliset PRNG:t

Tutustukaa /dev/urandomiin, ChaCha20-CSPRNG:hen ja Fortunaan.

Oppitunti 2/413 vaihetta

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.

Aloita maksutta

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

  1. Todellinen satunnaisuus ja pseudorandomisuus
  2. Kryptografisesti turvalliset PRNG:t
  3. Entropian ehtyminen ja heikoista avaimista johtuvat virheet
  4. Avainten, nonce-arvojen ja IV-arvojen turvallinen luominen
← Takaisin: Cryptology Academy