2011-07-12 7 views
6

Entiendo que el tiempo es una semilla insegura para la generación de números aleatorios porque efectivamente es reduces the size of the seed space.¿Qué (lo demás) está mal con el uso del tiempo como semilla para la generación de números aleatorios?

Pero di que no me importa la seguridad. Por ejemplo, supongamos que estoy haciendo una simulación de Monte Carlo para un juego de cartas. HAGO sin embargo, me importa acercarte lo más posible a la aleatoriedad real. ¿El tiempo como semilla afectará la aleatoriedad de mi producción? Creo que la elección de PRNG es más importante que la semilla en este caso.

Respuesta

4

Por razones de seguridad, obviamente necesita una semilla de alta entropía. Y el tiempo solo no puede proporcionar eso.

Para fines de simulación, la calidad de la semilla no importa mucho, siempre que sea única. Como observó, la calidad del PRNG es más importante aquí.
Incluso un PRNG en un juego puede necesitar ser seguro. Por ejemplo, en los juegos multijugador, un jugador puede descubrir el estado interno del PRNG y usarlo para predecir eventos aleatorios futuros, adivinar las cartas del oponente, obtener un mejor botín, ...

Una trampa común usando el tiempo para sembrar un PRNG es que el tiempo no cambia muy a menudo. Por ejemplo, en Windows, la mayoría de las funciones relacionadas con el tiempo solo cambian su valor de retorno cada pocos milisegundos. Entonces todos los PRNG creados dentro de ese intervalo devolverán la misma secuencia.

+0

Gran punto sobre los números generados dentro de la misma unidad de granularidad de tiempo. – pepsi

2

Si solo está ejecutando una sola instancia de su programa, entonces no debería haber demasiados problemas.

Sin embargo, he visto personas que inician varios programas al mismo tiempo y luego cada programa se inicia con el tiempo. En ese caso, todo el programa obtiene la misma secuencia de números aleatorios - En particular, he visto personas sembrando un proceso apache en cada llamada para usar un número aleatorio como ID de sesión, solo para encontrar que diferentes personas presionan el servidor web al mismo tiempo obtener exactamente los mismos ID.

Por lo tanto, si está esperando ejecutar varias versiones simultáneas del programa, entonces usar el tiempo es una muy mala idea.

1

Piensa que tu programa funciona muy rápido y pide el tiempo del sistema para utilizarlo como semilla en una gran secuencia, con un intervalo muy reducido. Podría obtener el mismo tiempo que la respuesta, por lo que terminaría generando el mismo número aleatorio. Entonces, incluso en una simulación, una baja entropía puede ser un problema.

Considerando que no es tan difícil tener otras fuentes de entropía en su sistema, o que incluso su sistema operativo puede proporcionarle números casi aleatorios, puede usarlos para aumentar la entropía de su tiempo. semilla.

3

Solo para completar, this paper por Matsumoto et al. ilustra muy bien cuán importante es el esquema de inicialización (es decir, la forma de elegir su (s) semilla (s)) para la simulación. Resulta que un esquema de inicialización incorrecto puede sesgar fuertemente los resultados, aunque el algoritmo RNG como tal es bastante bueno en principio.

Cuestiones relacionadas