Generare numeri a caso è difficile

I computer sono macchine eccezionali ma spesso faticano a svolgere operazioni che riteniamo “ordinarie”. Un caso emblematico è la generazione di elementi casuali. Che siano numeri o stringhe, non esiste un modo veloce per generare entropia tramite un algoritmo che per sua natura è deterministico. Nella maggior parte dei casi non è un problema: ci sono varie modalità per simulare la casualità e spesso questo basta.

Quand è veramente necessario usare numeri casuali spesso si ricorre a generatori di entropia esterni come vedremo in seguito in questo articolo.

Se stai cercando un modo veloce per generare numeri casuali o stringhe casuali prova questi nostri strumenti:

Non è come sembra

Per quanto possa sembrare facile, generare numeri casuali è uno dei problemi irrisolti dell’informatica. Quelli che di solito vediamo in strumenti come quelli linkati sopra sono detti pseudo-casuali (Pseudo-Random Numbers, PRN) perché, per quanto possano sembrare random ad un umano, il processo che li ha generati non lo è. Programmare alla fine dei conti vuol dire dare istruzioni precise a una macchina per svolgere un determinato compito e l’istruzione “genera un numero casuale” non è codificabile con le classiche istruzioni che vengono usate nella programmazione.

Per la maggior parte delle applicazioni i numeri pseudo-casuali bastano, in ambiti molto specifici invece, come la crittografia, si cerca di generare Numeri casuali veri (True Random Numbers, TRN).

Numeri pseudo-casuali (PRN)

Generare numeri a caso usando strategie Pseudo-Random è molto semplice. Quasi tutti i linguaggi di programmazione hanno funzioni e classi adibite a farlo di default. Indipendentemente dal linguaggio il procedimento rimane lo stesso ed è il seguente:

  • Si parte dal seed, un valore iniziale scelto arbitrariamente (o quasi, spesso si utilizza una fonte di entropia come l’orologio del sistema).
  • Attraverso un algoritmo (quindi per definizione deterministico), come ad esempio il Generatore lineare congruenziale, il seed viene trasformato in una sequenza di numeri
  • Questo procedimento viene ripetuto ad ogni ciclo

Numeri casuali veri (TRN)

Come prima detto generare dei TRN tramite un algoritmo non è possibile, bisogna quindi appoggiarsi ad eventi casuali dal mondo esterno come da esempio i fenomeni fisici naturali come il rumore elettrico.

Un esempio affascinante è cloudflare che utilizza un muro di lava lamp a questo scopo. Trovi qui un loro articolo che ne spiega il funzionamento.

lava lamp utilizzate da cloudflare per generare per generare numeri a caso

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *