Cum funcționează funcția rand la nivelul mașinii - suprapunerea stivei în limba rusă

Un generator de numere aleatoare pentru acel generator și un generator care nu ajunge de undeva la un număr real aleator de fiecare dată. Dimpotrivă, sau îl inițializați într-un număr cu adevărat aleatoriu sau o faci automat prima dată când îl folosiți.







Acest lucru este în sine mare, deoarece puteți scrie programe previzibile, atunci când aveți nevoie de ele, deoarece secvența numerelor emise de un astfel de generator este determinată explicit de numărul inițial (semințele).

Pe de altă parte, dacă dai o contribuție unui astfel de generator, dai un număr insuficient de aleatoriu (de exemplu, ora curentă în secunde) pe care atacatorul o poate ghici, atunci ai probleme.

Cum să luați în mod corect numere aleatorii "reale" (reale în măsura în care nimeni nu le poate ghici) - problema este largă. Este mai bine să nu inventăm, ci să luăm aceste numere din sistemul de operare prin mecanisme standard de obținere a entropiei. În Linux, acesta este / dev / urandom și sistemul de apel getrandom. Alte OS-uri au propriile metode specifice pentru obținerea numerelor aleatoare.







O problemă separată este tot felul de software care nu utilizează surse de sistem de entropie din motive de lenea dezvoltatorului din motive de eroare. Această problemă se confrunta, de asemenea, cu ssh în Debian. și în PHP cu uniqid (chiar dacă este menționat în documentație) și a străpuns compania Sony. și așa mai departe, și așa mai departe.

După cum puteți ghici, sursele de entropie ale sistemului sunt de asemenea reumplete de undeva. În Linux, sursele primare de entropie sunt tot felul de evenimente aleatorii cum ar fi mișcarea mouse-ului de către utilizator sau întârzierile în accesarea discurilor. În plus, nu există nici o problemă de a folosi surse de entropie "fier", care sunt fie vândute ca dispozitive separate. sau încorporate în TPM. prezent în multe laptop-uri moderne.







Trimiteți-le prietenilor: