Kako radi RNG: tehnički pregled generatora nasumičnih brojeva

Zašto morate znati kako funkcioniše RNG u vašim sistemima
Kada koristite softver koji obavlja enkripciju, simulacije ili igre na sreću, vi često zavisite od nasumičnih brojeva. Međutim, “nasumičnost” nije uvek očigledna — njena kvaliteta utiče na sigurnost, tačnost simulacija i poštenje igara. U ovom prvom delu dobićete osnovni tehnički pregled: šta podrazumevamo pod nasumičnošću, koje tipove generatora postoji i zašto izvor entropije određuje pouzdanost rezultata.
Šta znači entropija i zašto je bitna
Entropija predstavlja količinu nepredvidivosti u sistemu. Što veća entropija, to su brojevi manje predvidljivi. Vi treba da razumete entropiju iz dva razloga:
- U kriptografskim sistemima niska entropija vodi do ponovljivih ključeva i lakšeg napadača.
- U statističkim simulacijama loša nasumičnost uvodi pristrasnost u rezultate i može dovesti do pogrešnih zaključaka.
U praksi se entropija dobija iz fizičkih ili sistemskih izvora — na primer, zakašnjenja ulaza/izlaza, pokreti miša, hardverski šum — i ona se koristi da se “seed”-uje generator koji proizvodi korisne nasumične vrednosti.
Vrste RNG-a: hardverski vs. softverski pristup
Postoje dva osnovna pristupa za generisanje nasumičnih brojeva: hardverski (TRNG) i softverski (PRNG). Svaki pristup ima prednosti i ograničenja koja direktno utiču na to kako ih možete bezbedno i efektivno koristiti.
True RNG (TRNG) — izvor stvarne nepredvidivosti
- TRNG koristi fizičke procese (npr. termalni šum, kvantni fenomeni) koji su inherentno nasumični.
- Prednost: visoka entropija i teoretska nemogućnost predviđanja bez pristupa fizičkom izvoru.
- Ograničenja: potreban je hardver, brzina može varirati, a podaci često treba proći procesovanje (npr. debiasing) pre upotrebe.
Pseudo RNG (PRNG) — deterministički ali praktičan
- PRNG pokreće deterministički algoritam koji iz početnog stanja (seed) proizvodi dugi niz brojeva koji izgledaju nasumično.
- Prednost: brzina i ponovljivost — korisno za testiranje i simulacije gde želite iste rezultate ponovo.
- Ograničenja: ako je seed predvidiv ili slab, niz postaje predvidiv; obični PRNG nisu prikladni za kriptografiju.
Razumevanje razlike između TRNG i PRNG je ključno da biste odlučili koji tip generatora koristiti u vašoj aplikaciji. U sledećem delu ćemo se detaljnije pozabaviti internom arhitekturom popularnih PRNG algoritama, principima seedovanja i merama provere kvaliteta nasumičnosti.
Unutrašnja arhitektura popularnih PRNG algoritama
U svetu softverskih generatora postoji veliki broj dizajna, svaki sa različitim kompromisima brzine, statističke kvalitete i otpornosti na rekonstrukciju stanja. Evo pregleda najčešće korišćenih klasa i njihovih karakteristika.
– Linearni kongruentni generatori (LCG): najjednostavnija klasa, definisana formulom X_{n+1} = (aX_n + c) mod m. Prednosti su brzina i niska memorijska zahtevnost. Međutim, periode su ograničene (najviše m), niži bitovi su često manje “nasumični”, a poznata tri ili četiri izlaza mogu brzo dovesti do rekonstruisanja stanja — zato LCG nije prikladan za sigurnosne primene.
– Mersenne Twister (MT19937): dizajniran za statističku kvalitetu i ogroman period (2^19937 − 1). Dobar je za simulacije i numeričke aplikacije zbog svojih vrlo povoljnih statističkih svojstava, ali njegova velika unutrašnja država omogućava rekonstrukciju ako napadač pribavi dovoljno uzoraka — zato nije CSPRNG.
– Xorshift, xoroshiro, xoshiro i srodni: serija izuzetno brzih generatora zasnovanih na bitovnim XOR i pomeranjima. Vrlo efikasni za aplikacije gde je potrebna brzina, ali su linearni u osnovi i mogu imati slabosti u nižim bitovima i u otpornosti na napad rekonstrukcije.
– PCG (Permuted Congruential Generator): kombinuje jednostavnost kongruentnog generatora sa permutacijom izlaza radi poboljšanja statistike. Daje dobar odnos brzine i kvaliteta, ali opet nije namenjen kriptografiji.
– Kriptografski DRBG-ovi (CSPRNG): konstrukcije kao što su HMAC-DRBG, CTR-DRBG (AES-CTR) i ChaCha20-DRBG koriste kriptografske primitive i pružaju formalne sigurnosne garancije (npr. jedan put iz stanja teško je rekonstruisati prethodne ili buduće vrednosti). Takvi dizajni uključuju mehanizme rekeyovanja, internog osvežavanja i ograničenja broja izlaza između reseedovanja.
Svaki od ovih dizajna ima jasno mesto: statistički robusni, ali deterministički PRNG-i služe za simulacije i testiranje; CSPRNG-i su potrebni tamo gde je nepredvidivost bezbednosni zahtev.

