Numeri casuali veri o pseudocasuali: differenze, seme e sorteggi verificabili
Quando un sito ti genera un numero a caso, quanto è davvero casuale? La risposta dipende dal tipo di generatore: pseudo-casuale, crittografico o basato su fenomeni fisici. In questa guida vedi le differenze, quale basta per ogni uso, perché un seme riproducibile rende un sorteggio verificabile e perché nessun metodo può aumentare le vincite al Lotto. Puoi provare tutto con il generatore di numeri casuali.
Tre tipi di casualità
| Tipo | Come funziona | Esempio | Prevedibile? |
|---|---|---|---|
| Pseudo-casuale (PRNG) | Formula matematica che, da un valore iniziale (seme), produce una sequenza dall'aspetto casuale | Math.random() in JavaScript | Sì, se si conosce il seme o lo stato interno |
| Crittografico (CSPRNG) | Generatore progettato per resistere alla previsione, alimentato con entropia del sistema operativo | crypto.getRandomValues() del browser | No, in pratica |
| Casualità fisica | Misura di un fenomeno imprevedibile, come il rumore atmosferico o il decadimento radioattivo | Servizi come random.org (rumore atmosferico) | No, per natura |
Generatori pseudo-casuali
Un PRNG è un algoritmo deterministico: dato lo stesso punto di partenza restituisce sempre la stessa sequenza. È velocissimo e va benissimo per giochi, simulazioni, scelte informali e dati di prova, perché i numeri hanno una buona distribuzione statistica. Il suo limite è la prevedibilità: chi osserva abbastanza risultati di certi generatori può risalire allo stato interno e anticipare i successivi. In JavaScript Math.random() è di questo tipo e la specifica del linguaggio non lo destina agli usi di sicurezza.
Generatori crittografici
Un CSPRNG è costruito per essere imprevedibile anche per chi conosce l'algoritmo e vede molti risultati. I browser lo mettono a disposizione con la Web Crypto API (crypto.getRandomValues), alimentata dal sistema operativo con l'entropia raccolta dall'hardware e dal sistema. È la scelta giusta per password, token, chiavi e per qualunque estrazione in cui qualcuno potrebbe avere interesse a barare. Lo strumento genera password si basa su questo principio; per capire quanto vale una password scelta a caso leggi la guida su entropia di password e passphrase.
Casualità fisica
La casualità "vera" viene da fenomeni fisici che non si possono prevedere con una formula, come il rumore atmosferico misurato da servizi come random.org. È affascinante ma raramente necessaria: un buon generatore crittografico è già imprevedibile per qualunque scopo pratico, e le sorgenti fisiche sono più lente e richiedono di fidarsi di un servizio esterno.
Quale scegliere
- Giochi, dadi, giochi da tavolo, scelte quotidiane: basta un PRNG; ad esempio il lancio del dado o la ruota della fortuna.
- Password, codici, token: serve un generatore crittografico.
- Sorteggi e concorsi: serve una sorgente equa e, soprattutto, verificabile da chi partecipa (vedi sotto).
- Applicazioni scientifiche o legali con requisiti formali: valuta una sorgente certificata o fisica, secondo le regole del tuo contesto.
Il seme: perché lo stesso seme dà lo stesso risultato
Il seme (seed) è il valore iniziale del PRNG. Se due persone usano lo stesso algoritmo con lo stesso seme, ottengono la stessa identica sequenza. Sembra un difetto, ma è proprio ciò che permette il sorteggio verificabile: se pubblichi il seme, la lista dei partecipanti e le regole, chiunque può ripetere l'estrazione e controllare che l'esito sia quello dichiarato.
Perché abbia valore, il seme va fissato e comunicato prima di conoscere il risultato. Se l'organizzatore potesse provare più semi e scegliere quello che gli piace, la verifica perderebbe senso. Una buona prassi è pubblicare in anticipo il seme (o un suo hash) e chiudere l'elenco dei partecipanti, poi pubblicare tutto il resto. Nel generatore, la sorgente Riproducibile (seme) mostra il seme, l'ora e un link che rifà la stessa estrazione, e la scheda Sorteggio da lista applica lo stesso metodo ai nomi di una lista.
Il modulo bias e il rejection sampling
Un errore classico: ottenere un numero da 0 a 255 e farne il resto della divisione per 10 per ottenere una cifra da 0 a 9. Poiché 256 non è multiplo di 10, i valori da 0 a 5 compaiono 26 volte e quelli da 6 a 9 solo 25: le prime sei cifre diventano leggermente più probabili. Questo si chiama modulo bias. Con intervalli piccoli rispetto al numero di valori disponibili la distorsione è minima, ma esiste e in un sorteggio vero non è accettabile.
La soluzione è il rejection sampling: si scartano i valori che cadono nella parte "in eccesso" (qui 250-255) e si estrae di nuovo, così ogni cifra ha esattamente lo stesso numero di possibilità. Un buon generatore lo applica senza che tu debba pensarci.
Lotto e SuperEnalotto: nessun metodo aumenta le vincite
Ogni combinazione di numeri ha esattamente la stessa probabilità di uscire: 1-2-3-4-5-6 è altrettanto probabile di una sequenza che "sembra casuale". Le estrazioni sono indipendenti, quindi un numero uscito molto o poco di recente non ha più o meno possibilità di uscire la volta dopo (l'errore opposto si chiama fallacia del giocatore). Per il SuperEnalotto, il 6 si ottiene indovinando sei numeri su novanta, con una probabilità di 1 su 622.614.630. Un generatore come quello per il Lotto serve per scegliere i numeri senza pensarci, non per vincere di più. Gioca solo se ti diverte, con importi che puoi permetterti.