Ce este un RNG
„Random Number Generator” sau RNG înseamnă Generator de Numere Aleatorii, și de obicei, se bazează pe fenomene ale naturii care sunt aleatorii, cum ar fi zgomotele atmosferice (folosit de random.org), dezintegrarea alfa sau chiar lămpile de lavă (folosit de CloudFlare).
Viteza cu care se pot “extrage” numere aleatorii din aceste surse este destul de mică, și din acest motiv, sunt folosite de obicei ca și valoare de sămânță (seed value) pentru PRNG.
Ce este un PRNG ?
PRNG este “Pseudo Random Number Generator”, adică Generator de Numere Pseudo-aleatorii.
Generatoarele de Numere Pseudo-aleatorii sunt algoritmi implementați, în majoritatea cazurilor, în software care produc numere pseudo-aleatorii, și de adesea ori sunt de nedistins de cele cu adevărat aleatorii.
Un PRNG primește ca și parametru o valoare de sămânță – așa-numitul seed – pe baza căreia își actualizează starea internă și generează un șir de numere aleatorii. De fiecare dată când se “cere” un număr sau un șir de numere de la generator, acesta își actualizează starea internă din nou și produce un număr aleatoriu nou.
PRNG are mai multe avantaje față de RNG.
În primul rând, sunt mult mai eficiente, generând un număr foarte mare de numere aleatorii, într-un timp scurt. În al doilea rând, sunt deterministice, adică dacă primesc aceeași valoare de sămânță ca și parametru, atunci vor genera exact același șir de numere aleatorii.
Cum este folosit PRNG în jocurile de Casino de tip Slots Online?
Jocurile de tip Slots Machine (păcănelele) sunt bazate pe jocurile mecanice (aparate), care aveau, la rândul lor, roți cu simboluri care se învârteau mecanic, și erau oprite tot mecanic.
Jocurile moderne de Slots mimează acest comportament în software. Au mai multe roți virtuale (3,4,5) cu mai multe simboluri per roată, unele poate să aibă chiar și sute, dar majoritatea au undeva între 20 și 50 de simboluri.
Numărul și ordinea simbolurilor de pe o roată poate să difere în funcție de numărul de linii jucate și de miza per linie. Fiecare joc de tip Slot este auditat de companii de profil și este autorizat. În procesul de auditare se întocmește PAR Sheet-ul jocului, în care sunt specificate numărul roților și al simbolurilor, precum și ordinea acestora de pe roți.
Putem să luăm ca exemplu un joc cu 5 roți și 3 linii cu 32 de simboluri pe fiecare roată. În momentul în care un jucător apasă pe “Spin / Rotire”, jocul solicită 5 numere aleatorii între 1 și 32 de la PRNG. Acesta la rândul lui va genera cele 5 numere, de exemplu: [17, 29, 11, 18, 8].
Aceste numere reprezintă un index, adică segmentul la care se oprește roata pe linia din mijloc. Câștigurile sunt determinate în funcție de simbolurile care se regăsesc pe liniile de câștig.
Este important de menționat faptul că PRNG-ul nu determină câștigul în mod direct, ci configurația roților și al simbolurilor. Dacă am avea 5 roți cu 32 de simboluri și toate ar fi de exemplu Pepene 🍉 sau Cireașă 🍒 nu ar conta ce numere aleatorii ar produce PRNG-ul, am câștiga mereu.
Creatorii jocurilor de Slots se bazează pe faptul că PRNG-ul va produce numere aleatorii, și construiesc roțile și simbolurile pe acest principiu, oferind șansele de câștig dorite.
De exemplu, dacă există doar un singur simbol de Clopot (🔔) per roată, și acesta declanșează câștigul de jackpot, se poate calcula probabilitatea.
32 (simboluri) la puterea 5 (roți) = 32^5 = 33,554,432 posibile combinații unice. Și presupunând că jocul are 10 linii de câștig, asta înseamnă că probabilitatea de a câștiga jackpotul este de 32^5 / 10 = 3,355,443.2, adică 3.3 milioane la 1.
Ce inseamna Aleatoriu?
Oamenii, în general, nu percep și nici nu generează corect evenimente aleatorii. În exemplul de mai jos găsiți 2 imagini. Care vi se pare aleatorie?
Click pe imagine pentru a genera una nou
Click pe imagine pentru a genera una nou
Ambele imagini au aceleași dimensiuni, 250px x 250px, și conțin steluțe “*” plasate cumva aleatoriu.
Prima imagine conține steluțe plasate într-adevăr aleatoriu, în sensul că, poziția coordonatelor steluței este determinată de un PRNG între 0 și 250.
În schimb, la a doua imagine, imaginea este împărțită în celule de dimensiunea 25px x 25px, și în fiecare celulă este plasată o steluță a cărei coordonate este determinată de un PRNG între 0 și 25.
Pentru ca o secvență de numere să fie considerată aleatorie, trebuie să aibă următoarele proprietăți:
- Uniformitate: Valorile din secvență ar trebui să fie distribuite în mod uniform. Asta înseamnă că fiecare valoare posibilă are aceeași probabilitate de a apărea.
- Independență: Fiecare valoare din secvență este independentă de celelalte. O valoare nu influențează apariția altor valori.
- Nerepetabilitate: Într-o secvență aleatoare ideală, nu ar trebui să putem prezice ce valoare va apărea următoarea pe baza valorilor precedente.
- Lipsa de tendință sau model: Nu ar trebui să existe niciun model sau tendință în secvență.
- Dispersie: Valorile ar trebui să fie distribuite pe tot parcursul intervalului posibil.
Se poate “bate” sau “sparge” un PRNG ?
Există diferite tipuri de generatoare de numere aleatorii care se pot folosi în funcție de cerințe.
De exemplu, dacă vrem să ascultăm lista noastră de muzică preferată în mod aleatoriu “Shuffle Play”, putem să folosim un algoritm simplu, deoarece nu este absolut critic ca ordinea pieselor de muzică să fie într-adevăr aleatorie.
De asemenea, dacă vrem să alegem întrebări aleatorii pentru a ne pregăti pentru examenul teoretic pentru obținerea permisul de conducere, putem folosi un PRNG simplu oferit de sistemul de operare.
Revenind la oameni și percepția despre numerele aleatorii, Spotify inițial a folosit un simplu PRNG (Fisher–Yates shuffle) pentru a alege următoarea piesă din listă, și acest algoritm era într-adevăr aleatoriu.
Însă ascultătorii s-au plâns că secvența pieselor nu părea aleatorie – fie se repeta artistul prea des, fie o anumită piesă. Din cauza asta, Spotify a trebuit să modifice algoritmul care alegea piesa într-un mod cu adevărat aleatoriu, și a implementat unul pe care ascultătorii l-au perceput ca fiind “mai aleatoriu”, fără ca acesta să fi fost într-adevăr așa.
Un alt caz unde este folosit un PRNG, de exemplu, este și Criptografia. De fiecare dată când se accesează un site web prin HTTPS, se generează numere aleatorii foarte mari.
Datorită faptului că pe criptografie se bazează foarte multe servicii în lumea modernă – telefonie, e-banking, plata cu cardul online, mesagerie WhatsApp, etc. – s-a născut necesitatea de a crea PRNG-uri care se pot folosi cu siguranță și în criptografie, și care nu subminează securitatea acestor sisteme.
CSPRNG (Cryptographically Secure Pseudorandom Number Generator) este o clasă de generator de numere aleatorii, care respectă cele mai înalte standarde, fiind testate și validate de către comunitatea de criptografi și matematicieni.
Majoritatea furnizorilor de jocuri folosesc un PRNG care este calsificat și ca CSPRNG, deoarece în anumite jurisdicții, este o cerință pentru obținerea licenței de operare.
De-a lungul timpului, au fost găsite probleme fundamentale sau de implementare a anumitor CSPRNG,deschizând astfel calea atacurilor asupra anumitor CSPRNG. Aceste atacuri au permis prezicerea cu o acuratețe destul de mare numerele care urmau a fi generate.
În principiu, dacă se cunoaște algoritmul de CSPRNG și valoarea seed-ului, se poate genera aceeași secvență de numere aleatorii, și practic se pot prezice numerele care vor urma în șir.
Să presupunem că furnizorul de joc a făcut public algoritmul folosit de ei. Este imposibil ca cineva să deducă valoarea seed-ului, chiar dacă observă un șir enorm de numere generate de acesta. Imposibilitatea asta chiar este o cerință a PRNG-ului să se poată numi CSPRNG.
Presupunând că cineva a aflat și valoarea seed-ului dintr-o altă sursă, acestuia îi va fi la fel de imposibil să exploateze această problemă în contextul jocurilor de noroc. De regulă, un furnizor de jocuri de noroc are un sistem separat care generează numere aleatorii pentru toate jocurile jucate simultan de către mii de jucători.
O persoană care dorește să exploateze un algoritm nu va fi în avantaj chiar dacă știe cu exactitate toate rezultatele viitoare ale unui CSPRNG. Spre exemple, chiar dacă știe că peste 10,000 de numere va urma o secvență [ 1, 1, 1, 1, 1 ] care la un anumit joc va avea un payout de 2000x, nu se poate asigura în nici un fel că respectivele numere vor “pica” la el.