Puncte:3

Omiterea primelor ieșiri ale cifrului fluxului

drapel tf
Tom

Îmi amintesc că am citit undeva că uneori în unele cifruri de flux este necesar să sărim peste primele valori pe care le produc. Nu găsesc nicio informație despre asta acum.

Dar pare să aibă sens. Așa cum o funcție hash trebuie să facă multe runde înainte de a returna un rezultat aleatoriu, CSPRNG are nevoie de un anumit număr de iterații, astfel încât informațiile de bază și cheie să nu poată fi obținute din primele rezultate.

Cum determinați câte iterații trebuie să fie? Sau există alte modalități de a rezolva această problemă? Pentru ca rezultatele să fie aleatorii încă de la primele iterații ar fi suficient să existe o inițializare corespunzătoare cu o cheie aleatoare și sămânță (care poate fi tratată și ca o cheie). Dar nu cred că asta rezolvă problema rezultatelor primului generator. Puteți citi în continuare câteva proprietăți cheie din acele prime rezultate, exact ca și cum nu ați face suficiente runde în funcția hash.

PS Ideea mea de a testa câte iterații trebuie să sărim este să tratez CSPRNG ca o funcție hash cu o cheie și să-l alimentez prin numere $1,2,3,...$ ca o sămânță cu niște chei, special selectate pentru a le face să pară slabe (dar și cu chei aleatorii). Apoi vedeți dacă o astfel de funcție hash trece teste statistice, cum ar fi PractRand. Aceasta ar fi o condiție minimă. Încă nu exclude faptul că vor exista metode de atacuri criptografice sofisticate care vor alege biți ale cheii din numerele care caută PractRand ca numere aleatorii.

Maarten Bodewes avatar
drapel in
Un cifr de flux bun nu ar trebui să aibă astfel de proprietăți. Cifrele de flux mai vechi/nu atât de bune, cum ar fi RC4, au proprietăți distinctive în fluxul de chei de ieșire. Unele dintre acestea indică o problemă cu octeții de ieșire în general, dar altele depind de o relație cu starea internă a algoritmului, iar acestea sunt, desigur, specifice algoritmului. Aici se află problema: în primul rând, unele probleme posibile ar putea să nu fie detectabile prin analiza „simple” a rezultatelor. Pentru alții atacul depinde în întregime de algoritm. Deci, numărul de iterații depinde.
Puncte:3
drapel cn

Îmi amintesc că am citit undeva că uneori în unele cifruri de flux este necesar să sărim peste primele valori pe care le produc.

Nu niște cifruri de flux, ci un cifr specific: RC4. RC4 este dintr-o epocă anterioară, când primitivele criptografice nu au primit o mare atenție – de fapt, a fost inițial un algoritm secret. Odată ce designul RC4 a fost făcut public, au fost descoperite o serie de puncte slabe. Principala slăbiciune a fost că o părtinire la începutul fluxului cheie. RC4 era popular în momentul în care a fost descoperit pentru prima dată un atac bazat pe această părtinire, iar o contramăsură a fost eliminarea primilor câțiva octeți. De-a lungul timpului, analiza părtinirii a fost îmbunătățită, ceea ce a făcut ca aruncările să fie insuficiente, iar RC4 a pierdut treptat în popularitate.

RC4 are un design foarte simplu: fiecare rundă constă dintr-o simplă amestecare a stării interne și emite un octet de ieșire. Se pare că până când au fost suficiente runde, rezultatul este oarecum previzibil.

Majoritatea cifrurilor efectuează mai multe runde de amestecare înainte de a emite orice ieșire. Și cifrurile de uz comun au fost validate de ani de studiu de către comunitatea de cercetare criptografică.

Așa cum o funcție hash trebuie să facă multe runde înainte de a returna un rezultat aleatoriu, CSPRNG are nevoie de un anumit număr de iterații, astfel încât informațiile de bază și cheie să nu poată fi obținute din primele rezultate.

Da și nu. Este adevărat că un CSPRNG are nevoie de destulă amestecare din sămânță.Dar această amestecare este încorporată în constituenții de bază ai algoritmului. CSPRNG moderne tipice se bazează fie pe un hash (care are deja multe runde înăuntru), fie pe un bloc sau stream cipher (care are deja multe runde înăuntru).

Ideea mea de a testa câte iterații trebuie să sărim este să tratăm CSPRNG ca pe o funcție hash cu o cheie și să-l alimentez cu numerele 1,2,3,... ca o sămânță cu câteva chei

