Generare de numere aleatorii - Random number generation

Dice sunt un exemplu de generator de numere aleatoare hardware mecanice. Când se rulează o matriță cubică, se obține un număr aleatoriu de la 1 la 6.

Generarea de numere aleatorii este un proces prin care, adesea prin intermediul unui generator de numere aleatorii ( RNG ), se generează o secvență de numere sau simboluri care nu pot fi prezise în mod rezonabil mai bine decât prin întâmplare . Aceasta înseamnă că secvența de rezultat particulară va conține unele modele detectabile în retrospectivă, dar imprevizibile pentru prevedere. Generatorii de numere aleatoare adevărate pot fi generatori de numere aleatoare hardware (HRNGS) care generează numere aleatorii, în care fiecare generație este o funcție a valorii curente a atributului unui mediu fizic care se schimbă constant într-un mod care este practic imposibil de modelat. Acest lucru ar fi în contrast cu așa-numitele „generații de numere aleatorii” realizate de generatori de numere pseudorandom (PRNG) care generează numere care arată doar aleatoriu, dar sunt de fapt predeterminate - aceste generații pot fi reproduse doar prin cunoașterea stării PRNG .

Diverse aplicații ale întâmplării au condus la dezvoltarea mai multor metode diferite pentru generarea datelor aleatorii . Unele dintre acestea au existat din cele mai vechi timpuri, printre rândurile cărora se numără exemple binecunoscute „clasice”, inclusiv aruncarea zarurilor , răsucirea monedelor , amestecarea cărților de joc , utilizarea tulpinilor de șarpe (pentru ghicire ) în I Ching , precum și nenumărate alte tehnici. Datorită naturii mecanice a acestor tehnici, generarea unor cantități mari de numere suficient de aleatorii (importante în statistici) a necesitat multă muncă și timp. Astfel, rezultatele ar fi uneori colectate și distribuite ca tabele cu numere aleatorii .

Există mai multe metode de calcul pentru generarea de numere pseudorandom. Toți nu ating obiectivul adevăratei aleatorii, deși pot îndeplini, cu succes diferit, unele dintre testele statistice ale randomității menite să măsoare cât de imprevizibile sunt rezultatele lor (adică în ce măsură modelele lor sunt discernibile). Acest lucru le face în general inutilizabile pentru aplicații precum criptografie . Cu toate acestea, există și generatoare de numere pseudorandom (CSPRNGS) sigure criptografic, proiectate cu atenție , cu caracteristici speciale special concepute pentru utilizare în criptografie.

Aplicații și utilizări practice

Generatorii de numere aleatorii au aplicații în jocuri de noroc , eșantionare statistică , simulare computerizată , criptografie , design complet randomizat și alte domenii în care este de dorit să producă un rezultat imprevizibil. În general, în aplicațiile cu caracteristică primordială imprevizibilă, cum ar fi în aplicațiile de securitate, generatorii de hardware sunt, în general, preferați față de algoritmii pseudorandom, acolo unde este posibil.

Generatoarele de numere pseudorandom sunt foarte utile în dezvoltarea simulărilor metodei Monte Carlo , deoarece depanarea este facilitată de capacitatea de a rula aceeași secvență de numere aleatorii pornind din aceeași semință aleatorie . Sunt folosite și în criptografie - atâta timp cât sămânța este secretă. Expeditorul și receptorul pot genera automat același set de numere pentru a le folosi ca taste.

Generarea numerelor pseudorandom este o sarcină importantă și obișnuită în programarea computerelor. În timp ce criptografia și anumiți algoritmi numerici necesită un grad foarte ridicat de aleatorizare aparentă , multe alte operații au nevoie doar de o cantitate modestă de imprevizibilitate. Câteva exemple simple ar putea fi prezentarea unui utilizator cu o „cotare aleatoare a zilei” sau stabilirea modului în care un adversar controlat de computer s-ar putea mișca într-un joc pe computer. Formele mai slabe de randomitate sunt utilizate în algoritmi hash și în crearea algoritmilor de căutare și sortare amortizați .

