La mayoría de los sistemas operativos modernos tienen un cryptographically-secure pseudo-random number generator.
Por ejemplo, Windows tiene CryptGenRandom. Puede acceder al mismo flujo desde .NET utilizando la clase RNGCryptoServiceProvider. Desde C++, puede acceder al mismo flujo utilizando la función de biblioteca Microsoft C++ rand_s. Desde Python, se puede acceder usando la función urandom (ver la parte inferior de la página enlazada) en el módulo os.
A diferencia de los PRNG normales, los CSPRNG están diseñados para pasar rigurosas pruebas de aleatoriedad estadística. También están diseñados para resistir bien bajo un ataque serio, incluso cuando su estado inicial o de ejecución está disponible para un atacante.
El término "pseudoaleatorio", tal como lo usan los criptógrafos, puede ser engañoso para un lector no técnico. Un CSPRNG expande una colección de valores aleatorios, conocida como semilla, en una secuencia más larga de números. Esa secuencia es reproducible dada la semilla, pero para cualquier buen CSPRNG, un cambio menor en la semilla produce una secuencia muy diferente. Por lo tanto, siempre que al menos una parte de la semilla se elija mediante un proceso adecuadamente aleatorio, un atacante no puede predecir la secuencia resultante, incluso si el atacante puede influir en el resto de la semilla.
Numerosos sistemas importantes, que van desde las comunicaciones militares hasta el cifrado que protege prácticamente todas las transacciones en línea, se basan en la seguridad funcionalmente equivalente entre "pseudoaleatorio criptográficamente seguro" y "aleatorio".
EDIT: Si tiene la suerte de estar trabajando con la gama de procesadores Ivy Bridge de Intel, ahora tiene another very interesting alternative.
¿Qué idioma/sistema operativo/entorno de tiempo de ejecución está utilizando? –
busque aquí un par de buenas soluciones: http://stackoverflow.com/questions/3436376/what-is-the-most-secure-seed-for-random-number-generation –
@Erik, no importa demasiado mucho. Preferiblemente Windows, sin embargo. –