Aceasta este o abordare validă și populară pentru funcții de derivare a cheilor â generarea deterministă a materialului pseudoaleator dintr-o sămânță. (Rețineți că vorbesc despre derivarea cheii din material cu entropie ridicată, nu despre derivarea cheii bazată pe parole, cunoscută și sub numele de extensie a cheilor, care are cerințe diferite.) Exemple de algoritmi de derivare a cheilor care urmează această paradigmă sunt NIST SP 800-108 KDF în modul contor și HKDF.

Cu toate acestea, ca generator aleatoriu, acestei abordări îi lipsește ceva – ceea ce lipsește și RC4, apropo (ceea ce a făcut-o o alegere proastă pentru un CSPRNG, în ciuda popularității sale). Îi lipsește rezistență la întoarcere: proprietatea că, dacă starea este compromisă, aceasta compromite ieșirile RNG viitoare, dar nu ieșirile trecute. Rezistența la backtracking necesită o transformare unidirecțională a stării RNG de fiecare dată când emite ieșire. Orice construcție care utilizează un secret constant și o variabilă publică pentru a genera rezultate nu are rezistență la întoarcere.

kelalaka avatar
drapel in
Ai nevoie de o corectare. Vedeți-l [aici](https://chat.stackexchange.com/transcript/message/61198977#61198977)
Gilles 'SO- stop being evil' avatar
drapel cn
@kelalaka Puteți (bine, Squeamish Ossifrage) vă rog să extindeți sau să furnizați referințe? AFAIK ARC4 a fost publicat în 1994, iar anomaliile statistice au fost cunoscute destul de repede, dar nu în 24 de ore, dar atacurile nu au apărut decât la începutul anilor 2000 (în special https://www.mattblaze.org/papers/others/rc4_ksaproc.pdf în 2001 â a cărui secțiune „atacuri anterioare” citează lucrări din 1997 și 1998 care 1. nu au condus la atacuri practice și 2. au venit după ce RC4 a fost popular, de exemplu, a fost folosit în SSL).
kelalaka avatar
drapel in
[Bob Jenkins, 15 septembrie 1994, 18:51:50](https://groups.google.com/g/sci.crypt/c/JsO3xEATGFA/m/-wO4ttv7BCYJ) vorbesc despre prejudecata pe Sci.Crypt .
Gilles 'SO- stop being evil' avatar
drapel cn
@kelalaka Ah, mulțumesc.Văd, da, am scris despre părtinire, dar am vrut să spun atacuri (practice) bazate pe această părtinire, care a durat câțiva ani.
Puncte:1
drapel sa

Majoritatea codurilor de flux tradiționale au stat $S=(s_1,\ldots,s_n)$ de mărime $n$ biți, o funcție de actualizare a stării $\phi:S\rightarrow S$, care este inițializată de material cheie aleatoare, să zicem $S_0=(k_1,\ldots,k_n)$ iar iterația de stat este $S_{t+1}=\phi(S_t),$ pentru $t=1,2,\ldots.$ Au și o funcție de ieșire $f:S\rightarrow \{0,1\}^\ell,$ care iese $\ell$ biți deodată. De obicei putem avea $\ell=1,$ sau $\ell=8.$

Deci un anumit număr de iterații este necesar pentru ca orice corelații ușor de calculat din materialul cheie să se disipeze în secvența fluxului de chei observată $f(S_t),f(S_{t+1}),\ldots$ (presupunând un text cifrat cunoscut sau un text simplu cunoscut și un cifr aditiv în care textul simplu este XOR cu fluxul de chei).

În mod tradițional, cartografierea $\phi$ era de forma $$ \phi(s_1,\ldots,s_n)=(s_2,\ldots,s_n,s_{n+1}),\quad s_{n+1}=g(s_1,\ldots,s_n) $$

din motive de eficiență, ca în registrele de deplasare. Deci ai nevoie de un multiplu constant al $n$ iterații înainte de a utiliza efectiv fluxul de chei.

Ca și în comentarii, în cifrurile de flux moderne o serie de măsuri, cum ar fi utilizarea IV-urilor sau Nonces-urilor, sau utilizarea diferitelor moduri de operare ale cifrurilor de flux, este posibil să se utilizeze fluxul de chei imediat, fără a arunca nimic din el. De exemplu, dacă IV este aleatoriu și independent de cheie și are aceeași lungime de biți cu starea și este introdus XOR în starea inițială (în timp ce este public), aceasta are un efect de albire și face ca fluxul de cheie să fie independent de cheie.

Tom avatar
drapel tf
Tom
Mulțumesc, acest răspuns îmi face acest subiect și mai clar.

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.