Cum computerele generează numere aleatoare
Computerele generează un număr aleatoriu pentru tot, de la criptografie la jocuri video și jocuri de noroc. Există două categorii de numere aleatoare - numerele "adevărate" aleatoare și numerele pseudorandomului - 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" utilizând 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ă Intel cipul de generare aleatorie a numerelor aleatorii este demn de încredere. Pentru a înțelege de ce ar putea să nu fie de încredere, va trebui să înțelegeți în primul rând modul în care numerele aleatorii sunt generalizate și pentru ce sunt folosite.
Ce numere aleatoare sunt folosite pentru
Numere aleatorii au fost folosite de mai multe mii de ani. Indiferent dacă aruncă o monedă sau aruncă zaruri, obiectivul este de a lăsa rezultatul final până la întâmplare. Generatoarele de numere aleatoare dintr-un computer sunt similare - sunt o încercare de a obține un rezultat imprevizibil și 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 scopul jocurilor 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 cifre într-un mod foarte imprevizibil, astfel încât atacatorii să nu le 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ă te întrebi 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 computerizate î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 utiliza 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 14:00 ... 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 utiliza pentru a genera o " 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 aleatoare, "blochează" și nu returnează un rezultat până când nu adună suficientă entropie pentru a returna un număr cu adevărat aleator.
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. Calculatorul nu adună date aleatorii din mediul înconjurător.
Acest lucru nu este neapărat un lucru rău în fiecare 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 pseudo-numere. Pe de altă parte, dacă utilizați criptarea, nu doriți să utilizați numerele pseudo-numere pe care un atacator le-ar putea ghici.
De exemplu, să presupunem că un atacator cunoaște algoritmul și valoarea de însămânțare pe care o folosește un generator de numere pseudonoram. Ș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 pot 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 care au fost generate numai cu date 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, spunând că nu au încredere în el. [Sursa] Ieșirea dispozitivului RdRand ar fi alimentată într-un alt algoritm care adaugă entropie suplimentară, asigurând că orice backdoors din generatorul de numere aleatoare nu ar conta. Linux a lucrat deja în acest fel, amândouă randomizând datele aleatoare provenite de la RdRand, astfel încât să nu fie previzibilă chiar dacă există o backdoor. [Sursa] Într-o recentă AMA ("Ask Me Anything") despre 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 sunat și 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 aleatoare 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