Tema 4

4. Generación de aleatoriedad, entropía y números pseudoaleatorios criptográficamente seguros

En criptografía, una clave fuerte no depende solo del algoritmo elegido, sino de cómo se genera. Si la aleatoriedad es pobre, predecible o reutilizada, el sistema puede fallar aunque use estándares modernos. Este tema estudia la base invisible que sostiene claves, nonces, IV, semillas y secretos temporales.

Objetivo Comprender cómo se genera aleatoriedad segura
Enfoque Conceptual, práctico y orientado a riesgos reales
Resultado Entender por qué la calidad de los números aleatorios importa

4.1 Introducción

La mayoría de las personas asocia la seguridad criptográfica con algoritmos como AES, RSA o SHA-256. Sin embargo, muchos incidentes graves no aparecen porque el algoritmo sea débil, sino porque las claves, semillas o parámetros aleatorios se generaron de manera pobre. Un sistema criptográfico excelente puede quedar completamente comprometido si sus números aleatorios son previsibles.

La aleatoriedad es necesaria para producir claves secretas, vectores de inicialización, nonces, sales, desafíos de autenticación y materiales efímeros de intercambio. Si esos valores pueden anticiparse, repetirse o reconstruirse, un atacante gana ventajas decisivas.

4.2 Qué significa aleatoriedad en criptografía

En lenguaje cotidiano, algo aleatorio es simplemente algo que parece no seguir un patrón evidente. En criptografía, esa definición es insuficiente. No alcanza con que un número "se vea desordenado". Debe ser impredecible para un atacante con conocimiento del sistema, observación parcial e incluso acceso a salidas anteriores.

Por eso la criptografía exige una noción más fuerte de aleatoriedad: no solo variabilidad aparente, sino resistencia a predicción. Un valor aleatorio útil criptográficamente debe dificultar que un tercero adivine valores futuros o reconstruya el estado interno que los generó.

4.3 Entropía

La entropía es una medida del grado de incertidumbre o sorpresa que contiene una fuente. Cuanta más entropía haya, menos predecible será el resultado. En términos prácticos, la entropía expresa cuánta información real aporta un proceso aleatorio.

Por ejemplo, si una clave de 128 bits se genera realmente al azar, un atacante tendría que enfrentarse a un espacio de búsqueda inmenso. Pero si esos bits provienen de un generador débil, de una semilla corta o de valores previsibles como fechas u horas, la entropía efectiva puede ser muchísimo menor.

No importa solo el largo visible de una clave. Importa cuánta incertidumbre real contiene.

4.4 Apariencia aleatoria versus imprevisibilidad

Un error común es confundir apariencia caótica con seguridad. Muchos generadores producen secuencias que parecen desordenadas a simple vista, pero en realidad son totalmente reproducibles si se conoce el estado interno o la semilla.

Esto ocurre con generadores pseudoaleatorios comunes usados en simulaciones, videojuegos o aplicaciones no criptográficas. Pueden ser útiles para mezclar elementos o producir valores variados, pero no sirven para generar claves o tokens sensibles porque su comportamiento es predecible bajo análisis adecuado.

4.5 Fuentes de aleatoriedad del mundo físico

Una forma de obtener entropía es observar fenómenos físicos difíciles de predecir con precisión. Entre ellos pueden incluirse variaciones térmicas, ruido eléctrico, jitter de reloj, tiempos entre eventos de hardware o características imprevisibles del entorno.

Estas fuentes se usan para alimentar sistemas de generación de números aleatorios verdaderos o para sembrar generadores criptográficos. La idea no es que el fenómeno físico produzca directamente todas las salidas finales, sino que aporte incertidumbre genuina al sistema.

4.6 TRNG y PRNG

En este contexto suelen distinguirse dos grandes categorías:

  • TRNG: True Random Number Generator. Usa fenómenos físicos para obtener aleatoriedad real.
  • PRNG: Pseudo Random Number Generator. Produce secuencias mediante un algoritmo determinista a partir de un estado inicial.

