Aleatoriedad real vs. pseudoaleatoriedad

Cuando haces clic en un botón de «generar» en un sitio web, esperas que el resultado sea completamente aleatorio. Pero en el mundo de la informática, la aleatoriedad verdadera es sorprendentemente difícil de lograr. La mayoría de la aleatoriedad digital es en realidad «pseudoaleatoria». En esta guía explicamos la diferencia entre los generadores de números aleatorios verdaderos (TRNG) y los generadores de números pseudoaleatorios (PRNG), y por qué esa distinción es crítica para la ciberseguridad.

Pruébalo tú mismo

¿Quieres ver un algoritmo pseudoaleatorio en acción? Usa nuestro Generador de números aleatorios gratuito para generar secuencias personalizadas al instante.

Índice de contenidos

¿Qué es la aleatoriedad?

En matemáticas, una secuencia de números se considera aleatoria si no contiene patrones ni órdenes reconocibles. La aleatoriedad verdadera implica que conocer los números anteriores de la secuencia no te da absolutamente ninguna ventaja para predecir el siguiente número.

Mientras que los humanos son notoriamente malos generando números aleatorios (evitamos repetir dígitos y favorecemos ciertos patrones), las computadoras son máquinas inherentemente deterministas. Ejecutan las instrucciones exactamente como están programadas. Entonces, ¿cómo genera aleatoriedad una máquina que solo entiende «1» y «0»?

Los generadores de números pseudoaleatorios (PRNG)

La gran mayoría de las herramientas web, los videojuegos y las aplicaciones de software usan PRNG. Un PRNG es un algoritmo matemático que toma un valor inicial (llamado «semilla») y lo pasa por ecuaciones complejas para producir una secuencia de números que parece aleatoria.

Next Number = MathAlgorithm(Previous Number, Seed)

Como los PRNG se basan en las matemáticas, son deterministas. Si le das a un PRNG exactamente la misma semilla hoy, mañana y dentro de diez años, generará exactamente la misma secuencia de números todas las veces.

Esto es muy eficiente. Los PRNG son increíblemente rápidos y pueden generar millones de números por segundo. Para cosas como mezclar una lista de reproducción de Spotify, lanzar dados digitales en un juego o ejecutar simulaciones estadísticas, un PRNG es perfectamente válido. La función estándar Math.random() de JavaScript es un PRNG. Puedes comprobarlo con nuestro Generador de números aleatorios del 1 al 10.

¿Generando contraseñas?

La seguridad exige impredecibilidad verdadera. Nunca uses un PRNG estándar para contraseñas. Usa en su lugar nuestro Generador de contraseñas seguro.

Los generadores de números aleatorios verdaderos (TRNG)

Los generadores de números aleatorios verdaderos no dependen de las matemáticas. En su lugar, extraen la aleatoriedad de fenómenos físicos impredecibles del mundo real.

Los TRNG modernos miden cosas como el ruido térmico en los circuitos electrónicos, el efecto fotoeléctrico o incluso el ritmo de las pulsaciones del usuario. El servicio TRNG más famoso, Random.org, usa el ruido atmosférico (estática de radio) para generar sus números.

Como estos eventos físicos se rigen por la mecánica cuántica, son fundamentalmente impredecibles. Un TRNG no usa semilla, y la secuencia de números no se puede reproducir, pase lo que pase.

Por qué la diferencia importa para la seguridad

Si solo vas a elegir a un ganador de sorteo o a dividir jugadores en equipos con nuestro Generador aleatorio de equipos, un PRNG es completamente seguro. La aleatoriedad «pseudo» no importa.

Sin embargo, en criptografía, la predictibilidad equivale a vulnerabilidad. Si un pirata informático puede averiguar la semilla matemática que usa tu PRNG, puede reproducir cada número «aleatorio» que genere tu computadora, incluidas tus claves de cifrado privadas y tus contraseñas.

Por eso los navegadores desarrollaron generadores de números pseudoaleatorios criptográficamente seguros (CSPRNG), como window.crypto.getRandomValues(). Estos algoritmos siguen usando matemáticas, pero recogen su «semilla» de variables de sistema muy impredecibles (como los movimientos del ratón o la temperatura de la CPU) y tienen garantía matemática de superar rigurosas pruebas de aleatoriedad estadística. Esta es la tecnología de fondo que impulsa herramientas seguras como nuestro Generador de contraseñas.

Si necesitas generar números garantizados únicos sin repeticiones para un evento, los PRNG son perfectos. Puedes probarlo con nuestra herramienta: el Generador de números aleatorios sin repetición.

Preguntas frecuentes (FAQ)

¿La función Math.random() de JavaScript es verdaderamente aleatoria?

No, Math.random() es un generador de números pseudoaleatorios (PRNG). Usa un algoritmo matemático y un valor de semilla inicial para producir una secuencia de números que parece aleatoria, pero que en realidad es completamente determinista y predecible.

¿Cuál es la diferencia entre PRNG y TRNG?

Los PRNG (generadores de números pseudoaleatorios) usan matemáticas para crear números que parecen aleatorios, pero son deterministas. Los TRNG (generadores de números aleatorios verdaderos) extraen la aleatoriedad de fenómenos físicos impredecibles, como el ruido atmosférico o la desintegración radiactiva, lo que los hace verdaderamente impredecibles.

¿Puedo usar un generador de números pseudoaleatorios para contraseñas?

No, nunca deberías usar un PRNG estándar para contraseñas o claves criptográficas. Como los PRNG son deterministas, un pirata informático que adivine la semilla puede reproducir tu contraseña exacta. Usa siempre un generador de números pseudoaleatorios criptográficamente seguro (CSPRNG) o un TRNG.