¿Alguna vez te preguntaste cómo puede una computadora, que es una máquina completamente determinista y predecible, generar algo que parece verdaderamente aleatorio? La respuesta es fascinante y tiene implicaciones importantes para entender cuándo podés confiar en estas herramientas y cuándo no.
El problema fundamental: las computadoras no son aleatorias
Una computadora es, por definición, una máquina determinista. Si le das los mismos datos de entrada, siempre producirá los mismos datos de salida. No hay margen para la sorpresa. Entonces, ¿cómo generan números que parecen aleatorios?
La respuesta está en los generadores de números pseudoaleatorios (PRNG, del inglés Pseudorandom Number Generator). Son algoritmos matemáticos diseñados para producir secuencias de números que estadísticamente se comportan como si fueran aleatorios, aunque en realidad siguen una fórmula determinista.
Las semillas: el punto de partida
Todo PRNG necesita un número inicial llamado semilla (en inglés, seed). A partir de esa semilla, el algoritmo aplica operaciones matemáticas para producir el primer número "aleatorio", luego usa ese resultado como nueva semilla para generar el siguiente, y así sucesivamente.
Si dos generadores usan la misma semilla, producirán exactamente la misma secuencia de números. Esto es intencional en algunos contextos: los mundos procedurales de videojuegos como Minecraft se generan a partir de una semilla fija, lo que permite recrear el mismo mundo compartiendo ese número.
Para los generadores online de uso cotidiano, la semilla se toma del reloj del sistema —la hora actual en nanosegundos— que cambia constantemente y es prácticamente imposible conocer de antemano. Esto garantiza que cada ejecución produzca una secuencia diferente.
Cómo funciona Math.random() en el navegador
En los navegadores web, la función Math.random() de JavaScript es el estándar para generar números aleatorios. Devuelve un número decimal entre 0 (incluido) y 1 (excluido), con hasta 15 dígitos de precisión.
Para convertir ese valor a un entero en un rango específico, se usa esta fórmula:
Math.floor(Math.random() * (max - min + 1)) + min
Por ejemplo, para generar un número del 1 al 6 (un dado estándar):
Math.random()genera algo como0.7318...- Multiplicado por 6: resultado
4.3908... Math.floor()lo redondea hacia abajo:4- Se suma el mínimo (1): resultado final =
5
La especificación ECMAScript no define qué algoritmo debe usar internamente Math.random(), pero la mayoría de los navegadores modernos usan variantes del algoritmo xorshift128+, extremadamente rápido y con excelentes propiedades estadísticas.
¿Son confiables para sorteos y juegos?
Para el 99% de los usos cotidianos, sí. Los PRNG modernos pasan todas las baterías de pruebas estadísticas de aleatoriedad (como TestU01 y DieHarder). La distribución es uniforme: cada número tiene exactamente la misma probabilidad de salir que cualquier otro dentro del rango.
Para sorteos, juegos de mesa, decisiones cotidianas y estadística educativa, un generador basado en Math.random() es más que suficiente y completamente confiable. La diferencia entre un PRNG de calidad y la aleatoriedad verdadera solo se puede detectar con millones de muestras y pruebas altamente especializadas.
Cuándo Math.random() no es suficiente
Hay contextos específicos donde se necesita aleatoriedad criptográficamente segura:
- Generación de claves privadas para criptomonedas
- Tokens de sesión y autenticación en aplicaciones web
- Generación de claves de cifrado SSL/TLS
- Sistemas de lotería con dinero real regulados por ley
Para estos casos, los navegadores modernos ofrecen crypto.getRandomValues(), que usa fuentes de entropía reales del sistema operativo: movimientos del mouse, ruido del hardware, tiempo entre interrupciones del teclado, temperatura de los procesadores. Nuestro generador de contraseñas usa esta API para mayor seguridad.
Aleatoriedad verdadera: los TRNG
Los generadores de números verdaderamente aleatorios (TRNG, True Random Number Generator) usan fenómenos físicos impredecibles como fuente de aleatoriedad:
- Ruido térmico en resistencias electrónicas
- Decaimiento radiactivo de átomos
- Fluctuaciones cuánticas del vacío
- Ruido fotónico en láseres
Servicios como Random.org usan ruido atmosférico para generar aleatoriedad certificada. Este nivel de rigor se justifica solo en aplicaciones científicas de alta precisión o criptografía crítica. Para sortear quién lava los platos esta noche, un PRNG funciona perfectamente.
¿Puede alguien predecir el próximo número?
En teoría, si conocés la semilla exacta y el algoritmo completo, podés predecir toda la secuencia futura. En la práctica, esto es imposible porque:
- La semilla es la hora del sistema en nanosegundos, imposible de conocer de antemano
- Los navegadores modernos añaden entropía adicional de múltiples fuentes del sistema
- El estado interno del generador no es accesible desde afuera del navegador
Los ataques prácticos contra Math.random() solo son posibles en contextos muy específicos donde el atacante controla el entorno de ejecución completo. Para cualquier uso doméstico o educativo, estás absolutamente seguro.
Por qué esto importa para los generadores online
Entender que los generadores online son pseudoaleatorios (pero impredecibles en la práctica) te ayuda a usarlos con la confianza correcta. Para un sorteo de 50 personas, un juego de mesa o elegir el orden de presentación en una clase, son perfectamente justos e imparciales.
La impredecibilidad práctica es lo que garantiza la equidad, no la aleatoriedad teórica pura. Y en ese aspecto, los generadores modernos son tan buenos como el dado físico más perfecto.
Conclusión
La generación aleatoria en computadoras combina matemáticas, estadística y criptografía en herramientas cotidianas que usamos sin pensar. Los PRNG modernos son más que suficientes para el 99% de los casos de uso: rápidos, estadísticamente impecables y completamente imprevisibles en la práctica.
La próxima vez que uses un generador de números, podés confiar en que el resultado es genuinamente impredecible. No porque sea física cuántica, sino porque la matemática detrás lo garantiza.