Kriptográfiai véletlenszám és entrópia: miért számít?
Kulcsok, tokenek, nonce-ok és session azonosítók biztonságához kiszámíthatatlan véletlen kell. Értsd meg a CSPRNG, entrópia és Math.random különbségét.
Röviden
Kriptográfiai célra olyan pszeudovéletlen generátor kell, amelynek kimenete a korábbi értékek ismeretében sem jósolható meg érdemben. Böngészőben erre a Web Crypto API crypto.getRandomValues() szolgál; Math.random() nem biztonsági célú.
Miért veszélyes a kiszámítható „véletlen”?
Ha egy session token vagy jelszó-visszaállító token kitalálható, a támadó kriptográfiai algoritmus feltörése nélkül is átveheti a fiókot. A véletlenszám-generálás ezért sok protokoll láthatatlan, de kritikus függősége.
Generálj 128 bitnyi kriptográfiai véletlent
128 bit CSPRNG kimenet
Mi az a CSPRNG?
A cryptographically secure pseudorandom number generator belső állapotból állít elő olyan kimenetet, amely megfelelő feltételek mellett számításilag megkülönböztethetetlen a véletlentől, és a kimenetekből nehéz megjósolni a következő értékeket. Az állapotot megfelelő entrópiából kell inicializálni és a platform biztonsági primitívjeire kell támaszkodni.
Miért nem Math.random()?
A JavaScript Math.random specifikációja nem ígér kriptográfiai biztonságot. Játékhoz, UI-effekthez vagy nem biztonsági mintavételhez használható, de titkos kulcshoz, reset tokenhez, session ID-hoz vagy nonce-hoz ne ezt válaszd.
Mit jelent az entrópia?
Az entrópia itt a bizonytalanság mértékéhez kapcsolódik. Egy egyenletesen választott 128 bites érték ideális esetben 128 bitnyi keresési teret ad. Ha viszont a „véletlen” valójában egy szűk, kiszámítható tartományból jön, a tényleges bizonytalanság sokkal kisebb lehet.
Gyakori kérdések
UUID biztonságos tokennek?
Nem minden UUID-változat és implementáció azonos célú. Ha biztonsági token kell, közvetlenül megfelelő hosszúságú CSPRNG kimenetet érdemes használni a platform kriptográfiai API-jából.
Források és szabványok
Biztonsági témánál az elsődleges szabvány és a karbantartott szakmai útmutató fontosabb, mint egy véletlen implementációs példa. Az alábbi forrásokból érdemes továbbmenni.
Kapcsolódó ByBence