Derivación de claves HKDF
Derivación de claves Extract-Expand basada en HMAC RFC 5869
Documentación de HKDF
HKDF (Función de derivación de claves Extract-and-Expand basada en HMAC) está definida en RFC 5869. Proporciona un método robusto para derivar claves criptográficas a partir de material de clave de entrada usando un proceso de dos etapas: Extracción y Expansión.
HKDF es ampliamente adoptado en protocolos de seguridad modernos incluyendo TLS 1.3, Signal Protocol, Noise Protocol Framework y SSH. Su clara separación de las fases de extracción y expansión lo hace particularmente adecuado para la derivación de jerarquías de claves.
Fase de extracción: HKDF-Extract(salt, IKM) → PRK
La fase de extracción concentra la entropía potencialmente dispersa del material de clave de entrada (IKM) en una clave pseudoaleatoria (PRK) de longitud fija:
- Toma sal (opcional, por defecto HashLen ceros) e IKM como entradas
- Calcula PRK = HMAC-Hash(sal, IKM)
- La longitud del PRK es igual a la longitud de salida del hash (32 bytes para SHA-256)
- La sal actúa como clave para HMAC, fortaleciendo la extracción
Fase de expansión: HKDF-Expand(PRK, info, L) → OKM
La fase de expansión estira el PRK en material de clave de salida (OKM) de la longitud deseada:
- Toma PRK, info (contexto/etiqueta) y longitud de salida deseada L
- Calcula iterativamente T(i) = HMAC-Hash(PRK, T(i-1) | info | contador)
- Concatena resultados: OKM = T(1) | T(2) | ... | T(N)
- La longitud máxima de salida es 255 × HashLen bytes
Casos de uso comunes
- Programación de claves TLS 1.3: derivación de secretos de tráfico, claves de handshake y claves de aplicación
- Signal Protocol: derivación de claves de cadena y claves de mensaje a partir de secretos compartidos
- Intercambio de claves SSH: derivación de claves de cifrado e integridad post-ECDH
- Jerarquía de claves: derivación de múltiples claves de propósito específico a partir de un secreto maestro
HKDF vs PBKDF2
| Característica | HKDF | PBKDF2 |
|---|---|---|
| Estándar | RFC 5869 | RFC 8018 |
| Tipo de entrada | Secretos compartidos, salidas DH | Contraseñas de usuario |
| Iteraciones | Pasada única | Muchas (10K-1M) |
| Velocidad | Rápido | Intencionalmente lento |
| Parámetro Info | Sí (enlace de contexto) | No |
| Caso de uso principal | Entrada de alta entropía | Contraseñas de baja entropía |
Consideraciones de seguridad
- HKDF asume que el IKM ya contiene suficiente entropía; no usar con contraseñas débiles
- El parámetro info debe identificar únicamente el uso previsto de la clave (separación de contexto)
- La sal es opcional pero recomendada para extraer múltiples claves del mismo IKM
- El PRK nunca debe usarse directamente; siempre use la fase de expansión para derivar las claves finales
Referencias técnicas
Herramientas Relacionadas
Derivación de Claves PBKDF2
Derive claves de cifrado seguras de contraseñas usando PBKDF2 con SHA-256/384/512, compatible con OWASP
Generador HMAC
Herramienta de generación HMAC en línea que soporta MD5, SHA-1, SHA-224, SHA-256, SHA-384, SHA-512, SHA3 y RIPEMD-160
Cifrado/Descifrado AES
Cifrar y descifrar texto de forma segura usando el algoritmo AES
Generador de hash SHA
Herramienta en línea de generación de hash SHA que soporta SHA-1, SHA-256, SHA-384, SHA-512