Tema 4
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.
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.
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ó.
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.
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.
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.
En este contexto suelen distinguirse dos grandes categorías:
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.
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:
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.
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.
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.
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.
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.
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.
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.
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.
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:
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.
| 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 |
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.