Che cos’è un generatore di numeri casuali?

  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)Generatore di numeri casuali veri è 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 Generatore di numeri casuali hardware 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

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 Mersenne Twister 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.