Tema 16

16. MAC y HMAC: autenticación de mensajes e integridad con claves compartidas

Verificar que un mensaje no fue alterado es importante, pero en muchos sistemas no alcanza con integridad: también hace falta comprobar que el mensaje proviene de quien posee una clave válida. Los MAC y HMAC resuelven exactamente ese problema en entornos de clave compartida, combinando integridad y autenticidad de manera eficiente.

Objetivo Entender cómo se autentican mensajes con clave compartida
Enfoque Conceptual, práctico y comparativo
Resultado Distinguir hash, MAC, HMAC y firma digital

16.1 Introducción

Hasta aquí vimos funciones hash, que sirven para resumir información y detectar cambios, y también firmas digitales, que permiten verificar autoría con criptografía asimétrica. Entre ambos extremos hay otro mecanismo muy importante: los códigos de autenticación de mensajes, o MAC.

Un MAC permite que dos partes que comparten una clave secreta verifiquen no solo que un mensaje no fue modificado, sino también que fue generado por alguien que conoce esa clave. Esto lo vuelve una herramienta central en protocolos, APIs, sesiones seguras y múltiples esquemas simétricos.

16.2 Qué es un MAC

MAC significa Message Authentication Code. Es un valor corto calculado a partir de un mensaje y una clave secreta compartida. El receptor, que conoce la misma clave, puede recalcular el MAC y comprobar si coincide.

Si coincide, el sistema concluye dos cosas:

  • El mensaje no fue alterado desde que se generó el MAC.
  • Quien generó el MAC conocía la clave secreta.

16.3 Qué propiedades aporta un MAC

Un MAC está pensado para ofrecer:

  • Integridad: detectar si el mensaje fue modificado.
  • Autenticidad en clave compartida: probar que el emisor conocía la clave secreta.

No aporta no repudio en el sentido fuerte de las firmas digitales, porque ambas partes comparten la misma clave y cualquiera de ellas podría haber generado el código.

16.4 Hash simple versus MAC

Esta diferencia es crucial. Un hash simple de un mensaje puede ser calculado por cualquiera, porque no requiere secreto. Por lo tanto, un atacante que modifique el mensaje también puede recalcular el hash correspondiente.

Un MAC, en cambio, incorpora una clave secreta. Si el atacante no conoce esa clave, no debería poder generar un nuevo MAC válido para el mensaje alterado.

Un hash detecta cambios solo si el valor de referencia es confiable. Un MAC impide además que un atacante fabrique libremente una nueva referencia válida.

16.5 MAC versus firma digital

También es importante diferenciar MAC de firma digital. Ambos pueden servir para autenticidad e integridad, pero operan bajo modelos distintos.

Aspecto MAC/HMAC Firma digital
Tipo de clave Compartida Pública/privada
Integridad
Autenticidad Sí, entre partes que comparten secreto Sí, verificable públicamente
No repudio No Sí, en el modelo adecuado
Rendimiento Muy alto Menor

16.6 Qué es HMAC

HMAC significa Hash-based Message Authentication Code. Es una construcción específica que usa una función hash criptográfica junto con una clave secreta para producir un MAC robusto.

La gran ventaja de HMAC es que permite aprovechar funciones hash bien estudiadas como SHA-256 o SHA-512, pero de una manera diseñada cuidadosamente para autenticación con clave. No consiste simplemente en "agregar una clave al hash" de forma ingenua.

16.7 Por qué no basta con hacer hash(clave || mensaje)

Una idea intuitiva pero peligrosa sería concatenar una clave al mensaje y aplicar un hash normal. Sin embargo, ese tipo de diseño casero puede sufrir debilidades según la función usada y la forma exacta de combinación.

HMAC existe justamente para evitar esas construcciones improvisadas y ofrecer una fórmula estandarizada, analizada y robusta.

16.8 Cómo funciona HMAC a alto nivel

Sin entrar en todos los detalles internos, HMAC combina la clave con dos constantes estructurales distintas y aplica la función hash en dos capas. Ese diseño evita problemas que podrían aparecer con combinaciones más simples.

Lo importante a nivel conceptual es que HMAC transforma una función hash en un mecanismo de autenticación con clave compartida que resiste mejor ciertos ataques estructurales.

16.9 Por qué HMAC es tan usado

HMAC es muy popular porque ofrece una combinación atractiva:

  • Está bien estandarizado.
  • Es eficiente.
  • Se apoya en funciones hash ampliamente disponibles.
  • Es adecuado para múltiples protocolos y sistemas.
  • Funciona muy bien en modelos de clave compartida.

16.10 Qué función hash usar con HMAC

