En este artículo
Que es HMAC?
HMAC (Hash-based Message Authentication Code) es un mecanismo criptografico que combina una clave secreta con una funcion hash para producir un codigo de autenticacion de mensaje. A diferencia de un hash simple, HMAC demuestra tanto la integridad como la autenticidad de un mensaje.
HMAC esta definido en RFC 2104 y se usa en TLS, IPsec, firmas JWT y verificacion de webhooks de API. El algoritmo es resistente a ataques de extension de longitud que afectan a funciones hash simples.
Como funciona HMAC
HMAC utiliza un enfoque de hash en dos pasadas con relleno interno y externo. La clave secreta se completa al tamano del bloque de la funcion hash y se combina con dos constantes diferentes.
- Hash interno — la clave se combina con ipad (0x36), se concatena con el mensaje y se hashea: H(K XOR ipad || mensaje)
- Hash externo — la clave se combina con opad (0x5C), se concatena con el resultado del hash interno: H(K XOR opad || inner_hash)
- Resultado final — el resultado del hash externo es el valor HMAC, representado como una cadena hexadecimal
Esta construccion de doble hash previene ataques de extension de longitud. Incluso si un atacante conoce H(mensaje), no puede calcular HMAC(clave, mensaje || datos_extra) sin la clave secreta.
Algoritmos HMAC
La construccion HMAC funciona con cualquier funcion hash criptografica. Las opciones mas comunes son SHA-256, SHA-384 y SHA-512.
- HMAC-SHA256 — salida de 256 bits, la variante mas utilizada para autenticacion de API, firmas JWT HS256 y verificacion de webhooks. Tamano de clave recomendado: 32 bytes
- HMAC-SHA384 — salida de 384 bits, usado en suites de cifrado TLS 1.3 y aplicaciones de alta seguridad. Tamano de clave recomendado: 48 bytes
- HMAC-SHA512 — salida de 512 bits, preferido cuando se necesita el maximo margen de seguridad. Tamano de clave recomendado: 64 bytes
La clave debe ser al menos tan larga como la salida del hash. Para la mayoria de aplicaciones, HMAC-SHA256 con una clave aleatoria de 32 bytes ofrece excelente seguridad.
Pruébalo gratis — sin registro
Generar firmas HMAC →Casos de uso comunes
HMAC es la base de muchos protocolos de seguridad y esquemas de autenticacion de API.
- Autenticacion de API — servicios como Stripe, GitHub y AWS usan firmas HMAC para verificar cargas de webhooks
- Firma JWT — los algoritmos HS256, HS384 y HS512 usan HMAC para firmar la carga del token
- Integridad de mensajes — HMAC verifica que los datos no fueron alterados durante la transmision
- OAuth 1.0a — el metodo de firma HMAC-SHA1 firma los parametros de solicitud OAuth para demostrar autorizacion
HMAC vs otros metodos de autenticacion
HMAC es uno de varios enfoques para la autenticacion de mensajes. Cada uno tiene diferentes compromisos en seguridad, rendimiento y gestion de claves.
- HMAC vs firmas digitales — HMAC usa una clave secreta compartida (simetrica), las firmas digitales usan pares de claves (asimetrica). HMAC es mas rapido pero requiere compartir el secreto.
- HMAC vs claves de API — las claves de API son tokens portador simples. HMAC firma el contenido de la solicitud, evitando la falsificacion de nuevas solicitudes.
- HMAC vs hash simple — el hash demuestra integridad pero no autenticidad. HMAC requiere la clave secreta.
Preguntas frecuentes
Cual es la longitud ideal de clave HMAC?
La clave debe ser al menos tan larga como la salida del hash — 32 bytes para HMAC-SHA256, 48 para HMAC-SHA384, 64 para HMAC-SHA512. Claves mas cortas debilitan la seguridad.
Es HMAC lo mismo que cifrado?
No. HMAC proporciona autenticacion e integridad, no confidencialidad. El mensaje sigue siendo legible. Use cifrado (AES, ChaCha20) ademas de HMAC para ocultar el contenido.
Puedo usar HMAC en el navegador con la Web Crypto API?
Si. La Web Crypto API soporta HMAC nativamente via crypto.subtle.importKey() y crypto.subtle.sign(). Puede generar firmas HMAC completamente del lado del cliente.