Seedovanje, entropijski bazeni i provere kvaliteta
Seed (početno stanje) je kritična tačka: čak i najbolji algoritam proizvodi predvidive nizove ako je seed slab ili ponovljiv. Kako se to rešava u praksi?
– Izvori entropije: operativni sistemi prikupljaju entropiju iz niza šuma — ulaz/izlaz kašnjenja, interakcije korisnika, hardverski šum (TRNG), TPM/SED senzori. Ovi ulazi se akumuliraju u entropijske bazene koji služe za inicijalno seedovanje i periodično osvežavanje CSPRNG-a.
– Ekstrakcija i “whitening”: fizički izvori često daju pristrasne bitove. Metode poput von Neumannovog debiasinga uklanjaju jednostavne pristrasnosti, dok kriptografski hash-ekstraktori (npr. SHA-256) služe da iz grubog šuma izgrade uniformniji i teško predvidiv seed.
– Reseed i backtracking resistance: dobar CSPRNG periodično se osvežava novom entropijom i koristi kriptografske funkcije da onemogući vraćanje ili predviđanje iz prošlih izlaza. Implementacije kao Fortuna ili HMAC-DRBG uključuju definisane politike reseedovanja.
– Provere kvaliteta: statistički testovi (NIST SP800-22, Dieharder, TestU01) pomažu detektovati očigledne nepravilnosti — ali prolazak testova ne garantuje nepredvidivost. Za sigurnosne primene sledeće stvari su obavezne: FIPS/NIST odobreni DRBG algoritmi, kontinuirane health-testovi (npr. ponovljeni izlazi) i audit izvora entropije.
Praktične preporuke: za kriptografiju uvek koristiti proverene CSPRNG implementacije (OS getrandom, libsodium, OpenSSL), ne praviti sopstveni DRBG, osigurati pristup TRNG izvoru kad je moguće i imati politiku pravilnog reseedovanja i nadzora entropije. Statistički testovi su korisni za detekciju regresija i hardverskih kvarova, ali ne zamenjuju sigurnosnu arhitekturu zasnovanu na kriptografskim principima.

Primena i izbor RNG-a
Izbor generatora zavisi od zahteva: brzina, statistička svojstva i bezbednost diktiraju šta je prihvatljivo u datom kontekstu.
- Simulacije i numeričke metode: MT19937 ili PCG zbog dobrog statističkog ponašanja i dugog perioda.
- Performanse i laki zadaci: xorshift/xoroshiro/xoshiro za visoku brzinu kada nije potrebna kriptografska sigurnost.
- Kriptografija i bezbednosne primene: koristiti OS-provided CSPRNG (getrandom/Windows CNG), libsodium ili OpenSSL DRBG; nikada sopstvene nesigurne implementacije.
- Hardverski izvori (TRNG): korisni za seedovanje i povećanje entropije, ali često zahtevaju debiasing i health-testove.
Završne preporuke
RNG nije samo algoritam — to je proces koji obuhvata izvor entropije, ekstrakciju, internu politiku osvežavanja i kontinuirani nadzor. Uvek birajte proverene biblioteke za bezbednosne potrebe, osigurajte kvalitet seed-a i implementirajte health-testove kako biste detektovali degradaciju. Za smernice i formalne preporuke o DRBG konstrukcijama pogledajte NIST SP 800-90A.
Frequently Asked Questions
Koja je razlika između PRNG i CSPRNG i kada treba koristiti koji?
PRNG (deterministički) daje ponovljive nizove i pogodniji je za simulacije i testiranje gde je reproduktivnost važna. CSPRNG pruža otpornost na predviđanje i rekonstrukciju stanja — obavezan je za kriptografske i bezbednosne upotrebe. Ako postoje zahtevi za tajnošću ili napadima, koristiti CSPRNG.
Koliko je važno kvalitetno seedovanje i kako osigurati dobar seed?
Seed je ključ: slab ili ponovljiv seed čini i najbolji algoritam predvidivim. Koristite operativnosistemske izvore entropije, hardverske TRNG-ove gde je moguće, i primenite kriptografske ekstraktore (hash funkcije) za whitening. Takođe implementirajte politiku reseedovanja i monitoring izvora entropije.
Da li prolazak statističkih testova znači da je RNG bezbedan za kriptografiju?
Ne nužno. Statistički testovi (NIST SP800-22, TestU01 itd.) otkrivaju očigledne nedostatke, ali ne garantuju nepredvidivost protiv napadača. Za kriptografiju su potrebne formalne sigurnosne garancije i CSPRNG dizajn, a ne samo prolazak statističkih baterija.


