Código de autenticación de mensaje (MAC)
¿Qué es Código de autenticación de mensaje (MAC)?
Código de autenticación de mensaje (MAC)Etiqueta corta de clave simétrica que autentica un mensaje y detecta manipulaciones, calculada y verificada con el mismo secreto compartido.
Un Message Authentication Code (MAC) es una etiqueta de longitud fija calculada sobre un mensaje usando una clave secreta simétrica, de modo que la verificación requiere la misma clave. Aporta integridad y autenticidad, pero no no repudio, porque ambas partes poseen la clave. Construcciones habituales son HMAC (basado en hash, RFC 2104), CMAC (CBC-MAC, NIST SP 800-38B), GMAC (usado en GCM), Poly1305 (combinado con ChaCha20 en ChaCha20-Poly1305, RFC 8439) y KMAC (construido sobre Keccak/SHA-3, NIST SP 800-185).
La razón por la que existe HMAC en lugar de un ingenuo MAC = H(key ‖ message) es que los hashes de tipo Merkle–Damgård como MD5, SHA-1 y SHA-256 son vulnerables a ataques de extensión de longitud: un atacante que conoce una etiqueta válida puede añadir datos y calcular una etiqueta válida para el mensaje más largo sin la clave. La estructura anidada H(key ⊕ opad ‖ H(key ⊕ ipad ‖ msg)) de HMAC frustra esto y cuenta con una demostración formal de seguridad.
Los MAC deben verificarse en tiempo constante: comparar las etiquetas byte a byte con retorno anticipado filtra su longitud a través del tiempo, lo que hizo posible la falsificación de 2009 contra Keyczar. Sostienen la autenticación de registros TLS, IPsec AH, JWT HS256, la firma de peticiones API y todos los modos AEAD. Se prefiere un MAC sobre el texto cifrado (encrypt-then-MAC) frente a MAC-then-encrypt, que contribuyó a ataques de oráculo de relleno como Lucky Thirteen.
flowchart LR
subgraph Emisor
M1[Mensaje] --> T1["MAC(key, message)"]
K1[Clave secreta compartida] --> T1
T1 --> S[Enviar mensaje + etiqueta]
end
subgraph Receptor
S --> R["Recalcular MAC(key, message)"]
K2[Clave secreta compartida] --> R
R --> C{"Comparación en tiempo<br/>constante con la etiqueta recibida"}
C -->|Iguales| OK[Aceptar: auténtico e intacto]
C -->|Difieren| NO[Rechazar: falsificado o alterado]
end● Ejemplos
- 01
HMAC-SHA-256 se usa para autenticar las peticiones de AWS Signature Version 4.
- 02
Poly1305 autentica el texto cifrado en el AEAD ChaCha20-Poly1305 utilizado por TLS 1.3.
● Preguntas frecuentes
¿Qué es Código de autenticación de mensaje (MAC)?
Etiqueta corta de clave simétrica que autentica un mensaje y detecta manipulaciones, calculada y verificada con el mismo secreto compartido. Pertenece a la categoría de Criptografía en ciberseguridad.
¿Qué significa Código de autenticación de mensaje (MAC)?
Etiqueta corta de clave simétrica que autentica un mensaje y detecta manipulaciones, calculada y verificada con el mismo secreto compartido.
¿Cómo defenderse de Código de autenticación de mensaje (MAC)?
Las defensas contra Código de autenticación de mensaje (MAC) combinan habitualmente controles técnicos y prácticas operativas, como se detalla en la definición.
¿Cuáles son otros nombres para Código de autenticación de mensaje (MAC)?
Nombres alternativos comunes: MAC, Suma de control criptográfica.