Ciò che conta è entropy .
Ciò che rende un PRNG crittograficamente sicuro è l'incapacità degli aggressori di predire i byte successivi. Precisamente, ci sono tre "livelli di sicurezza" che definiscono la sicurezza, nel seguente modello:
- All'attaccante vengono dati s bit di output consecutivo dal PRNG.
- Le capacità di calcolo dell'attaccante sono limitate a 2 k operazioni elementari.
- L'attaccante è sfidato a predire il prossimo bit dal PRNG e non può riuscire con probabilità superiore a 0.5 + 2 - e per un certo valore < em> e .
Si noti che la predizione di un bit può sempre essere eseguita con probabilità 0.5 (con un'ipotesi puramente casuale), quindi ciò che richiediamo è che l'attaccante non possa fare sostanzialmente di meglio.
In generale, normalmente vogliamo che il PRNG soddisfi queste proprietà con k + e ≥ 128. Il "128" è un limite tradizionale. Fondamentalmente, l'utente malintenzionato proverà a enumerare i possibili valori di seed e a vedere cosa corrisponde all'output conosciuto; se l'attaccante ha trovato il seme reale, allora può predire tutti i risultati successivi con una precisione del 100%; altrimenti, l'attaccante non sa nulla ed è tornato a supposizioni basate sulla fortuna, cioè probabilità 0.5 per ogni bit.
Per raggiungere questo livello, il seme deve rappresentare un'entropia di almeno 128 bit . Infatti, affermando che "seed S ha entropia di 128 bit" significa davvero "attaccanti che cercano di indovinare S e farlo da prove successive in ordine ottimale, iniziando dal più valori probabili, avranno successo dopo una media di 2 127 prove ". Il termine "media" è importante qui: l'entropia è interamente basata su probabilità e medie.
Per avere 128 bit di entropia, hai bisogno di almeno 128 bit di dati, perché non puoi adattare n bit di entropia in meno di n bit di dati. Tuttavia, i dati "casuali" della vita reale vengono estratti dalle misure fisiche ed è distorto, quindi ha bisogno di più bit da rappresentare. Ad esempio, è possibile ricavare un po 'di casualità dai tempi dei tasti da parte dell'utente: biologicamente parlando, l'utente non può riprodurre i tempi esatti della pressione dei tasti fino al microsecondo, quindi il ritardo tra due pressioni dei tasti, espresso in nanosecondi, "conterrà" circa 10 bit di entropia - ma un ritardo di un secondo richiede 30 bit per essere codificati in nanosecondi.
In generale, come autore di applicazioni, non è necessario eseguire il lavoro complesso di stima dell'entropia: il sistema operativo aggrega già la casualità da fonti fisiche e calcola tali stime. Quando chiedi al sistema operativo di darti "byte casuali" (aprendo /dev/urandom
su sistemi Linux o chiamando CryptGenRandom()
su Windows), ottieni già bit pieni di entropia. Quindi chiedi 128 bit (16 byte) e avrai un seme abbastanza buono per il tuo PRNG.
(Il "128" è tradizionale. L'attuale limite tecnologico per il più ricco di attaccanti è vicino a 2 75 operazioni, ed è improbabile che aumenti oltre 2 100 nel prossimo due o tre decenni. "128" è considerato elegante dai crittografi perché è un potere di 2).
Se il tuo PRNG è veramente crittograficamente sicuro , allora il reseeding non è necessario: la necessità di eseguire nuovamente il reseing conterebbe effettivamente come un'interruzione, contraddicendo così con la nozione di PRNG che è crittograficamente sicuro.
Molte persone e gli standard insistono ancora sul riemergere, soprattutto a causa di un dogma consolidato che dice che deve essere riesumato, per ragioni che non sono mai realmente specificate. Questo dogma viene dai tempi molto più antichi, quando PRNG era non crittograficamente sicuro, e in realtà non funzionava sui computer, perché era prima che i computer fossero inventati.
Pertanto, è necessario eseguire nuovamente il seeding con la frequenza necessaria per mantenere i tuoi auditor soddisfatti, ma non preoccuparti dei problemi di sicurezza di reseeding o not reseeding: non riesci a eseguire nuovamente il provisioning per ottenere maggiore sicurezza, ma per mantenere gli altri felici e tranquilli.
(Se il tuo CSPRNG NON è crittograficamente sicuro, è improbabile che il reseding riduca comunque la tua pelle.)