Noroc (PRNG)

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

Algoritmul Fortuna este un generator de numere pseudo-aleatorii sigure criptografic proiectat de Bruce Schneier și Niels Ferguson . Este numit după Fortuna , zeița șansei în mitologia romană .

Descriere

Algoritmul Fortuna, care mai precis trebuie înțeles ca o „familie” de PRNG, deoarece permite implementatorilor să modifice unii parametri, este compus din următoarele părți:

  • generatorul însuși care, odată pornit cu o „semință” (o valoare inițială), va produce o cantitate nedeterminată de date pseudo-aleatorii;
  • acumulatorul de entropie , care colectează date aleatorii din diverse surse ( tastatură , mouse etc.) și le folosește, atunci când au fost salvate în număr suficient, pentru a reînnoi semința generatorului;
  • fișierul seed, care stochează o anumită cantitate de date aleatorii utilizate de PRNG pentru a inițializa generatorul la pornirea computerului.

Generatorul

Generatorul se bazează pe un cifru de bloc care funcționează în modul CTR pentru a cripta valorile unui contor care este incrementat. În cartea Criptografie practică , autorii sugerează utilizarea unuia dintre AES , Șarpele și Twofish . [1] Prin generarea blocurilor aleatorii de 128 biți, probabilitatea ca un bloc să se repete de două ori este 1 din 2 65 . În ciuda acestui fapt, cheia se schimbă după generarea a 1 MiB și după fiecare solicitare de date, astfel încât, chiar dacă o cheie este încălcată, aceasta nu compromite securitatea datelor generate anterior.

Acumulatorul de entropie

Acumulatorul de entropie este conceput pentru a rezista atacurilor de „injecție”, adică manipularea surselor utilizate pentru colectarea entropiei și analizarea datelor pe care sistemul le furnizează pe baza celor colectate. Datele colectate sunt stocate în 32 de „ pool-uri ” de entropie: fiecare sursă de entropie își distribuie datele în mai multe pool-uri. Pentru a regenera semințele pentru a noua oară, datele colectate dintr-un anumit grup k sunt utilizate numai dacă 2 k împarte n . În acest fel, pool-ul k este utilizat doar 1/2 k din timp. Cu acest sistem, bazinele cu un indice mai mare sunt folosite pentru a regenera semințele la o frecvență mai mică decât cele cu un indice mai mic: datorită acestui fapt, primele colectează mult mai multă entropie decât cele din urmă. Semințele sunt regenerate folosind o funcție hash criptografică ( SHA-256 ) care acționează asupra conținutului grupului selectat și apoi utilizând rezultatul ca o nouă cheie de cifrare bloc.

Cu excepția cazului în care un atacator este capabil să controleze toate sursele de entropie prin infiltrarea sistemului (caz în care niciun algoritm nu poate păstra securitatea PRNG) vor exista ks pentru care grupul k simo va fi adunat suficientă entropie între două operații de actualizare ale seminței să garanteze un nivel minim de siguranță; în plus, acest grup va fi utilizat cu un interval proporțional cu cantitatea de entropie în cauză, permițând astfel sistemului să recupereze starea de securitate în cazul unui atac de tip „injecție”. Toate acestea depind de câte bazine aveți: Fortuna folosește 32 și necesită generarea unei semințe noi de cel puțin 10 ori pe secundă. Pentru a utiliza toate datele din toate grupurile, Schneier și Ferguson au calculat că sistemul durează aproximativ 13 ani, ceea ce este un timp acceptabil pentru utilizările PRNG. Dacă este necesar un nivel și mai ridicat de securitate, numărul de pool-uri utilizate de algoritm poate fi mărit.

Fortuna diferă de Yarrow , un alt PRNG de Schneier, Kelsey și Ferguson, în principal în modul în care este gestionat acumulatorul de entropie: Yarrow folosea doar 2 bazine și avea un mecanism de estimare a entropiei colectate; de asemenea, a folosit algoritmul SHA-1 ca funcție hash , care este mai puțin sigur decât SHA-256.

Notă

  1. ^ Schneier, Ferguson , Criptografie practică .

Bibliografie

linkuri externe