Skip to main content
CheckTown
Herramientas dev

HMAC: como funciona la autenticación basada en hash

Publicado 6 min de lectura
En este artículo

Que es HMAC?

HMAC (Hash-based Message Authentication Code) es un mecanismo criptográfico que combina una clave secreta con una función hash para producir un código de autenticación 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 verificación de webhooks de API. El algoritmo es resistente a ataques de extensión 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 tamaño del bloque de la función 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 construcción de doble hash previene ataques de extensión de longitud. Incluso si un atacante conoce H(mensaje), no puede calcular HMAC(clave, mensaje || datos_extra) sin la clave secreta.

Algoritmos HMAC

La construcción HMAC funciona con cualquier función hash criptográfica. Las opciones mas comunes son SHA-256, SHA-384 y SHA-512.

  • HMAC-SHA256 — salida de 256 bits, la variante mas utilizada para autenticación de API, firmas JWT HS256 y verificación de webhooks. Tamaño de clave recomendado: 32 bytes
  • HMAC-SHA384 — salida de 384 bits, usado en suites de cifrado TLS 1.3 y aplicaciones de alta seguridad. Tamaño de clave recomendado: 48 bytes
  • HMAC-SHA512 — salida de 512 bits, preferido cuando se necesita el maximo margen de seguridad. Tamaño de clave recomendado: 64 bytes

La clave debe ser al menos tan larga como la salida del hash. Para la mayoría 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 autenticación de API.

  • Autenticación 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 transmisión
  • OAuth 1.0a — el metodo de firma HMAC-SHA1 firma los parámetros de solicitud OAuth para demostrar autorización

HMAC vs otros metodos de autenticación

HMAC es uno de varios enfoques para la autenticación 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 rápido 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 falsificación 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 autenticación 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.

Herramientas relacionadas