If-Koubou

Cum computerele generează numere aleatoare

Cum computerele generează numere aleatoare (Cum să)

Computerele generează un număr aleatoriu pentru totul, de la criptografie la jocuri video și jocuri de noroc. Există două categorii de numere aleatoare - numere aleatoare "adevărate" și numere de pseudo-numere - iar diferența este importantă pentru securitatea sistemelor de criptare.

Computerele pot genera numere cu adevărat aleatoare observând unele date din exterior, cum ar fi mișcările mouse-ului sau zgomotul ventilatorului, care nu este previzibil și creând date din acesta. Aceasta este cunoscută sub numele de entropie. Alteori, ele generează numere "pseudorandom", folosind un algoritm, astfel încât rezultatele să apară aleatoare, chiar dacă nu sunt.

Acest subiect a devenit mai controversat recent, cu mulți oameni care pun la îndoială dacă încorporează un cip de generație aleatorie de hardware ale Intel. Pentru a înțelege motivele pentru care ar putea să nu fie de încredere, va trebui să înțelegeți cum sunt generate în primul rând numerele aleatorii și pentru ce sunt folosite.

Ce numere aleatoare sunt utilizate pentru

Numere aleatorii au fost folosite de mii de ani. Indiferent dacă aruncă o monedă sau aruncă zaruri, scopul este să lase rezultatul final la șansa aleatorie. Generatoarele de numere aleatoare dintr-un computer sunt similare - sunt o încercare de a obține un rezultat imprevizibil, aleatoriu.

Generatoarele de numere aleatoare sunt utile în multe scopuri diferite. În afară de aplicațiile evidente, cum ar fi generarea de numere aleatoare în scopuri de jocuri de noroc sau crearea de rezultate imprevizibile într-un joc pe calculator, aleatorie este importantă pentru criptografie.

Criptografia necesită numere pe care atacatorii nu le pot ghici. Nu putem folosi aceleași numere mereu și mereu. Vrem să generăm aceste numere într-un mod foarte imprevizibil, astfel încât atacatorii să nu-i poată ghici. Aceste numere aleatoare sunt esențiale pentru criptarea securizată, indiferent dacă criptați propriile fișiere sau folosiți doar un site web HTTPS pe Internet.

Numere adevărate aleatoare

S-ar putea să vă întrebați cum poate un computer să genereze un număr aleatoriu. De unde vine această "aleatorie". Dacă este doar o bucată de cod de computer, nu este posibil ca numerele generate de calculator să poată fi previzibile?

În general, grupează numerele aleatoare pe care calculatoarele le generează în două tipuri, în funcție de modul în care sunt generate: numere aleatorii "adevărate" și numere pseudo-aleatoare.

Pentru a genera un număr aleatoriu "adevărat", computerul măsoară un anumit tip de fenomen fizic care are loc în afara calculatorului. De exemplu, calculatorul ar putea măsura decăderea radioactivă a unui atom. Potrivit teoriei cuantice, nu există nici o modalitate de a ști sigur când se va produce decăderea radioactivă, deci aceasta este în esență "aleatorie pură" din univers. Un atacator nu ar fi capabil să prezică când s-ar produce decăderea radioactivă, așa că nu ar cunoaște valoarea aleatoare.

Pentru un exemplu de zi cu zi, calculatorul se poate baza pe zgomotul atmosferic sau pur și simplu să utilizeze ora exactă când apăsați tastele de pe tastatură ca sursă de date imprevizibile sau entropie. De exemplu, calculatorul dvs. ar putea observa că ați apăsat o tastă la exact 0.23423523 secunde după ora 2 ... Luați suficient de timpurile specifice asociate cu aceste apăsări de taste și veți avea o sursă de entropie pe care o puteți folosi pentru a genera un " număr. Nu ești o mașină previzibilă, deci un atacator nu poate ghici exact momentul în care apăsați aceste taste. Dispozitivul / dev / random pe Linux, care generează numere aleatorii, "blochează" și nu returnează un rezultat până când nu adună suficientă entropie pentru a returna un număr cu adevărat aleatoriu.

Numerele pseudorandomului

Numerele pseudorandomului reprezintă o alternativă la numerele "adevărate" aleatoare. Un calculator ar putea folosi o valoare a semințelor și un algoritm pentru a genera numere care par a fi aleatoare, dar care sunt de fapt previzibile. Computerul nu adună date aleatorii din mediul înconjurător.

Acest lucru nu este neapărat un lucru rău în orice situație. De exemplu, dacă jucați un joc video, nu contează cu adevărat dacă evenimentele care apar în acel joc sunt împărțite de numere aleatoare "adevărate" sau numere de pseudo-numere. Pe de altă parte, dacă utilizați criptare, nu doriți să utilizați numerele pseudo-numere pe care un atacator le-ar putea ghici.

De exemplu, să presupunem că un atacator știe algoritmul și valoarea de însămânțare pe care o folosește un generator de numere pseudorandomice. Și să presupunem că un algoritm de criptare obține un număr de pseudorandom din acest algoritm și îl folosește pentru a genera o cheie de criptare fără a adăuga nici o aleatorie suplimentară. Dacă un atacator știe suficient, ei ar putea lucra înapoi și pot determina numărul pseudorandomului pe care algoritmul de criptare trebuie să îl fi ales în acest caz, rupând criptarea.

NSA și generatorul de numere aleatoare ale producătorului Intel

Pentru a face lucrurile mai ușoare pentru dezvoltatori și pentru a ajuta la generarea unor numere aleatorii sigure, chips-urile Intel includ un generator de numere aleatorii bazate pe hardware, cunoscut sub numele de RdRand. Acest cip folosește o sursă de entropie pe procesor și furnizează numere aleatorii software-ului atunci când software-ul le solicită.

Problema aici este că generatorul de numere aleatoare este în esență o cutie neagră și nu știm ce se întâmplă în interiorul ei. Dacă RdRand conținea un backdoor NSA, guvernul ar fi capabil să spargă cheile de criptare generate doar cu datele furnizate de acel generator de numere aleatoare.

Aceasta este o preocupare serioasă. În decembrie 2013, dezvoltatorii programului FreeBSD au eliminat sprijinul pentru utilizarea RdRand direct ca sursă de întâmplări, declarând că nu au încredere în el. [Sursa] Ieșirea dispozitivului RdRand ar fi introdusă într-un alt algoritm care adaugă o entropie suplimentară, asigurându-se că orice backdoors din generatorul de numere aleatoare nu ar conta.Linux a lucrat deja în acest fel, amândouă randomizând datele aleatoare provenind de la RdRand, astfel încât să nu fie previzibilă chiar dacă a existat o backdoor. [Source] Într-un recent AMA ("Ask Me Anything") pe Reddit, CEO-ul Intel, Brian Krzanich, nu a răspuns la întrebările cu privire la aceste preocupări. [Sursă]

Desigur, acest lucru nu este doar o problemă cu chips-urile Intel. Dezvoltatorii programului FreeBSD au apelat de asemenea pe jetoanele Via. Această controversă arată că generarea de numere aleatorii care sunt cu adevărat aleatoare și care nu sunt previzibile este atât de importantă.

Pentru a genera numere aleatoare "adevărate", generatoarele de numere aleatorii adună "entropia" sau date aparent aleatorii din lumea fizică din jurul lor. Pentru numere aleatorii care nu într-adevăr trebuie să fie aleatorii, pot folosi doar un algoritm și o valoare a semințelor.

Credit de imagine: recre89 pe Flickr, Lisa Brewster pe Flickr, Ryan Somma pe Flickr, huangjiahui pe Flickr