HMAC
HMAC es un código de autenticación de mensaje con clave construido a partir de una función hash criptográfica.
Definición
HMAC significa Hash-based Message Authentication Code. Combina una clave secreta con una función hash criptográfica para producir una etiqueta de autenticación de tamaño fijo para un mensaje.
Un verificador con la misma clave secreta recalcula la etiqueta sobre los bytes exactos del mensaje y la compara con la etiqueta recibida. Una coincidencia muestra que el mensaje no cambió y que la etiqueta fue creada por alguien que conocía la clave compartida.
Cómo funciona
HMAC aplica hash a la clave y al mensaje en dos pasos anidados con constantes de relleno distintas. Esta construcción es más segura que calcular simplemente hash(key || message), que puede ser vulnerable con algunas funciones hash.
La función hash elegida determina el tamaño de la etiqueta: HMAC-SHA256 produce 32 bytes, normalmente escritos como 64 caracteres hexadecimales. HMAC-SHA512 y HMAC-SHA384 producen etiquetas más largas, mientras que HMAC-SHA1 queda sobre todo por compatibilidad.
Uso y límites
HMAC se usa en firmas de API, webhooks, datos de sesión, JWT HS256 y mensajes de protocolo cuando ambas partes ya comparten un secreto. Proporciona integridad y autenticación, no confidencialidad: el mensaje no queda oculto.
Usa una clave secreta aleatoria, conserva los bytes exactos que se firman y compara etiquetas con una comparación de tiempo constante en el código de la aplicación. Para verificación pública sin secreto compartido, usa una firma digital.
No. HMAC autentica un mensaje, pero no lo oculta. Usa cifrado por separado cuando el mensaje deba ser confidencial.
Un hash normal no tiene clave secreta, así que cualquiera puede cambiar el mensaje y calcular un hash nuevo. HMAC requiere el secreto compartido para crear una etiqueta válida.
No. La verificación recalcula la etiqueta a partir del mensaje original y la clave secreta; no recupera ninguno de esos valores desde la etiqueta.