Majoritatea celor care au cochetat putin cu programarea au dat mai devreme sau mai tarziu de o functie care genereaza numere aleatoare. Eu unul cred ca am folosit pentru prima oara o astfel de functie intr-un program in BASIC pe HC91, in care generam un numar aleator care trebuia ghicit de jucator in cat mai putine incercari (la fiecare incercare acesta primind indicii de genul “mai mare”, “mai mic” sau “cald”, “rece”, etc).
Ceea ce putini stiu este cat de importante sunt numerele aleatoare in o varietate de domenii, printre care notabil in IT, securitate. Si din pacate, proportional cu importanta lor se situeaza si dificultatea generarii lor.
Un sistem de calcul nu poate genera numere aleatorii corecte, punct. Tot ceea ce programele sau functiile de generare numere aleatoare incearca sa obtina este un numar cat mai aleator cu putinta, dar acestea din pacate sunt numere pseudoaleatoare, in sensul ca pot deveni predictibile dupa un numar mai mare sau mai mic de generari, si asta este exact ceea ce NU vrem sa se intample. Printre termenii si notiunile importante legate de acest subiect gasim:
- generator de numere pseudo-aleatoare (PRNG – Pseudo Random Number Generators) – orice sistem de calcul
- generator de numere aleatoare reale (TRNG – True Random Number Generators) – orice sistem care extrage numere aleatoare din fenomene fizice
- pattern – un model, un sir de evenimente/simboluri/valori care se repeta; nu dorim sa apara un model care se repeta, deoarece in momentul in care exista un model predictibil intr-o lista de numere generate acestea isi pierd chiar proprietatea de a fi aleatoare
Generatoarele de numere pseudo-aleatoare (un computer de exemplu) au ca si atribute eficienta, pentru ca pot produce un numar mare de numere aleatoare intr-un timp relativ scurt, dar si determinismul, pentru ca in orice moment, plecand de la valorile initiale, putem re-genera intreaga lista de numere, de oricate ori. De asemenea, generatoarele de numere pseudo-aleatoare sunt si periodice, in sensul ca mai devreme sau mai tarziu se va putea identifica un model, un sir de simboluri care se va repeta. Totusi, pentru majoritatea scopurilor curente, numerele generate de un computer au un grad suficient de aleatorizare. Printre exceptii s-ar numara criptarea datelor sau jocurile de noroc. Pentru aceste aplicatii, foarte sensibile la “calitatea” numerelor aleatorii, se folosesc True Random Number Generators. Acestea sunt fara exceptie sisteme care extrag valori aleatoare din fenomene fizice. Iata cateva exemple:
- un sistem care se bazeaza pe o sursa radioactiva si pe fenomenul fizic de dezintegrare sau injumatatire radioactiva (radioactive decay), un fenomen ce apare spontan si nu poate fi prevazut.
- un sistem care poate prelua fotografii ale unei “lavalamp” si extrage informatia aleatorie de acolo (http://en.wikipedia.org/wiki/Lavarand)
- un sistem care intepreteaza trecerea sau reflexia unor fotoni printr-o oglinda semitransparenta drept 1 sau 0.
- un sistem ce amplifica si foloseste ca sursa de numere aleatoare zgomotul termic dintr-un rezistor (zgomot termic: zgomotul electronic generat de agitatia termica in purtatorii de sarcina, de obicei electroni, printr-un conductor electric, chiar si fara aplicarea unui voltaj)
Exemplele pot continua si sunt foarte interesante. Impreuna cu avantajele acestor generatoare “adevarate” (non-determinism, non-periodicitate) vin si cateva dezavantaje: eficienta mica (viteza de generare depinde de incidenta anumitor evenimente fizice) sau costul crescut pentru dispozitivele de generare. Totusi, in ciuda acestor probleme sunt folosite cu succes in domeniile de care aminteam mai sus (criptarea datelor, jocuri de noroc) in care este nevoie de maxima siguranta a acestor numere.
In incheiere, trebuie sa amintim cate ceva si despre Human Random Number Generators. Asta pentru ca cel mai la indemana generator de numere aleatoare este chiar creierul nostru (se pare ca si in timpul razboiului, pentru operarea masinii de criptare Enigma era nevoie de 3 litere pe care le alegeau “aleator” operatorii). Problema cu oamenii este ca nu pot genera numere aleatoare de calitate (de exemplu operatorii masinilor Enigma de multe ori foloseau litere ce aveau legatura cu numele lor, sau rude, cunostinte, etc). De fapt multe din trucuri de iluzionism se bazeaza pe faptul ca suntem foarte previzibili. Exista si multe experimente in acest sens, cum ar fi un experiment in care s-a descoperit un fel de “sindrom”, Small Number Bias, o inclinatie a omului de a alege in general numere mici dintr-un domeniu dat de numere. Mai mult, se pare ca exista teste prin care, in functie de numerele alese de un subiect, se pot detecta anumite boli de nivel cognitiv, etc.
Cercetarea in acest domeniu continua, eficienta generatoarelor de numere aleatoare crescand constant. Asta ne permite sa folosim probabil pentru mult timp si pentru multe domenii numere pseudoaleatoare, pentru ca pana la urma nu este relevant mereu faptul ca un numar nu este un true random number, cat reusita de a face descoperirea modelului cat mai improbabila sau ineficienta cu putinta.