Unele aplicații care par la prima vedere potrivite pentru randomizare nu sunt de fapt atât de simple. De exemplu, un sistem care selectează „în mod aleatoriu” piese de muzică pentru un sistem de muzică de fundal trebuie să apară doar aleatoriu și poate avea chiar și modalități de a controla selecția muzicii: un sistem adevărat aleator nu ar avea nicio restricție asupra aceluiași element care apare două sau trei ori în succesiune.

„Adevărat” vs. numere pseudo-aleatorii

Există două metode principale utilizate pentru a genera numere aleatorii. Prima metodă măsoară un fenomen fizic care este de așteptat să fie aleator și apoi compensează posibilele prejudecăți în procesul de măsurare. Exemple de surse includ măsurarea zgomotului atmosferic , a zgomotului termic și a altor fenomene electromagnetice și cuantice externe. De exemplu, radiația cosmică de fond sau decăderea radioactivă măsurată pe scări scurte de timp reprezintă surse de entropie naturală .

Viteza cu care entropia poate fi recoltată din surse naturale depinde de măsurarea fenomenelor fizice subiacente. Astfel, se spune că sursele de entropie „adevărată” naturală se blochează  - sunt limitate la rată până când se recoltează suficientă entropie pentru a satisface cererea. Pe unele sisteme de tip Unix, inclusiv cele mai multe distribuții Linux , fișierul pseudo-dispozitiv / dev / random se va bloca până când se recoltează suficientă entropie din mediu. Datorită acestui comportament de blocare, citirile voluminoase mari din / dev / random , cum ar fi umplerea unei unități de hard disk cu biți aleatori, pot fi adesea lente pe sistemele care utilizează acest tip de sursă de entropie.

A doua metodă folosește algoritmi de calcul care pot produce secvențe lungi de rezultate aparent aleatorii, care sunt de fapt complet determinate de o valoare inițială mai scurtă, cunoscută sub numele de valoare sau cheie . Ca rezultat, întreaga secvență aparent aleatorie poate fi reprodusă dacă se cunoaște valoarea semințelor. Acest tip de generator de numere aleatorii este adesea numit generator de numere pseudorandom . Acest tip de generator nu se bazează de obicei pe surse de entropie naturală, deși poate fi însămânțat periodic de surse naturale. Acest tip de generator nu este blocant, deci nu sunt limitate la rata de către un eveniment extern, ceea ce face posibilă citirea în bloc a volumului mare.

Unele sisteme adoptă o abordare hibridă, oferind aleatorietatea recoltată din surse naturale atunci când sunt disponibile și revenind la generatoare de numere pseudorandom (CSPRNG) bazate pe software re-însămânțate periodic . Rezerva apare atunci când rata de citire dorită a aleatoriei depășește capacitatea abordării naturale de recoltare de a ține pasul cu cererea. Această abordare evită comportamentul de blocare a ratei limitate a generatoarelor de numere aleatorii, bazat pe metode mai lente și pur de mediu.

În timp ce un generator de numere pseudorandom bazat exclusiv pe logica deterministă nu poate fi considerat niciodată ca o sursă de număr aleatoriu „adevărat” în sensul cel mai pur al cuvântului, în practică, acestea sunt în general suficiente chiar și pentru a solicita aplicații critice de securitate. Într-adevăr, generatoarele de numere pseudorandom aleatorii proiectate și implementate cu atenție pot fi certificate pentru scopuri criptografice critice de securitate, așa cum este cazul algoritmului șarpei și al fortunei . Primul este baza sursei / dev / random de entropie pe FreeBSD , AIX , OS X , NetBSD și altele. OpenBSD folosește un algoritm de numere pseudorandom cunoscut sub numele de arc4random .

Metode de generare

Metode fizice

Cele mai vechi metode de generare a numerelor aleatorii, cum ar fi zarurile, flipping-urile și ruletele, sunt folosite și astăzi, în principal în jocuri și jocuri de noroc, deoarece acestea tind să fie prea lente pentru majoritatea aplicațiilor din statistici și criptografie.