Los TRNG aportan entropía real, pero pueden ser más lentos o costosos. Los PRNG son rápidos y prácticos, pero por sí solos dependen completamente de la calidad de la semilla y del diseño del algoritmo.

4.7 Qué es un CSPRNG

Un CSPRNG es un generador pseudoaleatorio criptográficamente seguro. Es decir, un PRNG diseñado específicamente para resistir ataques de predicción y reconstrucción del estado interno.

Un CSPRNG adecuado debe cumplir propiedades más fuertes que un generador general:

  • Las salidas deben ser indistinguibles de una secuencia verdaderamente aleatoria para un adversario práctico.
  • Conocer parte de la salida no debe permitir predecir fácilmente salidas futuras.
  • Idealmente, comprometer el estado actual no debería revelar todo el pasado ni todo el futuro si existen mecanismos de reseed.

En criptografía aplicada, cuando se necesita aleatoriedad, normalmente lo correcto es usar la API segura del sistema operativo o una biblioteca seria apoyada en un CSPRNG robusto.

4.8 La importancia de la semilla

Todo generador pseudoaleatorio necesita un estado inicial o semilla. Si esa semilla es predecible, el generador entero puede quedar comprometido. Por ejemplo, usar solo la hora actual, el identificador del proceso o valores fácilmente observables como semilla es una mala práctica grave.

La semilla debe provenir de una fuente con suficiente entropía. En implementaciones modernas, normalmente el sistema operativo recolecta múltiples eventos del entorno y los mezcla para construir un pool de entropía desde el cual alimentar generadores seguros.

4.9 Pool de entropía

Un pool de entropía es una reserva interna donde el sistema acumula datos provenientes de distintas fuentes de incertidumbre. Esos datos no se usan de forma cruda, sino que suelen mezclarse y procesarse para alimentar un generador seguro.

Este enfoque es importante porque las fuentes físicas pueden ser lentas, ruidosas o irregulares. En lugar de depender de una sola fuente directa, el sistema combina varias y construye una base más confiable para producir aleatoriedad criptográfica a demanda.

4.10 Recolección de entropía en sistemas reales

Los sistemas operativos modernos suelen recoger eventos como actividad de dispositivos, tiempos de interrupciones, variaciones de hardware y otros datos ambientales. Luego usan funciones de mezcla y CSPRNG internos para exponer APIs seguras a las aplicaciones.

Por eso, en la mayoría de los casos, un desarrollador no debería inventar su propio mecanismo de aleatoriedad. La práctica correcta es apoyarse en interfaces del sistema especialmente diseñadas para eso.

Generar "aleatorios" con funciones no criptográficas o con lógica casera es una de las formas más comunes de arruinar un sistema seguro.

4.11 Nonces

Un nonce es un valor que se usa una sola vez dentro de un protocolo o operación. Su función depende del contexto: evitar repeticiones, impedir ataques de replay, diferenciar mensajes o parametrizar algoritmos de cifrado.

No siempre necesita ser secreto, pero sí debe cumplir la propiedad que el algoritmo requiere: unicidad, imprevisibilidad o ambas. Si un nonce se reutiliza donde no debería, pueden aparecer fallas muy graves, incluso aunque la clave permanezca secreta.

4.12 IV o vector de inicialización

El IV, vector de inicialización, es un valor adicional usado en varios modos de cifrado para que dos mensajes iguales no produzcan necesariamente el mismo resultado cifrado. Esto ayuda a romper patrones y a evitar filtraciones estructurales.

Según el esquema, el IV puede necesitar ser aleatorio, único o ambas cosas. Una confusión frecuente es pensar que, como no siempre es secreto, puede elegirse sin cuidado. En realidad, reutilizar o predecir un IV en contextos inadecuados puede debilitar seriamente la seguridad.

4.13 Sales en hashing de contraseñas

En el almacenamiento seguro de contraseñas, una sal es un valor aleatorio que se combina con la contraseña antes de aplicar el algoritmo de hash o derivación. Su objetivo principal es evitar que dos usuarios con la misma contraseña tengan la misma salida y dificultar ataques masivos con tablas precalculadas.

