Il generatore di numeri casuali
(RNG) è un sistema progettato per generare una sequenza di numeri o simboli
il cui significato non può essere previsto in anticipo. Una specifica sequenza di risultati generati potrebbe contenere un certo
schema che diventa visibile solo dopo il processo di generazione, ma che non poteva essere previsto prima.
Generatore di numeri casuali hardware
Per generare numeri veramente casuali, viene utilizzato un generatore di numeri casuali hardware
(HRNG),
noto anche come generatore di numeri casuali veri
(TRNG) —

è un dispositivo che genera numeri casuali da un processo fisico in continua evoluzione in modo tale da essere
praticamente impossibile da modellare. Tali generatori possono basarsi sull’uso di processi casuali macroscopici,
ovvero su una scala che consente misurazioni e osservazioni a occhio nudo, come il lancio di una moneta, i dadi o le ruote della roulette.
Sebbene un processo macroscopico possa essere completamente determinato secondo la meccanica newtoniana,
un meccanismo ben progettato come una ruota della roulette produrrà un risultato imprevedibile, spiegabile con la teoria del caos e
l’instabilità dei sistemi dinamici a causa delle differenze nelle condizioni iniziali di ogni nuovo tentativo di far girare la ruota.
Lo svantaggio principale dei generatori che utilizzano processi macroscopici è sempre stato la lentezza, e di conseguenza,
l’impossibilità di generare un grande numero di valori in un breve periodo di tempo.
Oggi, i generatori hardware di numeri casuali tendono a utilizzare dispositivi basati su fenomeni microscopici

che generano segnali di "rumore" casuali statistici a basso livello, come vari segnali di "rumore" (colpo, termico, atmosferico),
l’effetto fotoelettrico, l’uso di uno splitter di fascio e altri fenomeni quantistici. Tali processi sono buone fonti di entropia
poiché il loro risultato è assolutamente impossibile da prevedere teoricamente. Tuttavia, a causa della complessità dell’implementazione e della relativa lentezza,
il campo di utilizzo di tali generatori è limitato ad aree con specifici requisiti per i valori generati.
In generale, i generatori elettronici hardware di numeri casuali vengono utilizzati in crittografia per generare chiavi crittografiche casuali
al fine di garantire il trasferimento sicuro dei dati, ad esempio nei protocolli di crittografia di Internet come il protocollo Transport Layer Security
(TLS).
Generatore di numeri pseudocasuali

Un’alternativa ai generatori hardware (fisici) sono i generatori basati su algoritmi — generatori di numeri pseudocasuali
(PRNG),
che creano una sequenza di numeri che sembra casuale ma, in realtà, non lo è. I numeri generati dai PRNG non possono essere considerati veramente casuali
poiché sono completamente determinati da un valore iniziale, chiamato "seme" del PRNG. Sebbene la sequenza di numeri generata dai generatori hardware
sia più vicina al vero caso, i generatori di numeri pseudocasuali sono spesso utilizzati in pratica in molte aree grazie alla loro velocità
nella generazione dei numeri, alla facilità di implementazione e al relativo basso costo. Esistono molti metodi per creare sequenze pseudocasuali di numeri,
tra cui il **Mersenne Twister**, un generatore congruenziale lineare (LCG), i generatori di numeri casuali Xorshift, noti anche come generatori a registro a scorrimento,
il Well Equidistributed Long-period Linear (WELL) ottimizzato per l’implementazione software e altri metodi basati su algoritmi.
Mersenne Twister
Il Mersenne Twister è uno dei generatori di numeri pseudocasuali più popolari, sviluppato nel 1997 da Makoto Matsumoto (松本 眞) e Takuji Nishimura (西村 拓士).
Il suo nome deriva dal fatto che la sua lunghezza di periodo è scelta come un numero primo di Mersenne, cioè un numero primo della forma

per qualche numero intero n. Questo PRNG è stato progettato specificamente per risolvere la maggior parte
delle carenze riscontrate nei PRNG precedenti. I principali vantaggi del Mersenne Twister:
- Un periodo molto lungo di 219937 − 1
- Passa molti test di casualità statistica, inclusi i test Diehard e la maggior parte, ma non tutti, dei test TestU01
- Ha una licenza software permissiva e gratuita, senza brevetti per tutte le varianti, ad eccezione di CryptMT
- k-distribuito fino a 32 bit di precisione per ogni 1 ≤ k ≤ 623
- Le implementazioni generano generalmente numeri casuali più velocemente rispetto ai metodi di generazione fisica (hardware)
Il Mersenne Twister è utilizzato come PRNG predefinito in molti linguaggi di programmazione, software e risorse online, come il nostro
generatore di numeri casuali online, ma questo metodo non è considerato crittograficamente sicuro,
il che non ne consente l’uso in crittografia.
PRNG con sorgente di entropia
Oltre alla necessità di generare rapidamente sequenze facilmente riproducibili di numeri casuali, c’è anche l’esigenza di generare numeri completamente imprevedibili o semplicemente completamente casuali.
Per soddisfare entrambe le condizioni, vengono spesso utilizzate combinazioni di un PRNG resistente alla crittografia e una sorgente di entropia esterna, ed è proprio questa combinazione che oggi viene comunemente definita generatore di numeri casuali
(RNG).
Tali generatori sono utilizzati principalmente per generare chiavi simmetriche e asimmetriche uniche per la crittografia, nell’industria del gioco e in altri settori.
Un esempio del funzionamento di un generatore combinato è il seguente: un dispositivo fisico, utilizzando una sorgente di entropia affidabile (come il rumore termico), genera il "seme" per un generatore di numeri pseudocasuali crittograficamente sicuro più veloce,
che poi genera una sequenza pseudocasuale a un ritmo di dati molto più elevato.