Laboratorio de entropía y RNG débiles
Mide entropía de Shannon real y usa el CSPRNG real en tu navegador. Detecta la clave predecible (Debian 2008, semillas de tiempo, IV constantes) y elige la primitiva correcta.
Abrir la herramienta →La herramienta interactiva se abre en inglés.
La mayor parte de la criptografía rota no tiene mal las matemáticas, sino la aleatoriedad: una clave sembrada con muy poca entropía, un token generado con Math.random() o con el reloj, un nonce reutilizado. Este laboratorio de criptografía, 100 % en el navegador, calcula entropía de Shannon REAL y genera tokens con el CSPRNG REAL (crypto.getRandomValues), sin servidor y sin que nada salga de tu equipo. Mides la entropía de Shannon (bits por símbolo) de un token del CSPRNG, de un token de Math.random(), de una secuencia predecible y de una contraseña, y compruebas que una entropía alta por símbolo es necesaria pero no suficiente para material de clave: un token de Math.random() puede puntuar los mismos bits por símbolo que uno seguro y ser totalmente predecible. Reproduces los desastres clásicos de RNG débiles: el colapso del espacio de claves de OpenSSL en Debian en 2008 (unas 32k claves posibles), un PRNG sembrado con el reloj, un IV constante codificado en el código y un token de restablecimiento derivado de una marca de tiempo. Ves la predictibilidad en directo: recuperas por fuerza bruta un token sembrado con la hora y cuentas las colisiones que produce un espacio de claves mutilado de ~2^15 frente a una extracción completa del CSPRNG. Las decisiones con nota entrenan las lecciones reales: juzga la aleatoriedad por su ORIGEN, extrae suficientes bytes de entropía y elige crypto.getRandomValues en lugar de Math.random para todo lo que deba ser imposible de adivinar. Es un laboratorio Pro.
- Mide la entropía de Shannon de un token del CSPRNG, uno de Math.random(), una secuencia predecible y una contraseña.
- Reproduce los desastres de RNG débiles: Debian 2008, PRNG sembrado con el reloj, IV constante y token derivado de una marca de tiempo.
- Recupera por fuerza bruta un token sembrado con la hora y cuenta las colisiones de un espacio de claves de ~2^15.
- Toma las decisiones con nota: juzga el origen, extrae suficiente entropía y elige la primitiva correcta.
Preguntas frecuentes
¿Qué es el laboratorio de entropía y RNG débiles?
Un entrenador de criptografía en el navegador sobre la aleatoriedad. Calcula entropía de Shannon real sobre cadenas de muestra en tu navegador y usa el CSPRNG real de Web Crypto (crypto.getRandomValues) para mostrar una buena aleatoriedad, y después te guía por retos con nota sobre medir la entropía, detectar claves predecibles (el fallo de Debian de 2008, PRNG sembrados con la hora, IV constantes, tokens de marca de tiempo) y elegir la primitiva correcta. Todo se ejecuta en el cliente: no se envía nada a un servidor.
¿Por qué una puntuación alta de entropía de Shannon no basta para una clave segura?
La entropía de Shannon sobre las frecuencias observadas de los símbolos mide lo uniforme que parece una cadena, no si se puede predecir. Un token de Math.random() puede puntuar casi los mismos bits por símbolo que un token del CSPRNG, pero Math.random() es un PRNG con semilla cuyo estado se puede recuperar: un atacante que conozca su estado puede regenerar todas sus salidas. La idoneidad para material de clave depende de que el ORIGEN sea un CSPRNG impredecible y de que se extraigan suficientes bytes, así que la entropía medida es solo una comprobación de cordura.
¿Qué fue el fallo de OpenSSL en Debian de 2008?
Un cambio de 2008 en el OpenSSL de Debian eliminó la entropía que mezclaba el generador de claves, de modo que la única semilla variable era en la práctica el ID del proceso, unos 32.768 valores. Todas las claves de los sistemas afectados salían de ese pequeño conjunto, así que los atacantes podían precalcularlas y forzarlas todas, y se repetían claves idénticas entre máquinas. La lección: la fortaleza de una clave está limitada por la entropía de la semilla, no por la longitud de la clave. La solución es sembrar desde el CSPRNG del sistema operativo.
¿Cuándo está bien usar Math.random()?
Math.random() está bien siempre que un valor predecible no cause daño: el jitter de los reintentos, la temporización de animaciones, barajar una lista que no tiene que ver con la seguridad, el muestreo para telemetría. Está mal para cualquier cosa que un atacante gane adivinando: los tokens de sesión, las claves, los IV/nonces y los tokens de restablecimiento de contraseña y CSRF necesitan crypto.getRandomValues(). La prueba: si un atacante pudiera predecir este valor, ¿pierdes algo? Si la respuesta es sí, usa el CSPRNG.
¿Se envía algo de esto a un servidor?
No. El laboratorio se ejecuta por completo en el cliente y usa la implementación de Web Crypto integrada en tu navegador y cálculos locales. Los tokens generados y las mediciones se quedan en la página; tu mejor nota solo se guarda en el almacenamiento local de tu propio navegador.
¿Es gratis?
No, es un laboratorio Pro. Con una cuenta gratuita tienes 3 usos de prueba de herramientas Pro en total; después necesitas Pro.