Un generator de numere aleatorii fizice se poate baza pe un fenomen fizic atomic sau subatomic esențial aleator, a cărui imprevizibilitate poate fi trasată la legile mecanicii cuantice . Sursele de entropie includ dezintegrarea radioactivă , zgomotul termic , zgomotul împușcat , zgomotul avalanșei în diodele Zener , deriva ceasului , sincronizarea mișcărilor reale ale unui cap de citire-scriere a discului dur și zgomotul radio . Cu toate acestea, fenomenele fizice și instrumentele utilizate pentru a le măsura prezintă, în general, asimetrii și prejudecăți sistematice care fac ca rezultatele lor să nu fie uniform aleatorii. Un extractor aleatoriu , cum ar fi o funcție hash criptografică , poate fi folosit pentru a aborda o distribuție uniformă a biților dintr-o sursă neuniformă aleatorie, deși la o rată de biți mai mică.

Apariția surselor de entropie fotonică în bandă largă, cum ar fi haosul optic și zgomotul de emisie spontană amplificată , ajută foarte mult la dezvoltarea generatorului de numere aleatorii fizice. Printre acestea, haosul optic are un potențial ridicat de a produce fizic numere aleatorii de mare viteză datorită lățimii sale de bandă mari și a amplitudinii mari. În 2013 a fost construit un prototip al unui generator de biți fizici aleatori, în timp real, de mare viteză, bazat pe un laser haotic.

Au fost concepute diferite modalități imaginative de colectare a acestor informații entropice. O tehnică este de a rula o funcție hash împotriva unui cadru al unui flux video dintr-o sursă imprevizibilă. Lavarand a folosit această tehnică cu imagini ale mai multor lămpi de lavă . HotBits măsoară decăderea radioactivă cu tuburile Geiger – Muller , în timp ce Random.org folosește variații ale amplitudinii zgomotului atmosferic înregistrat cu un radio normal.

Demonstrarea unui generator simplu de numere aleatorii bazat pe unde și când se face clic pe un buton

O altă sursă comună de entropie este comportamentul utilizatorilor umani ai sistemului. Deși oamenii nu sunt considerați buni generatori de aleatoriu la cerere, ei generează un comportament aleatoriu destul de bine în contextul jocurilor de strategie mixte . Unele programe informatice legate de securitate necesită ca utilizatorul să facă o serie lungă de mișcări ale mouse-ului sau de intrări de la tastatură pentru a crea suficientă entropie necesară pentru a genera chei aleatorii sau pentru a inițializa generatoare de numere pseudorandom.

Metode de calcul

Majoritatea numerelor aleatorii generate de computer utilizează PRNG-uri, care sunt algoritmi care pot crea automat rulări lungi de numere cu proprietăți aleatorii bune, dar în cele din urmă secvența se repetă (sau utilizarea memoriei crește fără legături). Aceste numere aleatorii sunt bune în multe situații, dar nu sunt la fel de aleatorii ca numerele generate de zgomotul atmosferic electromagnetic folosit ca sursă de entropie. Seria de valori generate de astfel de algoritmi este în general determinată de un număr fix numit seed. Unul dintre cele mai comune PRNG este generatorul congruențial liniar , care folosește recurența

pentru a genera numere, unde a , b și m sunt numere întregi mari și este următorul în X ca o serie de numere pseudorandom. Numărul maxim de numere pe care formula le poate produce este cu unul mai mic decât modulul , m -1. Relația de recurență poate fi extinsă la matrice pentru a avea perioade mult mai lungi și proprietăți statistice mai bune. Pentru a evita anumite proprietăți non-aleatorii ale unui singur generator congruențial liniar, mai mulți astfel de generatori de numere aleatorii cu valori ușor diferite ale coeficientului multiplicator, a , pot fi folosiți în paralel, cu un generator de numere aleatoare "master" care selectează dintre mai mulți generatoare diferite.

O metodă simplă cu stilou și hârtie pentru generarea numerelor aleatorii este așa-numita metodă pătrat mijlociu sugerată de John von Neumann . Deși este simplu de implementat, rezultatul său este de calitate slabă. Are o perioadă foarte scurtă și slăbiciuni severe, cum ar fi secvența de ieșire convergând aproape întotdeauna la zero. O inovație recentă este combinarea pătratului de mijloc cu o secvență Weyl . Această metodă produce rezultate de înaltă calitate pe o perioadă lungă de timp.

