Código de autenticación de mensajes (MAC)
Organiza tus páginas con colecciones
Guarda y categoriza el contenido según tus preferencias.
La primitiva MAC te permite verificar que nadie haya manipulado tus datos.
Un remitente que comparte una clave simétrica con un destinatario puede calcular una etiqueta de autenticación para un mensaje determinado, lo que permite que el destinatario verifique que un mensaje provenga del remitente esperado y no se haya modificado.
MAC tiene las siguientes propiedades:
- Autenticidad: Conocer la clave es la única forma de crear una etiqueta MAC verificable.
- Symmetric: El procesamiento y la verificación de la etiqueta requieren la misma clave.
La MAC puede ser determinista o aleatoria, según el algoritmo. Por el momento, Tink no implementa algoritmos de MAC no deterministas. Debes usar MAC solo para la autenticación de mensajes, no para otros fines, como la generación de bytes pseudoaleatorios (para ello, consulta PRF).
Si, en cambio, necesitas una primitiva asimétrica, consulta Firma digital.
Elige un tipo de clave
Recomendamos usar HMAC_SHA256 para la mayoría de los usos, pero también hay otras opciones.
En general, se cumple lo siguiente:
Garantías de seguridad mínimas
- Seguridad de la autenticación de al menos 80 bits
- Protección contra la falsificación existencial en un ataque de texto simple elegido
- Seguridad de al menos 128 bits contra ataques de recuperación de claves y también en situaciones de varios usuarios (cuando un atacante no se orienta a una clave específica, sino a cualquier clave de un conjunto de hasta 232 claves)
Ejemplo de caso de uso
Consulta Quiero proteger los datos contra la manipulación.
Salvo que se indique lo contrario, el contenido de esta página está sujeto a la licencia Atribución 4.0 de Creative Commons, y los ejemplos de código están sujetos a la licencia Apache 2.0. Para obtener más información, consulta las políticas del sitio de Google Developers. Java es una marca registrada de Oracle o sus afiliados.
Última actualización: 2025-07-25 (UTC)
[null,null,["Última actualización: 2025-07-25 (UTC)"],[[["\u003cp\u003eThe Message Authentication Code (MAC) primitive, using a shared symmetric key, enables verification of data integrity and authenticity by generating an authentication tag.\u003c/p\u003e\n"],["\u003cp\u003eMAC ensures authenticity as only the key holder can create a verifiable tag, and it's symmetric, requiring the same key for both computation and verification.\u003c/p\u003e\n"],["\u003cp\u003eTink recommends HMAC_SHA256 for most use cases, while HMAC_SHA512 offers higher security and AES256_CMAC might provide better performance with specific hardware.\u003c/p\u003e\n"],["\u003cp\u003eTink's MAC implementation guarantees a minimum of 80-bit authentication strength, protection against forgery, and at least 128-bit security against key recovery attacks, even in multi-user environments.\u003c/p\u003e\n"]]],["MAC uses a shared symmetric key between sender and recipient to verify message authenticity and integrity. The sender computes an authentication tag for a message, which the recipient uses to confirm its origin and unaltered state. MAC guarantees authenticity, where only key holders can create verifiable tags. Key recommendations include HMAC_SHA256, HMAC_SHA512 (most conservative), and AES256_CMAC (fastest with AES-NI). MAC is designed solely for message authentication, offering a minimum of 80-bit authentication strength.\n"],null,["# Message Authentication Code (MAC)\n\nThe MAC primitive lets you to verify that no one has tampered with your data.\nA sender sharing a *symmetric key* with a recipient can compute an\n*authentication tag* for a given message, which allows the recipient to verify\nthat a message is from the expected sender and has not been modified.\n\nMAC has the following properties:\n\n- **Authenticity**: Knowing the key is the only way to create a verifiable MAC tag.\n- **Symmetric**: Computing and verifying the tag requires the same key.\n\nMAC can be deterministic or randomized, depending on the algorithm. Tink does\nnot implement non-deterministic MAC algorithms at the moment. You should use MAC\nonly for message authentication, not for other purposes like generation of\npseudorandom bytes (for that, see [PRF](/tink/prf)).\n\nIf you need an asymmetric primitive instead, see [Digital\nSignature](/tink/digital-signature).\n\n### Choose a key type\n\nWe recommend using **HMAC_SHA256** for most uses, but there are other options as\nwell.\n\nIn general, the following holds true:\n\n- HMAC_SHA512 may or may not be faster depending on your message size and the specifics of the hardware you use.\n- HMAC_SHA512 is the most conservative mode that can be used for practically unlimited number of messages.\n- AES256_CMAC is fastest on systems that support the [AES-NI](https://www.intel.com/content/www/us/en/developer/articles/technical/advanced-encryption-standard-instructions-aes-ni.html) hardware\n acceleration.\n\n | **Note:** Tink doesn't offer AES128_CMAC because it doesn't offer 128-bit security in multi-user scenarios.\n\n### Minimal security guarantees\n\n- At least 80-bit authentication strength\n- Secure against existential forgery under chosen plaintext attack\n- At least 128-bit security against key recovery attacks, and also in multi-user scenarios (when an attacker is not targeting a specific key, but any key from a set of up to 2^32^ keys)\n\n### Example use case\n\nSee [I want to protect data from tampering](/tink/protect-data-from-tampering)."]]