Generador de números aleatorios
(en inglés random number generator, RNG) — es un sistema diseñado para generar una secuencia de números o símbolos cuyo significado no se puede predecir de antemano. Una secuencia específica de resultados generados puede contener una cierta
patrón que se trazará después del proceso de generación, pero que no se pudo prever de antemano.
Generador de números aleatorios de hardware
Para generar números aleatorios verdaderos, un generador de números aleatorios de hardware
(en inglés hardware random number generator, HRNG) se usa
o también se llama verdadero generador de números aleatorios
(en inglés true random number generator, TRNG) —

es un dispositivo que genera números aleatorios a partir de un proceso físico que cambia constantemente de una manera que es
prácticamente imposible de modelar. Dichos generadores pueden basarse en el uso de procesos aleatorios macroscópicos, es decir
en una escala que permita mediciones y observaciones a simple vista, por ejemplo, al lanzar una moneda, dados o
ruedas de ruleta Aunque un proceso macroscópico se puede determinar completamente de acuerdo con la mecánica newtoniana,
un mecanismo bien diseñado, como una rueda de ruleta, producirá un resultado impredecible, que puede explicarse
por la teoría del caos y la inestabilidad de los sistemas dinámicos debido a la diferencia en las condiciones iniciales de cada uno
nuevo intento de hacer girar la rueda de la ruleta. La principal desventaja de los generadores que utilizan procesos macroscópicos siempre ha
sido la velocidad lenta y, como resultado, la incapacidad de generar una gran cantidad de valores en un corto período de tiempo.
Hoy en día, los generadores de números aleatorios de hardware tienden a utilizar dispositivos basados en fenómenos microscópicos.

que generan señales de "ruido" estadísticamente aleatorias de bajo nivel, como varios ruidos (disparo, térmico, atmosférico),
el efecto fotoeléctrico, que implica un divisor de haz, y otros fenómenos cuánticos. Tales procesos son buenas fuentes
de entropía porque su resultado es absolutamente imposible de predecir en teoría, pero debido a la complejidad de
implementación y relativa lentitud del trabajo, el alcance del uso de dichos generadores se limita a áreas temáticas
con ciertos requisitos para los valores generados.
Básicamente, los generadores de números aleatorios de hardware electrónico se utilizan en criptografía para generar criptográficamente aleatoriamente
claves para garantizar la transferencia segura de datos, por ejemplo, en protocolos de cifrado de Internet como el protocolo de seguridad de la capa de transporte
(en inglés Transport Layer Security, TLS).
Generador de números pseudoaleatorios

Una alternativa a los generadores de hardware (físicos) son los generadores basados en algoritmos —
(en inglés pseudorandom number generators, PRNG),
que crean una secuencia de números que parece aleatoria, pero en realidad no lo es. Los números generados por el PRNG
no pueden considerarse verdaderamente aleatorios ya que están completamente determinados por un valor inicial, llamado semilla de PRNG. A pesar de que
la secuencia de números generados por generadores de números aleatorios de hardware está más cerca de ser verdaderamente aleatorio, pseudoaleatorio
Los generadores de números se utilizan a menudo en la práctica en muchas áreas debido a su velocidad en la generación de números, facilidad de
implementación y relativo bajo costo. Hay muchos métodos para crear secuencias pseudoaleatorias de números,
entre ellos el Mersenne Twister, un generador lineal congruente (en inglés linear congruential generator, LCG), generadores de números aleatorios Xorshift, también
llamados generadores de registro de desplazamiento, Well equidistributed long-period linear (WELL) que es una forma de
registro de desplazamiento de retroalimentación lineal optimizado para la implementación de software y otros métodos basados en algoritmos.
Mersenne Twister
El Mersenne Twister es uno de los generadores de números pseudoaleatorios más populares desarrollado en 1997 por
Makoto Matsumoto (松本 眞) y Takuji Nishimura (西村 拓士). Su nombre proviene del hecho de que su
la duración del período se elige como un primo de Mersenne, es un número primo de la forma

para algún entero n.
Este PRNG fue diseñado específicamente para resolver la mayoría de las deficiencias encontradas en los PRNG anteriores. Las principales ventajas del Mersenne Twister:
- Un período muy largo de 219937 — 1
- Pasa muchas pruebas estadísticas de aleatoriedad, incluidas las pruebas Diehard y la mayoría, pero no todas, las pruebas TestU01
- Tiene una licencia de software libre permisiva y libre de patentes para todas las variantes excepto CryptMT
- k-distribuida con una precisión de 32 bits para cada 1 ≤ k ≤ 623
- Las implementaciones generalmente generan números aleatorios más rápido que los métodos de generación verdaderos (hardware)
El Mersenne Twister se utiliza como PRNG predeterminado en muchos lenguajes de programación, software y recursos en línea,
como nuestro
generador de números aleatorios en línea,
pero este método no es criptográficamente fuerte, lo que no permite su uso en criptografía.
PRNG con fuente de entropía
Junto con la necesidad de generar rápidamente secuencias fácilmente reproducibles de números aleatorios, también existe la necesidad
para generar números completamente impredecibles o simplemente completamente aleatorios. Para satisfacer ambas condiciones,
Las combinaciones de un PRNG criptorresistente y una fuente externa de entropía se usan con mayor frecuencia y son estas
combinaciones de generadores que ahora se denominan comúnmente generadores de números aleatorios (RNG). Estos generadores son los más
a menudo se usa para generar claves simétricas y asimétricas únicas para el cifrado, la industria del juego y otras áreas.
Un ejemplo del funcionamiento de un generador combinado es el siguiente: un dispositivo físico, utilizando una fuente confiable
de entropía (como el ruido térmico), genera la "semilla" para una criptografía segura más rápida
generador de números pseudoaleatorios, que luego genera una secuencia de salida pseudoaleatoria a una velocidad de datos mucho más alta.