La sal no tiene que ser secreta, pero sí debe ser suficientemente aleatoria y distinta por registro. Si las sales se repiten o son muy predecibles, se pierde parte de la protección buscada.

4.14 Claves efímeras

Muchos protocolos modernos generan claves temporales para cada sesión o intercambio. Estas claves efímeras mejoran la seguridad porque limitan el impacto de una eventual exposición posterior. Para que funcionen correctamente, necesitan aleatoriedad de alta calidad en cada ejecución.

Si las claves efímeras se repiten o provienen de un generador defectuoso, el protocolo puede quedar debilitado o directamente roto.

4.15 Qué puede salir mal con mala aleatoriedad

Los problemas asociados a mala aleatoriedad son especialmente peligrosos porque suelen ser invisibles hasta que ocurre un incidente o una auditoría profunda. Algunos ejemplos típicos son:

  • Claves secretas predecibles.
  • Tokens de sesión adivinables.
  • Reutilización de nonces o IV.
  • Colisión de valores temporales en protocolos.
  • Firmas digitales vulnerables por elección defectuosa de parámetros aleatorios.

4.16 Casos históricos y lecciones reales

La historia de la seguridad ofrece múltiples ejemplos donde la criptografía no falló por su diseño teórico, sino por mala generación de números aleatorios. En algunos casos se reutilizaron nonces en firmas digitales; en otros, dispositivos embebidos generaban claves desde semillas muy pobres o predecibles; en otros, bibliotecas inicializaban mal su estado de entropía.

La lección común es contundente: la aleatoriedad no es un detalle auxiliar, sino una dependencia crítica del sistema criptográfico.

4.17 Comparación entre generadores

Tipo Base Ventaja Riesgo
TRNG Fenómenos físicos Aporta entropía real Puede ser lento o difícil de validar
PRNG común Algoritmo determinista Rápido y simple Predecible para usos criptográficos
CSPRNG Algoritmo diseñado para seguridad Rápido y resistente a predicción Depende de buena semilla y correcta implementación

4.18 Buenas prácticas

  • Usar siempre APIs criptográficas del sistema o bibliotecas confiables.
  • No usar generadores de propósito general para claves, tokens o secretos.
  • No construir semillas manuales con hora, fecha o datos observables.
  • Entender si el algoritmo requiere aleatoriedad, unicidad o ambas.
  • Evitar reutilizar nonces, IV o parámetros efímeros.
  • Permitir reseed o actualización del estado cuando el diseño lo contemple.

4.19 Errores frecuentes

  • Suponer que cualquier valor variable sirve como aleatorio.
  • Usar `rand()` o equivalentes no criptográficos para secretos.
  • Reutilizar el mismo IV por comodidad o depuración.
  • Ignorar el estado inicial de dispositivos recién encendidos con poca entropía.
  • Confundir secreto con aleatoriedad: un valor puede ser secreto y aun así muy predecible.

4.20 Qué debes recordar de este tema

  • La calidad de la aleatoriedad es una dependencia crítica de la seguridad criptográfica.
  • La entropía mide incertidumbre real, no simple apariencia de desorden.
  • Un CSPRNG es el tipo de generador adecuado para fines criptográficos.
  • Semillas débiles o predecibles comprometen todo el generador.
  • Nonces, IV, sales y claves efímeras deben cumplir las propiedades específicas que el protocolo exige.
  • La práctica correcta es usar APIs seguras del sistema y no inventar mecanismos propios.

4.21 Conclusión

La aleatoriedad es uno de los cimientos menos visibles y más importantes de la criptografía. Sin ella, las claves dejan de ser realmente secretas, los protocolos pierden robustez y las garantías matemáticas de los algoritmos se derrumban en la práctica.

En el próximo tema estudiaremos la criptografía simétrica como modelo general, viendo cómo se usan claves secretas compartidas y qué propiedades de seguridad se esperan de estos esquemas.