Majoritatea limbajelor de programare ale computerului includ funcții sau rutine de bibliotecă care furnizează generatoare de numere aleatorii. Acestea sunt deseori concepute pentru a furniza un octet sau un cuvânt aleatoriu sau un număr în virgulă mobilă distribuit uniform între 0 și 1.

Calitatea, adică caracterul aleatoriu al unor astfel de funcții de bibliotecă, variază foarte mult de la o ieșire complet previzibilă, până la securitate criptografică. Generatorul implicit de numere aleatoare în multe limbi, inclusiv Python, Ruby, R, IDL și PHP se bazează pe algoritmul Mersenne Twister și nu este suficient în scopuri de criptografie, așa cum se menționează în mod explicit în documentația lingvistică. Astfel de funcții de bibliotecă au deseori proprietăți statistice slabe și unele vor repeta modele după doar zeci de mii de încercări. Acestea sunt adesea inițializate folosind ceasul în timp real al unui computer ca semință, deoarece un astfel de ceas măsoară în general în milisecunde, mult dincolo de precizia persoanei . Aceste funcții pot oferi suficientă aleatoriu pentru anumite sarcini (de exemplu, jocuri video), dar sunt inadecvate acolo unde este necesară o aleatoriu de înaltă calitate, cum ar fi în aplicațiile de criptografie, statistici sau analize numerice.

Surse de numere aleatoare de calitate mult mai mare sunt disponibile pe majoritatea sistemelor de operare; de exemplu / dev / random pe diferite versiuni BSD, Linux, Mac OS X, IRIX și Solaris sau CryptGenRandom pentru Microsoft Windows. Majoritatea limbajelor de programare, inclusiv cele menționate mai sus, oferă un mijloc de a accesa aceste surse de calitate superioară.

De către oameni

Generarea de numere aleatorii poate fi realizată și de oameni, sub forma colectării diverselor intrări de la utilizatorii finali și a utilizării acestora ca sursă de randomizare. Cu toate acestea, majoritatea studiilor constată că subiecții umani au un anumit grad de non-aleatoriu atunci când încearcă să producă o secvență aleatorie de cifre sau litere. Ele pot alterna prea mult între alegeri în comparație cu un bun generator aleatoriu; astfel, această abordare nu este utilizată pe scară largă.

Postprocesare și verificări statistice

Chiar și dat fiind o sursă de numere aleatorii plauzibile (poate de la un generator hardware cuantic bazat mecanic), obținerea de numere care sunt complet imparțiale are grijă. În plus, comportamentul acestor generatoare se schimbă adesea cu temperatura, tensiunea de alimentare, vârsta dispozitivului sau alte interferențe exterioare. Și o eroare software într-o rutină de numere pseudorandom sau o eroare hardware în hardware-ul pe care rulează poate fi la fel de dificil de detectat.

Numerele aleatorii generate sunt uneori supuse testelor statistice înainte de utilizare pentru a se asigura că sursa de bază funcționează în continuare și apoi sunt procesate pentru a-și îmbunătăți proprietățile statistice. Un exemplu ar fi generatorul de numere aleatorii hardware TRNG9803, care utilizează o măsurare a entropiei ca test hardware și apoi procesează secvența aleatorie cu un cifru de flux de registru de schimbare. În general, este dificil să se utilizeze teste statistice pentru a valida numerele aleatorii generate. Wang și Nicol au propus o tehnică de testare statistică bazată pe distanță, utilizată pentru a identifica punctele slabe ale mai multor generatoare aleatorii. Li și Wang au propus o metodă de testare a numerelor aleatorii bazată pe surse de entropie haotică cu laser folosind proprietăți de mișcare browniană.

Alte considerente

Remodelarea distribuției

Distribuții uniforme