La seguridad de HMAC depende en parte de la función hash subyacente, pero no exactamente del mismo modo que un uso simple de la función hash. En práctica moderna suelen usarse HMAC-SHA-256 o HMAC-SHA-512. También existen variantes con SHA-1 históricas, aunque hoy no se recomiendan para nuevos sistemas.

Como regla general, conviene elegir una función hash vigente y robusta, como las familias SHA-2 o SHA-3 cuando corresponda.

16.11 Integridad y autenticidad en APIs

Un uso muy común de HMAC aparece en APIs, webhooks y protocolos donde dos sistemas comparten un secreto. El emisor calcula un HMAC sobre el contenido o sobre una parte bien definida de la solicitud, y el receptor recalcula ese mismo valor para verificar que la petición no fue manipulada.

Esto ayuda a detectar alteraciones y a confirmar que el mensaje proviene de una parte autorizada.

16.12 HMAC y protección contra replay

Un HMAC por sí solo no evita necesariamente ataques de replay, donde un atacante reenvía un mensaje válido antiguo. Para mitigar ese problema, el diseño suele incorporar timestamp, nonce, contador o identificadores únicos dentro de los datos autenticados.

Así, aunque el HMAC sea válido, el sistema puede detectar que el mensaje no corresponde a una operación nueva.

16.13 HMAC y cifrado

Un error común es pensar que HMAC cifra. No cifra nada. El mensaje puede seguir siendo completamente visible. Lo que HMAC protege es su integridad y su origen dentro de un contexto de clave compartida.

En sistemas reales, muchas veces se combina cifrado para confidencialidad con HMAC para integridad y autenticación.

16.14 MACs basados en bloque y HMAC

No todos los MAC dependen de funciones hash. Existen también MACs construidos a partir de cifrados por bloques, como CMAC. Sin embargo, HMAC es una de las construcciones más extendidas y didácticas porque se apoya en hashes que ya estudiamos.

Entender HMAC ayuda a comprender el principio general: autenticación con clave compartida sobre mensajes potencialmente visibles.

16.15 Gestión de claves en MAC y HMAC

La clave secreta usada en un MAC o HMAC es crítica. Si se filtra, un atacante puede generar códigos válidos para mensajes arbitrarios. Por eso la seguridad del mecanismo no depende solo del algoritmo, sino también de:

  • Generación adecuada de la clave.
  • Almacenamiento seguro.
  • Rotación cuando corresponde.
  • Separación de claves por entorno o propósito.

16.16 Comparación entre hash, HMAC y firma

Mecanismo Usa clave Verifica integridad Verifica autenticidad No repudio
Hash simple No Sí, si la referencia es confiable No No
HMAC Sí, compartida Sí, entre quienes comparten el secreto No
Firma digital Sí, privada/pública Sí, en el modelo adecuado

16.17 Errores frecuentes

  • Usar un hash simple donde en realidad se necesita autenticación con clave.
  • Inventar esquemas caseros como hash(clave || mensaje) sin una construcción robusta.
  • Reutilizar la misma clave HMAC para demasiados fines distintos.
  • No incluir en el mensaje autenticado campos relevantes como nonce, timestamp o contexto.
  • Creer que HMAC aporta confidencialidad.

16.18 Usos reales de HMAC

HMAC aparece en muchísimos sistemas reales:

  • Autenticación de solicitudes en APIs.
  • Webhooks firmados con secreto compartido.
  • Protocolos de autenticación de mensajes.
  • Derivación de claves en algunos esquemas y protocolos.
  • Componentes internos de estándares de seguridad ampliamente adoptados.

16.19 Buenas prácticas

  • Usar HMAC con funciones hash vigentes como SHA-256 o SHA-512.
  • No improvisar construcciones MAC caseras.
  • Separar claves por uso y por entorno.
  • Autenticar exactamente los datos relevantes y en un formato bien definido.
  • Agregar protección contra replay cuando el protocolo lo necesite.

16.20 Qué debes recordar de este tema

  • Un MAC permite verificar integridad y autenticidad de mensajes en un modelo de clave compartida.
  • Un hash simple no basta cuando el atacante puede recalcularlo libremente.
  • HMAC es una construcción estándar y robusta basada en funciones hash y una clave secreta.
  • HMAC no cifra ni aporta no repudio.
  • La seguridad depende del algoritmo, de la clave compartida y del diseño correcto del protocolo.
  • MAC/HMAC y firma digital resuelven problemas relacionados, pero no equivalentes.

16.21 Conclusión

MAC y HMAC ocupan un lugar clave entre el hash simple y la firma digital: permiten verificar integridad y autenticidad de mensajes cuando dos partes comparten un secreto, con muy buen rendimiento y amplia aplicabilidad práctica.

En el próximo tema estudiaremos firmas digitales, certificados y PKI, para pasar del modelo de autenticación con secreto compartido al modelo de confianza pública y validación de identidades.