¿Qué es un RNG?
Un RNG (Random Number Generator, por sus siglas en inglés) es un generador de números aleatorios. Este término se refiere a cualquier dispositivo o algoritmo que produce una secuencia de números o símbolos que no pueden ser razonablemente predichos mejor que por una oportunidad aleatoria. Los RNGs son esenciales en diversas aplicaciones, desde la criptografía hasta los juegos de azar, pasando por simulaciones y otras áreas de la informática y las ciencias.
¿Tipos de RNG?
Existen dos tipos principales de RNG:
Generadores de números aleatorios verdaderos (TRNG – True Random Number Generator)
Un Generador de Números Aleatorios Verdaderos (TRNG, por sus siglas en inglés) es un dispositivo o sistema que genera números aleatorios basados en fenómenos físicos inherentemente impredecibles. A diferencia de los Generadores de Números Pseudoaleatorios (PRNG), que utilizan algoritmos determinísticos para producir secuencias de números, los TRNGs dependen de la entropía física para generar números verdaderamente aleatorios.

El funcionamiento de un TRNG se basa en medir un proceso físico aleatorio y convertir esa medición en una secuencia de bits que, luego, pueden ser interpretados como números aleatorios. Los pasos básicos son:
- Fuente de entropía: Identificación y uso de una fuente de ruido físico aleatorio.
- Conversión a señales eléctricas: La señal física (por ejemplo, ruido térmico) se convierte en una señal eléctrica.
- Digitalización: La señal eléctrica se convierte en una serie de bits digitales.
- Postprocesamiento (opcional): Para mejorar la calidad y uniformidad de los bits aleatorios, se puede aplicar un procesamiento adicional para eliminar sesgos.
- Ruido térmico: Las fluctuaciones aleatorias en la corriente eléctrica debidas al movimiento térmico de los electrones en un resistor.
- Ruido atmosférico: Variaciones en las señales de radio captadas por una antena, debidas a fenómenos atmosféricos impredecibles.
- Ruido cuántico: Fenómenos cuánticos como la desintegración radiactiva o las fluctuaciones de vacío cuántico.
- Ruido fotónico: Variaciones en la intensidad de la luz debido a fenómenos cuánticos.
- Ruido térmico:
- Principio: Aprovecha el ruido térmico en un resistor.
- Uso: Común en hardware de generación de claves criptográficas.
- Fotones cuánticos:
- Principio: Utiliza la detección de fotones individuales en un haz de luz cuántica.
- Ejemplo: Sistemas que emplean fotodetectores sensibles para medir fluctuaciones en la emisión de fotones.
- Desintegración radiactiva:
- Principio: Mide los intervalos de tiempo entre eventos de desintegración radiactiva.
- Ejemplo: Detectores Geiger-Müller utilizados para contar eventos de desintegración.
- Ruido atmosférico:
- Principio: Captura y digitaliza el ruido electromagnético presente en la atmósfera.
- Ejemplo: Sistemas que usan antenas de radio para captar el ruido ambiental.
- Criptografía: Generación de claves criptográficas verdaderamente aleatorias para cifrado seguro.
- Seguridad informática: Creación de tokens de autenticación y contraseñas.
- Simulaciones científicas: Uso en simulaciones de Monte Carlo donde se requiere alta calidad de aleatoriedad.
- Loterías y juegos de azar: Asegurar que los sorteos y juegos sean justos e impredecibles.
Ventajas
- Aleatoriedad verdadera: Basados en fenómenos físicos impredecibles, proporcionando verdadera aleatoriedad.
- Seguridad: Esencial para aplicaciones que requieren alta seguridad e imprevisibilidad.
Desventajas
- Coste y complejidad: Generalmente más caros y complejos de implementar que los PRNG.
- Velocidad: A menudo más lentos que los PRNG, debido a la necesidad de capturar y procesar fenómenos físicos.
Ejemplo práctico
Dispositivo de ruido térmico:
- Fuente de entropía: Un resistor generando ruido térmico.
- Conversión: El ruido térmico es captado por un amplificador.
- Digitalización: La señal amplificada se digitaliza utilizando un convertidor analógico-digital (ADC).
- Postprocesamiento: Algoritmos eliminan cualquier sesgo residual en la señal digital.
Generadores de números pseudoaleatorios (PRNG – Pseudo Random Number Generator)
Un Generador de Números Pseudoaleatorios (PRNG) es un algoritmo que produce secuencias de números que se aproximan a las propiedades de secuencias de números aleatorios. A diferencia de los Generadores de Números Aleatorios Verdaderos (TRNG), los PRNG son determinísticos, lo que significa que producen una secuencia de números basada en una semilla inicial y seguirán produciendo la misma secuencia si se reinician con la misma semilla.