Majoritatea generatoarelor de numere aleatorii funcționează nativ cu numere întregi sau biți individuali, deci este necesar un pas suplimentar pentru a ajunge la distribuția uniformă „canonică” între 0 și 1. Implementarea nu este la fel de banală ca împărțirea întregului la valoarea sa maximă posibilă. Specific:

  1. Numărul întreg utilizat în transformare trebuie să furnizeze suficienți biți pentru precizia dorită.
  2. Natura matematicii cu virgulă mobilă însăși înseamnă că există mai multă precizie cu cât numărul este mai aproape de zero. Această precizie suplimentară nu este de obicei utilizată din cauza numărului mare de biți necesari.
  3. Eroarea de rotunjire în diviziune poate influența rezultatul. În cel mai rău caz, o legătură presupusă exclusă poate fi atrasă în mod contrar așteptărilor bazate pe matematica cu număr real.

Algoritmul principal, folosit de OpenJDK, Rust și Numpy, este descris într-o propunere pentru STL-ul C ++ . Nu folosește precizia suplimentară și suferă de părtinire doar în ultimul bit din cauza rotunjirii la egalitate. Alte preocupări numerice sunt justificate atunci când se mută această distribuție uniformă „canonică” într-un interval diferit. O metodă propusă pentru limbajul de programare Swift pretinde că folosește precizia deplină peste tot.

Numere întregi distribuite uniform sunt utilizate în mod obișnuit în algoritmi precum Fisher-Yates shuffle . Din nou, o implementare naivă poate induce o prejudecată modulo în rezultat, deci trebuie folosiți algoritmi mai implicați. O metodă care nu efectuează aproape niciodată diviziune a fost descrisă în 2018 de Daniel Lemire, actualul proces fiind actualul „algoritm optim” inspirat din codificarea aritmetică din 2021 de către Stephen Canon de la Apple Inc.

Majoritatea 0-1 RNG-uri includ 0, dar exclud 1, în timp ce altele includ sau exclud ambele.

Alte distribuții

Având în vedere o sursă de numere aleatorii uniforme, există câteva metode pentru a crea o nouă sursă aleatorie care corespunde unei funcții de densitate a probabilității . O metodă, numită metoda inversiunii , implică integrarea până la o zonă mai mare sau egală cu numărul aleatoriu (care ar trebui să fie generat între 0 și 1 pentru distribuții adecvate). O a doua metodă, numită metoda de acceptare-respingere , implică alegerea unei valori x și y și testarea dacă funcția lui x este mai mare decât valoarea y. Dacă este, valoarea x este acceptată. În caz contrar, valoarea x este respinsă și algoritmul încearcă din nou.

Ca exemplu pentru eșantionarea respingerii, pentru a genera o pereche de numere aleatorii standard distribuite în mod normal statistic independente ( x , y ), se pot genera mai întâi coordonatele polare ( r , θ ), unde r 2 ~ χ 2 2 și θ ~ UNIFORM ( 0,2π) (vezi Transformarea Box – Muller ).

Albire

Ieșirile mai multor RNG-uri independente pot fi combinate (de exemplu, folosind o operație XOR bit-wise ) pentru a oferi un RNG combinat cel puțin la fel de bun ca cel mai bun RNG utilizat. Aceasta este denumită albire software .

Generatoarele de numere aleatorii computaționale și hardware sunt uneori combinate pentru a reflecta beneficiile ambelor tipuri. Generatorii computaționali de numere aleatorii pot genera de obicei numere pseudorandom mult mai repede decât generatoarele fizice, în timp ce generatoarele fizice pot genera „aleatoritate adevărată”.

Secvențe cu discrepanță redusă ca alternativă

Unele calcule care utilizează un generator de numere aleatorii pot fi rezumate ca calculul unei valori totale sau medii, cum ar fi calculul integralelor prin metoda Monte Carlo . Pentru astfel de probleme, este posibil să se găsească o soluție mai precisă prin utilizarea așa-numitelor secvențe cu discrepanță redusă , numite și numere quasirandom . Astfel de secvențe au un model definit care umple golurile în mod egal, calitativ vorbind; o secvență cu adevărat aleatorie poate, și de obicei, lasă lacune mai mari.

Activități și demonstrații

