
Generador de números aleatorios: cómo los ordenadores crean aleatoriedad (2026)
📷 Skitterphoto / PexelsGenerador de números aleatorios: cómo los ordenadores crean aleatoriedad (2026)
Explora cómo funcionan los generadores de números aleatorios, la diferencia entre números pseudoaleatorios y verdaderamente aleatorios, la aleatoriedad criptográfica y casos de uso reales en juegos, seguridad y estadística.
¿Qué es realmente la aleatoriedad?
Usamos la palabra "aleatorio" casualmente. Una canción suena en reproducción aleatoria. Un dado cae en seis. Una bola de lotería cae en un tubo. En la vida cotidiana, aleatorio significa impredecible — algo que no podemos saber de antemano. Pero esta intuición oculta una pregunta sorprendentemente profunda: ¿puede un ordenador, que funciona con lógica precisa y determinista, producir algo verdaderamente impredecible?
La respuesta honesta es: no fácilmente, y no por defecto. Los ordenadores son máquinas deterministas. Dados los mismos inputs y el mismo estado, producen los mismos outputs, siempre. Eso es una característica — es lo que hace que el software sea confiable y depurable. Pero también es un obstáculo fundamental para generar verdadera aleatoriedad.
La forma en que los ordenadores han resuelto (o trabajado en torno a) este problema es uno de los logros más elegantes de la computación práctica. Toca matemáticas, física y criptografía, y tiene consecuencias que llegan a cada rincón del software moderno — desde los juegos que juegas hasta la seguridad de tu cuenta bancaria.
Generadores de números pseudoaleatorios: el caballo de batalla de la computación
El enfoque más común para producir números de apariencia aleatoria es el generador de números pseudoaleatorios (PRNG). A pesar del prefijo ligeramente poco halagador, los PRNG son genuinamente útiles e impulsan la gran mayoría de operaciones dependientes de aleatoriedad en software.
Un PRNG funciona comenzando con un valor inicial llamado semilla y ejecutándolo a través de una fórmula matemática que produce una secuencia de números. La fórmula está diseñada para que la secuencia resultante parezca estadísticamente aleatoria: los números están distribuidos uniformemente en un rango, los patrones son difíciles de detectar, y cualquier valor es aproximadamente tan probable como cualquier otro.
La característica definitoria de un PRNG es que la secuencia está completamente determinada por la semilla. Si ejecutas el mismo algoritmo con la misma semilla, obtienes exactamente la misma secuencia de números. Esto es tanto su fortaleza como su limitación.
El Mersenne Twister
El PRNG más utilizado en el mundo es probablemente el Mersenne Twister, introducido en 1997. Aparece en el módulo random de Python, Ruby, PHP y muchos otros lenguajes y entornos. Produce un período de 2^19937 - 1, lo que significa que generará más de 10^6000 números antes de que la secuencia se repita.
El Mersenne Twister pasa esencialmente todas las pruebas estadísticas de aleatoriedad. Para simular física, ejecutar cálculos de Monte Carlo, generar niveles de juego y barajar listas de reproducción, es excelente. Pero tiene un defecto grave: dados suficientes valores de salida, el estado interno del generador puede reconstruirse. Un atacante que observe un número suficiente de salidas puede predecir todas las salidas futuras.
Esto hace que el Mersenne Twister y los PRNG similares sean fundamentalmente inadecuados para aplicaciones criptográficas.
Por qué importan las semillas
La semilla inicial lo es todo para un PRNG. Si un atacante conoce la semilla, conoce toda la secuencia. El software a menudo siembra PRNGs con el timestamp actual, lo que suena razonable — pero un timestamp tiene entropía limitada porque un atacante a menudo puede adivinar cuándo comenzó un programa.
Generadores de números verdaderamente aleatorios: aprovechando la imprevisibilidad física
Si quieres números que no estén determinados por ningún estado previo, necesitas obtener entropía del mundo físico.
Los generadores de números verdaderamente aleatorios (TRNG) hacen exactamente esto. Miden algún proceso físico que es genuinamente impredecible a nivel cuántico o termodinámico: el tiempo preciso de la desintegración radiactiva, el ruido térmico en circuitos electrónicos, eventos de detección de fotones en un divisor de haz, o ruido atmosférico capturado por un receptor de radio.
Sitios web como random.org recolectan ruido de radio atmosférico para producir números verdaderamente aleatorios. Los módulos de hardware especializados llamados HSM (Módulos de Seguridad de Hardware) contienen fuentes de entropía dedicadas para aplicaciones de seguridad de alta garantía.
La compensación es el rendimiento. Los procesos físicos son lentos. En la práctica, la mayoría de los sistemas usan un enfoque híbrido: la verdadera aleatoriedad se usa para sembrar un CSPRNG de alta calidad, que luego genera números rápidamente manteniendo la imprevisibilidad.
Aleatoriedad criptográfica: el estándar dorado
La criptografía requiere algo específico: un generador cuya salida es computacionalmente indistinguible de la verdadera aleatoriedad, incluso para un adversario que ha observado grandes cantidades de salida.
Este es el dominio de los Generadores de números pseudoaleatorios criptográficamente seguros (CSPRNG). Un CSPRNG es un PRNG con garantías matemáticas adicionales:
- Secreto perfecto hacia adelante. Si el estado interno se revela de alguna manera, la salida pasada no puede reconstruirse.
- Imprevisibilidad. Dada cualquier cantidad de salida pasada, la salida futura no puede predecirse más rápido que adivinando por fuerza bruta.
- Buena siembra. Los CSPRNG se siembran con entropía de fuentes físicas genuinas, no solo con un timestamp.
Los sistemas operativos modernos proporcionan CSPRNG como servicio principal. En Linux, esto es /dev/urandom y /dev/random. En macOS e iOS, es SecRandomCopyBytes. En Windows, es CryptGenRandom y el más nuevo BCryptGenRandom.
La API Web Crypto
Para aplicaciones web y herramientas basadas en navegador, la API W3C Web Crypto proporciona acceso al CSPRNG del navegador a través de la función crypto.getRandomValues().
// Generar 16 bytes aleatorios criptográficamente seguros
const array = new Uint8Array(16);
crypto.getRandomValues(array);
console.log(array);
Los valores devueltos por crypto.getRandomValues() provienen del CSPRNG del sistema operativo, que a su vez se basa en fuentes de entropía de hardware. Son adecuados para generar claves de cifrado, tokens de sesión, nonces y cualquier otro valor sensible a la seguridad.
Este es el enfoque que ToolPal usa para su herramienta generadora de números aleatorios. Cuando generas números en el sitio, los valores provienen de crypto.getRandomValues() — la misma fuente usada por software de seguridad. No están sembrados con un timestamp. Son genuinamente impredecibles.
Casos de uso reales para números aleatorios
Juegos y simulaciones
Cada lanzamiento de dado en un videojuego, cada botín, cada baraja de cartas mezclada y cada nivel generado proceduralmente depende de números aleatorios. Los juegos usan PRNG extensivamente porque la velocidad y las propiedades estadísticas importan más que la seguridad criptográfica.
El software de simulación — desde modelado meteorológico hasta análisis de riesgo financiero — usa números aleatorios para métodos de Monte Carlo, donde miles o millones de muestras aleatorias se usan para estimar resultados de sistemas demasiado complejos para resolver analíticamente.
Un punto sutil pero importante: los juegos que usan un PRNG sembrado pueden reproducir partidas exactas si conoces la semilla. Así es como funcionan las "semillas de speedrun" en juegos como Minecraft.
Estadística y muestreo
Los investigadores necesitan muestras aleatorias representativas de poblaciones. El diseño de encuestas, la aleatorización de ensayos clínicos, el muestreo de control de calidad y la asignación de pruebas A/B dependen todos de una buena generación de números aleatorios.
El muestreo estadístico también incluye el bootstrapping — una técnica donde el remuestreo aleatorio de datos existentes se usa para estimar intervalos de confianza.
Criptografía y seguridad
Aquí es donde la aleatoriedad se vuelve crítica para la misión. Cada aspecto de la criptografía moderna depende de números aleatorios impredecibles:
- Claves de cifrado: Una clave AES-256 son 256 bits aleatorios. Si esos bits son predecibles, el cifrado está roto.
- Tokens de sesión: Las aplicaciones web generan IDs de sesión que autentican usuarios. Un ID de sesión predecible puede ser falsificado, permitiendo la toma de control de cuentas.
- Nonces: Muchos protocolos criptográficos usan valores de un solo uso para prevenir ataques de repetición. Estos deben ser aleatorios.
- Sales de contraseña: El hashing de contraseñas añade valores de sal aleatorios para prevenir ataques precalculados como las tablas arcoíris.
- Handshake TLS: Todo el protocolo TLS que asegura las conexiones HTTPS depende de valores aleatorios generados durante la configuración de la conexión.
Varios fallos de seguridad catastróficos en la historia han sido causados por una mala generación de números aleatorios. El bug de Debian OpenSSL de 2008 neutralizó accidentalmente la fuente de entropía, reduciendo el espacio de claves efectivo a unos pocos miles de valores.
Contraseñas y tokens de seguridad
Cuando generas una contraseña fuerte con una herramienta como el generador de contraseñas de ToolPal, los caracteres se seleccionan usando aleatoriedad criptográficamente segura. Esto garantiza que cada contraseña generada sea independiente de las demás.
Conceptos erróneos comunes sobre la aleatoriedad
"La historia reciente afecta a los resultados futuros." Esta es la falacia del jugador. Si una moneda cae cara diez veces seguidas, la mayoría de la gente intuitivamente siente que cruz "está pendiente". No lo está. Cada lanzamiento es independiente.
"Los humanos somos buenos eligiendo números aleatorios." No lo somos. Cuando se pide escribir una secuencia de dígitos "aleatorios", las personas evitan repetir dígitos y favorecen inconscientemente ciertos valores.
"Una salida de apariencia aleatoria significa que el generador es bueno." La inspección visual es una manera terrible de evaluar la aleatoriedad. La evaluación profesional usa conjuntos de pruebas formales como NIST SP 800-22, pruebas Diehard o TestU01.
"La aleatoriedad significa distribución uniforme." La aleatoriedad trata sobre imprevisibilidad, no sobre distribución. Puedes tener muestras aleatorias de una distribución normal, exponencial o cualquier otra forma.
Cómo elegir el tipo correcto de aleatoriedad
| Caso de uso | Fuente recomendada |
|---|---|
| Mecánica de juegos, barajar, simulación | PRNG (Mersenne Twister o similar) |
| Muestreo estadístico, pruebas A/B | PRNG con buena siembra |
| Generación de contraseñas | CSPRNG (API Web Crypto o equivalente) |
| Claves de cifrado, tokens de sesión | CSPRNG |
| Lotería o sorteo de alto riesgo | TRNG o CSPRNG auditado |
| Pruebas reproducibles | PRNG con semilla fija documentada |
Conclusión
La generación de números aleatorios se sitúa en una interesante intersección de teoría e ingeniería. Las propiedades matemáticas de la aleatoriedad son genuinamente profundas. Las consecuencias prácticas — conexiones cifradas, juegos justos, muestras representativas, contraseñas seguras — son tangibles e inmediatas.
Los puntos clave:
- Los PRNG son deterministas y rápidos, adecuados para simulaciones y juegos, pero no para seguridad.
- Los RNG verdaderos obtienen entropía de procesos físicos, produciendo valores genuinamente impredecibles pero lentamente.
- Los CSPRNG combinan ambos: usan entropía física para sembrar algoritmos con garantías criptográficas, entregando velocidad y seguridad.
- La API Web Crypto lleva aleatoriedad de calidad CSPRNG a aplicaciones basadas en navegador.
La próxima vez que generes una contraseña en el generador de contraseñas de ToolPal o elijas un número aleatorio de nuestro generador de números aleatorios, puedes estar seguro de que los valores provienen de crypto.getRandomValues() — la misma base criptográfica que asegura la Web moderna. Sin timestamps, sin semillas predecibles, sin falacia del jugador. Solo aleatoriedad genuina e impredecible, manejada correctamente.