Puncte:1

Generator PRNG care poate repeta blocurile

drapel tf
Tom

Să folosim AES ca cifru de flux și să folosim ca numere de intrare $1,2,3,...$. În acest fel, ar trebui să obținem blocurile aleatoare și fiecare bloc va fi diferit unul de celălalt.

Dar am un generator de blocuri pseudoaleatoare care generează blocuri nu întotdeauna diferite. Deci am putea primi blocaj $B$ o dată și apoi de exemplu din nou după să spunem milioane de blocuri este posibil să obțineți din nou același bloc $B$ (dar ar putea fi rar).

Este încă un generator de blocuri aleatorii bun (trece toate testele). Ar putea fi o problemă dacă cineva ar dori să-l folosească ca PRNG sau dacă cineva ar dori să-l folosească ca flux pentru criptare?

Majoritatea cifrurilor îndeplinesc condiția ca să genereze valori unice, dar în acest caz putem obține aceeași criptare a aceluiași bloc după mai puțin de $2^{128}$ blocuri.

Maarten Bodewes avatar
drapel in
Apropo, există mai multe moduri de a crea un cifr de flux din AES; se pare că descrii în mod explicit AES în modul CTR, nu de ex. CFB sau OFB.
Puncte:2
drapel in

Pentru un CSPRNG aș spune că faptul că poate repeta blocuri este a lucru bun; prezicerea că un model nu se poate repeta este problematică. Singurul motiv pentru care este de obicei acceptabil este că șansa de repetare a blocurilor mai mari este oricum neglijabilă.

Să presupunem că ați folosi un CSPRNG pentru a crea un set de blocuri de 128 de biți, dimensiunea blocului AES. Un milion este cam $2^{20}$. te-ai aștepta la o șansă de $1 - (1 - {1 \over 2^{128}})^{1000000} \aprox 2^{-108}$ pentru ca blocul inițial să fie repetat și {1000000 $ \peste 2^{128}} \aproximativ 2^{-(128 - 20)} = 2^{-108}$ pentru ca orice coliziune în primul milion de blocuri să aibă loc. Motivul pentru care aceste valori sunt aproximativ aceleași este că un milion este aproape nimic pentru valorile pe 128 de biți. După cum puteți vedea, probabilitatea unei coliziuni este atât de mică încât poate fi considerată neglijabilă. Acesta este motivul pentru care un cifr de flux precum AES-CTR poate fi considerat ca un CSPRNG în sine.

În general, CSPRNG-urile au o stare internă mare, ceea ce înseamnă că este imposibil de știut când se repetă PRNG. Mai important, șansa ca ei să lovească un ciclu este extrem de scăzută (dacă este lovit un ciclu, atunci CSPRNG ar genera același model - mare - în repetare). Deci, din cauza impredictibilității, puteți utiliza un CSPRNG ca stream cipher. Acest lucru este valabil și pentru AES / CTR, desigur, dacă te uiți la alte modele decât 128 de biți exact în locul potrivit. Evident, un model de un singur bit se va repeta extrem adesea - doar că nu poți ști ce valoare de biți vei găsi la o anumită poziție. Problema cu AES-CTR este că va atinge un ciclu exact după ce contorul a fost epuizat.

Cu toate acestea, deoarece multe CSPRNG implementari nu au fost proiectate pentru a genera același flux determinist, ar trebui să fiți extrem de atent de a utiliza unul ca un stream cipher. De exemplu, ei pot reînsămânța, pot folosi sămânța dată ca entropie suplimentară, pot genera rezultate diferite atunci când metodele sunt numite diferit sau chiar au algoritmul revizuit. Dacă aveți ghinion, nu veți putea niciodată să regenerați același flux de chei și datele dvs. s-ar pierde (vezi de ex. getRawKey() pe dispozitive Android).

Desigur, AES-CTR va fi, în general, mult mai rapid decât un CSPRNG. Dacă nu vă place AES sau nu aveți accelerare hardware, atunci un cifru de flux precum ChaCha ar fi în mod normal calea de urmat. De obicei, ați folosi aceste cifruri într-un mod autentificat folosind GMAC (AES-GCM) sau Poly1305.

În literatura criptografică veți găsi adesea că termenii „cifrare în flux” și „CSPRNG” sunt folosiți interschimbabil, dar aveți grijă la diferențele practice din ultimele două secțiuni.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.