Următoarele site-uri pun la dispoziție mostre de numere aleatorii:

  • Cele Socr pagini de resurse conțin un număr de activități practice interactive și demonstrații de generare de numere aleatorii folosind applet - uri Java.
  • Grupul de optică cuantică de la ANU generează numere aleatorii provenite din vidul cuantic. Eșantioane de numere aleatoare sunt disponibile pe pagina lor de cercetare cu generatorul de numere aleatorii cuantice.
  • Random.org pune la dispoziție numere aleatorii care provin din întâmplarea zgomotului atmosferic.
  • Serviciul Quantum Random Bit Generator de la Institutul Ruđer Bošković recoltează aleatorietatea din procesul cuantic de emisie fotonică în semiconductori. Ele furnizează o varietate de moduri de preluare a datelor, inclusiv biblioteci pentru mai multe limbaje de programare.
  • Grupul de la Universitatea de Tehnologie Taiyuan generează numere aleatorii provenite dintr-un laser haotic. Eșantioane de număr aleatoriu sunt disponibile la serviciul lor de generare de numere aleatorii fizice.

În spate

Deoarece o mare parte a criptografiei depinde de un generator de numere aleatorii sigure criptografic pentru generarea de chei și nonce criptografice , dacă un generator de numere aleatorii poate fi previzibil, poate fi folosit ca backdoor de către un atacator pentru a sparge criptarea.

Se raportează că NSA a introdus o ușă din spate în generatorul de numere pseudorandom securizat criptografic NIST certificat Dual EC DRBG . Dacă, de exemplu, se creează o conexiune SSL folosind acest generator de numere aleatorii, atunci potrivit lui Matthew Green ar permite NSA să determine starea generatorului de numere aleatorii și, prin urmare, să poată citi în cele din urmă toate datele trimise prin conexiunea SSL. Chiar dacă era evident că Dual_EC_DRBG era un generator de numere pseudorandom aleatorii foarte slab și, eventual, cu mult înainte de confirmarea backdoor-ului NSA în 2013, a văzut o utilizare semnificativă în practică până în 2013, de exemplu, de către compania de securitate proeminentă RSA Security . Au fost ulterior acuzații că RSA Security a introdus cu bună știință un backdoor NSA în produsele sale, posibil ca parte a programului Bullrun . RSA a negat introducerea cu bună știință a unei uși din spate în produsele sale.

De asemenea, s-a teoretizat că RNG-urile hardware ar putea fi modificate în secret pentru a avea mai puțină entropie decât s-a menționat, ceea ce ar face criptarea folosind RNG-ul hardware susceptibil la atac. O astfel de metodă care a fost publicată funcționează prin modificarea măștii dopante a cipului, care ar fi nedetectabilă la ingineria inversă optică. De exemplu, pentru generarea aleatorie de numere în Linux, este văzut ca inacceptabil să folosiți hardware-ul RDRAND Intel RNG fără a amesteca ieșirea RDRAND cu alte surse de entropie pentru a contracara orice ușă din spate în RNG hardware, mai ales după revelarea programului NSA Bullrun .

În 2010, o extragere de loterie din SUA a fost amenajată de către directorul de securitate a informațiilor al Asociației Multi-State Lottery (MUSL), care a instalat subrept pe malware din spate pe computerul securizat RNG al MUSL în timpul întreținerii de rutină. În timpul hacks, bărbatul a câștigat o sumă totală de 16.500.000 de dolari, prin prezicerea corectă a numerelor de câteva ori pe an.

Randomizarea aspectului spațiului de adresare (ASLR), o atenuare împotriva ciocănitorului și atacurilor aferente asupra hardware-ului fizic al cipurilor de memorie s-a dovedit a fi inadecvată de la începutul anului 2017 de către VUSec. Algoritmul numărului aleatoriu, dacă se bazează pe un registru de schimbare implementat în hardware, este previzibil la valori suficient de mari ale p și poate fi proiectat invers cu suficientă putere de procesare ( Brute Force Hack ). Acest lucru înseamnă, de asemenea, indirect că malware-ul care folosește această metodă poate rula atât pe GPU-uri, cât și pe CPU-uri, dacă este codat pentru a face acest lucru, chiar folosind GPU pentru a sparge ASLR pe CPU în sine.

Vezi si

Referințe

Lecturi suplimentare

linkuri externe