Los PRNG operan a través de fórmulas matemáticas o algoritmos que transforman una semilla (valor inicial) en una secuencia de números pseudoaleatorios. Los pasos básicos son:
- Inicialización con una semilla: El PRNG comienza con una semilla inicial, que puede ser cualquier valor (como la hora actual del sistema).
- Generación de la secuencia: Utiliza una fórmula matemática para producir una serie de números a partir de la semilla.
- Ciclo de repetición: La fórmula se aplica repetidamente para producir más números en la secuencia.
- Linear Congruential Generator (LCG):
- Fórmula: 𝑋𝑛+1=(𝑎𝑋𝑛+𝑐) mod 𝑚
- Descripción: Es uno de los PRNG más simples y antiguos. Utiliza parámetros 𝑎a, 𝑐c, y 𝑚m junto con una semilla 𝑋0X0 para generar la secuencia.
- Mersenne Twister: Uno de los PRNG más populares debido a su largo periodo y buena calidad estadística. Es ampliamente utilizado en aplicaciones científicas y en software de simulación.
- Xorshift: Utiliza operaciones de desplazamiento y XOR para generar números pseudoaleatorios. Es rápido y eficiente en términos de recursos computacionales.
- Cryptographically Secure PRNG (CSPRNG): Diseñado específicamente para aplicaciones criptográficas. Ejemplos incluyen algoritmos como Fortuna y ChaCha20.
- Repetibilidad: La misma semilla generará la misma secuencia, útil para pruebas y depuración.
- Velocidad: Generalmente más rápidos que los TRNG, adecuados para aplicaciones que requieren generar grandes cantidades de números rápidamente.
- Simplicidad: Fácil de implementar y usar en la mayoría de lenguajes de programación.
Desventajas
- Determinismo: No son verdaderamente aleatorios, lo que puede ser una desventaja en aplicaciones que requieren seguridad fuerte.
- Periodo limitado: La secuencia eventualmente se repite después de un cierto número de valores (el periodo).
- Simulaciones científicas: Utilizados en simulaciones de Monte Carlo donde se necesitan grandes cantidades de números aleatorios reproducibles.
- Videojuegos: Para generar eventos aleatorios, movimientos de personajes, etc.
- Estadística y muestreo: Para generar muestras aleatorias de datos.
- Criptografía (con CSPRNG): Para generar claves, vectores de inicialización, y otros elementos donde la seguridad es crítica.
Ejemplo práctico
Linear Congruential Generator (LCG):
class LCG:
def __init__(self, seed, a=1664525, c=1013904223, m=2**32):
self.seed = seed
self.a = a
self.c = c
self.m = m
def next(self):
self.seed = (self.a * self.seed + self.c) % self.m
return self.seed
# Uso del LCG
lcg = LCG(seed=12345)
random_numbers = [lcg.next() for _ in range(10)]
print(random_numbers)
Mersenne Twister en python
Python ofrece el Mersenne Twister como su PRNG predeterminado en el módulo random:
import random
# Inicialización con una semilla
random.seed(12345)
# Generación de números pseudoaleatorios
random_numbers = [random.randint(0, 100) for _ in range(10)]
print(random_numbers)
Aplicaciones de los RNG
- Criptografía: Los RNGs son fundamentales para generar claves de cifrado seguras, números aleatorios para protocolos de seguridad y tokens.
- Juegos de azar: Utilizados en casinos, máquinas tragamonedas y juegos en línea para garantizar la aleatoriedad de los resultados.
- Simulaciones: Empleados en simulaciones de Monte Carlo y otras técnicas que requieren secuencias de números aleatorios para modelar fenómenos complejos.
- Seguridad informática: Generación de contraseñas, tokens de autenticación y otras aplicaciones que requieren imprevisibilidad.
Conclusión
Los RNGs son herramientas esenciales en numerosos campos debido a su capacidad para generar secuencias de números aleatorios o pseudoaleatorios. La elección entre TRNG y PRNG depende de la aplicación específica y de los requisitos de seguridad e imprevisibilidad. Los TRNGs proporcionan verdadera aleatoriedad basándose en fenómenos físicos, mientras que los PRNGs, aunque determinísticos, son útiles y eficientes para muchas aplicaciones prácticas.



