I sistemi operativi più moderni dispongono di cryptographically-secure pseudo-random number generator.
Ad esempio, Windows ha CryptGenRandom. È possibile accedere allo stesso flusso da .NET utilizzando la classe RNGCryptoServiceProvider. Da C++, è possibile accedere allo stesso flusso utilizzando la funzione di libreria Microsoft C++ rand_s. Da Python, è accessibile usando la funzione urandom (vedi il fondo della pagina collegata) nel modulo os.
A differenza dei normali PRNG, i CSPRNG sono progettati per superare rigorosi test di casualità statistica. Sono anche progettati per resistere bene a un attacco serio, anche quando il loro stato iniziale o di esecuzione diventa disponibile per un attaccante.
Il termine "pseudo-casuale", usato dai crittografi, può essere fuorviante per un lettore non tecnico. Un CSPRNG espande una raccolta di valori casuali, nota come seme, in una sequenza di numeri più lunga. Quella sequenza è riproducibile dato il seme, ma per ogni buon CSPRNG, un piccolo cambiamento nel seme produce una sequenza molto diversa. Pertanto, fintanto che almeno una parte del seme viene scelta tramite un processo adeguatamente casuale, un attaccante non è in grado di predire la sequenza risultante - anche se l'attaccante può influenzare il resto del seme.
Numerosi sistemi importanti, dalle comunicazioni militari alla crittografia che protegge virtualmente tutte le transazioni online, si basano sulla sicurezza funzionalmente equivalente tra "crittograficamente sicuro pseudo-casuale" e "casuale".
EDIT: Se siete abbastanza fortunati da lavorare con la gamma di processori Intel Ivy Bridge, ora avete another very interesting alternative.
Quale lingua/sistema operativo/ambiente di runtime si sta utilizzando? –
guarda qui per un paio di buone soluzioni: http://stackoverflow.com/questions/3436376/what-is-the-most-secure-seed-for-random-number-generation –
@Erik, non importa troppo tanto. Preferibilmente Windows, comunque. –