La casualità non è del mondo informatico. Per quanto possa apparire strano, riprodurre comportamenti casuali come il lancio dei dadi o il testa o croce con un software è un'impresa tutt'altro che semplice. I computer, almeno per come sono oggi concepiti, sono progettati e costruiti per eseguire ciecamente le operazioni che gli vengono date in pasto per mezzo di algoritmi e programmi realizzati dagli sviluppatori. Un computer che non dovesse seguire le istruzioni e dovesse "prendere l'iniziativa" potrebbe essere considerato, a ragione, rotto o malfunzionante.
E dire che i numeri casuali possono essere molto utili anche e soprattutto nell'ambito dell'informatica moderna. Grazie a questi valori, ad esempio, è possibile costruire una chiave crittografica inattaccabile, oppure selezionare delle voci a caso all'interno di grandi dataset (i Big data, ad esempio) per portare avanti analisi statistiche e scientifiche. Per questo motivo, nel corso degli anni e dei decenni, un numero crescente di sviluppatori e scienziati informatici si è concentrato sullo sviluppo di algoritmi che potessero quanto meno simulare la selezione di numeri casuali. Un'impresa tutt'altro che semplice e che oggi segue due distinte "filosofie di pensiero": PRNG (acronimo di Pseudo-Random Number Generator, generatore di numeri pseudo casuali in italiano) e TRNG (acronimo di True Random Number Generator, generatore di numeri realmente casuali in italiano).
Cosa sono i numeri casuali
Prima di procedere e scoprire come generare numeri casuali con PC, vale la pena soffermarsi per alcuni secondi su una definizione di cosa sono i numeri casuali. Nel caso si parli di singole cifre, un numero è casuale quando è scelto all'interno di un insieme dato (tutti i numeri naturali, ad esempio, o solo quelli da 1 a 100) senza seguire una regola precisa. Se, invece, si parla di sequenze di numeri casuali, le cifre scelte non devono avere nessuna correlazione statistica che le leghi l'una all'altra.
Come funzionano i modelli PRNG
Come il suffisso "Pseudo" suggerisce, i software che utilizzano questa tecnica generano una sequenza di numeri che sembrano casuali ma non lo sono affatto. Un buon esempio di generatori PRNG è dato dai generatori lineari congruenziali, che permettono di generare stringhe di numeri sufficientemente vicine alla casualità. Insomma, non sarà come tirare i dadi ma ci si avvicina parecchio. Un risultato che si ottiene grazie ad algoritmi che seguono una formula matematica ben precisa oppure seguendo la serie di numeri presenti in una tabella calcolata e compilata in precedenza.
I modelli PRNG sono efficienti e deterministici. Questo vuol dire che generano grandi sequenze di numeri casuali in un lasso di tempo tutto sommato ristretto e, dato lo stesso valore di partenza, permettono di riprodurre esattamente la stessa stringa di numeri pseudo-casuali. Caratteristiche che rendono questi modelli adatti a operazioni che richiedono velocità e riproducibilità come, ad esempio, la simulazione di modelli statistici. Se, invece, si ha bisogno di generare numeri realmente casuali – come richiesto nel caso del gioco d'azzardo online o per la crittografia – è meglio guardare verso altri modelli.
Va notato, infatti, che per quanto siano perfetti e perfezionati, i modelli PRNG possono portare a delle incongruenze tutt'altro che secondarie. Così, se si genera un modello PRNG con PHP e lo si utilizza su sistemi Linux si avranno ben pochi problemi; mentre se si utilizza un sistema Windows si potrebbero registrare non pochi problemi.
Come funzionano i modelli TRNG
I True Random Number Generator, invece, legano il proprio funzionamento a fenomeni fisici per generare – così come dice il nome – dei veri numeri casuali. Insomma, sarà come portare il tiro dei dadi all'interno del computer. Gli eventi che possono causare la generazione possono essere i più vari: dal movimento del mouse alla digitazione dei tasti, a fenomeni più strettamente fisici. Molti software e portali di generazione di numeri casuali, ad esempio, sfruttano il decadimento di elementi radioattivi, mentre altri il rumore atmosferico registrato con dei normali microfoni. Le fonti, insomma, possono essere le più varie: l'importante è evitare rumori o eventi che si ripetono nel tempo, così da generare sequenze di numeri realmente casuali.
Vista la sua natura, il modello TRNG ha caratteristiche diametralmente opposte rispetto a quelle viste nel modello PRNG. Il True Random Number Generator, infatti, non è efficiente né deterministico: la generazione di numeri casuali è legata a fattori fisici e non è così veloce e immediata come visto in precedenza; allo stesso modo la sequenza di numeri non può essere riprodotta essendo legata ad avvenimenti totalmente slegati l'uno dall'altro. Il modello TRNG, dunque, è ideale per applicazioni come la crittografia o il gioco d'azzardo online, per le quali è fondamentale l'assoluta casualità delle cifre.