13Jul
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 exterioare, 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ă chip-ul integrat de generare aleatorie de la 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
Numerele aleatoare au fost folosite de mai multe 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 le poată ghici. Aceste numere aleatoare sunt esențiale pentru criptarea securizată, indiferent dacă criptați propriile fișiere sau doar folosiți un site web HTTPS pe Internet.
Numere adevărate aleatoare
Este posibil 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 grupăm numerele aleatoare pe care le generează calculatoarele în două tipuri, în funcție de modul în care sunt generate: numere aleatoare "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ă folosească 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ă exact la 0.23423523 secunde după ora 14. Luați destul de multe ori 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/ aleatoriu 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 aleatoriu.
Numerele pseudorandomului
Numerele pseudorandomului reprezintă o alternativă la numerele aleatoare "adevărate".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 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 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 hardware-ului Intel
Pentru a face lucrurile mai ușoare pentru dezvoltatori și pentru a ajuta la generarea unor numere aleatorii securizate, chips-urile Intel includ un generator de numere aleatoare bazate pe hardware, cunoscut sub numele de RdRand. Acest cip folosește o sursă de entropie pe procesor și furnizează numere aleatorii software-ului 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ă există 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.[Source]
Desigur, acest lucru nu este probabil 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 aleatoare adună "entropia" sau date aparent aleatorii din lumea fizică din jurul lor. Pentru numerele aleatoare care nu au cu adevărat trebuie să fie aleatoare, ele pot folosi doar un algoritm și o valoare de semințe.
Credit de imagine: recre89 pe Flickr, Lisa Brewster pe Flickr, Ryan Somma pe Flickr, huangjiahui pe Flickr