Generación de números aleatorios


La generación de números aleatorios es un proceso mediante el cual, a menudo por medio de un generador de números aleatorios ( RNG ), se genera una secuencia de números o símbolos que no se pueden predecir razonablemente mejor que mediante el azar . Esto significa que la secuencia de resultados particular contendrá algunos patrones detectables en retrospectiva pero impredecibles para la previsión. Los verdaderos generadores de números aleatorios pueden ser generadores de números aleatorios por hardware(HRNGS) que generan números aleatorios, donde cada generación es una función del valor actual de un atributo del entorno físico que cambia constantemente de una manera que es prácticamente imposible de modelar. Esto contrastaría con las llamadas "generaciones de números aleatorios" realizadas por generadores de números pseudoaleatorios (PRNG) que generan números que solo parecen aleatorios pero que de hecho están predeterminados; estas generaciones se pueden reproducir simplemente conociendo el estado del PRNG .

Varias aplicaciones de la aleatoriedad han llevado al desarrollo de varios métodos diferentes para generar datos aleatorios . Algunos de estos han existido desde la antigüedad, entre cuyas filas se encuentran ejemplos "clásicos" bien conocidos, como el lanzamiento de dados , el lanzamiento de monedas , el barajado de cartas , el uso de tallos de milenrama (para la adivinación ) en el I Ching., así como innumerables otras técnicas. Debido a la naturaleza mecánica de estas técnicas, generar grandes cantidades de números suficientemente aleatorios (importantes en estadística) requirió mucho trabajo y tiempo. Por lo tanto, los resultados a veces se recopilarían y distribuirían como tablas de números aleatorios .

Existen varios métodos computacionales para la generación de números pseudoaleatorios. Todos no alcanzan el objetivo de la verdadera aleatoriedad, aunque pueden cumplir, con éxito variable, algunas de las pruebas estadísticas de aleatoriedad destinadas a medir cuán impredecibles son sus resultados (es decir, hasta qué punto sus patrones son discernibles). Por lo general, esto los hace inutilizables para aplicaciones como la criptografía . Sin embargo, también existen generadores de números pseudoaleatorios criptográficamente seguros (CSPRNGS) cuidadosamente diseñados , con características especiales diseñadas específicamente para su uso en criptografía.

Los generadores de números aleatorios tienen aplicaciones en juegos de azar , muestreo estadístico , simulación por computadora , criptografía , diseño completamente aleatorio y otras áreas donde es deseable producir un resultado impredecible. Generalmente, en aplicaciones que tienen la imprevisibilidad como característica primordial, como en las aplicaciones de seguridad, los generadores de hardware se prefieren generalmente a los algoritmos pseudoaleatorios, cuando es factible.

Los generadores de números pseudoaleatorios son muy útiles en el desarrollo de simulaciones del método Monte Carlo , ya que la depuración se ve facilitada por la capacidad de ejecutar la misma secuencia de números aleatorios nuevamente partiendo de la misma semilla aleatoria . También se utilizan en criptografía, siempre que la semilla sea ​​secreta. El remitente y el receptor pueden generar el mismo conjunto de números automáticamente para usarlos como claves.

La generación de números pseudoaleatorios es una tarea importante y común en la programación de computadoras. Si bien la criptografía y ciertos algoritmos numéricos requieren un grado muy alto de aleatoriedad aparente , muchas otras operaciones solo necesitan una cantidad modesta de imprevisibilidad. Algunos ejemplos simples podrían ser presentar a un usuario una "cita aleatoria del día" o determinar en qué dirección podría moverse un adversario controlado por computadora en un juego de computadora. Se utilizan formas más débiles de aleatoriedad en algoritmos hash y en la creación de algoritmos de búsqueda y clasificación amortizados .


Los dados son un ejemplo de un generador de números aleatorios de hardware mecánico. Cuando se lanza un dado cúbico, se obtiene un número aleatorio del 1 al 6.
Demostración de un generador de números aleatorios simple basado en dónde y cuándo se hace clic en un botón