En criptografía , un código de autenticación de mensaje ( MAC ), a veces conocido como etiqueta de autenticación , es un breve fragmento de información que se utiliza para autenticar y verificar la integridad de un mensaje. Es decir, confirmar que el mensaje proviene del remitente indicado (su autenticidad) y no ha sido modificado (su integridad). El valor MAC permite a los verificadores (que también poseen una clave secreta) detectar cualquier cambio en el contenido del mensaje.
El término código de integridad de mensajes ( MIC ) se sustituye frecuentemente por el término MAC , especialmente en comunicaciones [1] para distinguirlo del uso de este último como dirección de control de acceso al medio ( dirección MAC ). Sin embargo, algunos autores [2] utilizan MIC para referirse a un resumen de mensaje , cuyo único objetivo es identificar de forma única pero opaca un único mensaje. RFC 4949 recomienda evitar el término código de integridad de mensajes (MIC) y, en su lugar, utilizar suma de comprobación , código de detección de errores , hash , hash con clave , código de autenticación de mensajes o suma de comprobación protegida .
De manera informal, un sistema de código de autenticación de mensajes consta de tres algoritmos:
Un código de autenticación de mensajes seguro debe resistir los intentos de un adversario de falsificar etiquetas, para mensajes arbitrarios, seleccionados o todos , incluso en condiciones de mensaje conocido o elegido . Debería ser computacionalmente inviable calcular una etiqueta válida del mensaje dado sin conocer la clave, incluso si, en el peor de los casos, asumimos que el adversario conoce la etiqueta de cualquier mensaje excepto el en cuestión. [3]
Formalmente, un sistema de código de autenticación de mensajes ( MAC ) es un triple de algoritmos [4] eficientes ( G , S , V ) que satisfacen:
S y V deben cumplir lo siguiente:
Un MAC es infalsificable si por cada adversario eficiente A
donde A S ( k , · ) denota que A tiene acceso al oráculo S ( k , · ), y Query( A S ( k , · ) , 1 n ) denota el conjunto de consultas sobre S realizadas por A , que sabe n . Claramente requerimos que cualquier adversario no pueda consultar directamente la cadena x en S , ya que de lo contrario ese adversario puede obtener fácilmente una etiqueta válida. [6]
Si bien las funciones MAC son similares a las funciones hash criptográficas , poseen requisitos de seguridad diferentes. Para ser considerada segura, una función MAC debe resistir la falsificación existencial bajo ataques de mensajes elegidos . Esto significa que incluso si un atacante tiene acceso a un Oracle que posee la clave secreta y genera MAC para los mensajes que elija el atacante, el atacante no puede adivinar la MAC de otros mensajes (que no se usaron para consultar el Oracle) sin realizar cantidades inviables. de computación.
Las MAC se diferencian de las firmas digitales en que los valores MAC se generan y verifican utilizando la misma clave secreta. Esto implica que el remitente y el receptor de un mensaje deben acordar la misma clave antes de iniciar las comunicaciones, como ocurre con el cifrado simétrico . Por la misma razón, las MAC no proporcionan la propiedad de no repudio que ofrecen las firmas específicamente en el caso de una clave secreta compartida en toda la red : cualquier usuario que pueda verificar una MAC también es capaz de generar MAC para otros mensajes. Por el contrario, una firma digital se genera utilizando la clave privada de un par de claves, que es la criptografía de clave pública. [4] Dado que esta clave privada sólo es accesible para su titular, una firma digital demuestra que un documento fue firmado nada menos que por ese titular. Por tanto, las firmas digitales ofrecen no repudio. Sin embargo, el no repudio puede ser proporcionado por sistemas que vinculen de forma segura la información de uso de la clave a la clave MAC; la misma clave está en posesión de dos personas, pero una tiene una copia de la clave que puede usarse para la generación de MAC, mientras que la otra tiene una copia de la clave en un módulo de seguridad de hardware que solo permite la verificación de MAC. Esto se hace comúnmente en la industria financiera. [ cita necesaria ]
Los algoritmos MAC se pueden construir a partir de otras primitivas criptográficas, como funciones hash criptográficas (como en el caso de HMAC ) o a partir de algoritmos de cifrado de bloques ( OMAC , CCM , GCM y PMAC ). Sin embargo, muchos de los algoritmos MAC más rápidos, como UMAC - VMAC y Poly1305-AES , se construyen basándose en hash universal . [7]
Los algoritmos hash con clave intrínseca, como SipHash , también son MAC por definición; pueden ser incluso más rápidos que los MAC basados en hash universal. [8]
Además, el algoritmo MAC puede combinar deliberadamente dos o más primitivas criptográficas, para mantener la protección incluso si más tarde se descubre que una de ellas es vulnerable. Por ejemplo, en Transport Layer Security (TLS), los datos de entrada se dividen en mitades, cada una de las cuales se procesa con una primitiva de hash diferente ( SHA-1 y SHA-2 ) y luego se realizan XOR juntas para generar la MAC.
El hash universal y, en particular , las funciones hash independientes por pares proporcionan un código de autenticación de mensaje seguro siempre que la clave se utilice como máximo una vez. Esto puede verse como el bloc de autenticación de un solo uso . [9]
La función hash independiente por pares más simple se define mediante la clave aleatoria, clave = ( a , b ) , y la etiqueta MAC para un mensaje m se calcula como etiqueta = ( am + b ) mod p , donde p es primo.
De manera más general, k funciones hash independientes proporcionan un código de autenticación de mensaje seguro siempre que la clave se use menos de k veces para k funciones hash independientes.
Los códigos de autenticación de mensajes y la autenticación del origen de los datos también se han analizado en el marco de la criptografía cuántica. A diferencia de otras tareas criptográficas, como la distribución de claves, para una clase bastante amplia de MAC cuánticos se ha demostrado que los recursos cuánticos no ofrecen ninguna ventaja sobre los MAC clásicos de un solo uso incondicionalmente seguros. [10]
Existen varios estándares que definen los algoritmos MAC. Éstas incluyen:
ISO/IEC 9797-1 y -2 definen modelos y algoritmos genéricos que se pueden utilizar con cualquier cifrado de bloque o función hash, y una variedad de parámetros diferentes. Estos modelos y parámetros permiten definir algoritmos más específicos nominando los parámetros. Por ejemplo, el algoritmo FIPS PUB 113 es funcionalmente equivalente al algoritmo MAC 1 de ISO/IEC 9797-1 con el método de relleno 1 y un algoritmo de cifrado de bloques de DES.
[19] En este ejemplo, el remitente de un mensaje lo ejecuta a través de un algoritmo MAC para producir una etiqueta de datos MAC. Luego, el mensaje y la etiqueta MAC se envían al receptor. El receptor, a su vez, ejecuta la parte del mensaje de la transmisión a través del mismo algoritmo MAC utilizando la misma clave, produciendo una segunda etiqueta de datos MAC. Luego, el receptor compara la primera etiqueta MAC recibida en la transmisión con la segunda etiqueta MAC generada. Si son idénticos, el receptor puede asumir con seguridad que el mensaje no fue alterado ni manipulado durante la transmisión ( integridad de los datos ).
Sin embargo, para permitir que el receptor pueda detectar ataques de repetición , el mensaje en sí debe contener datos que garanticen que este mismo mensaje solo se puede enviar una vez (por ejemplo, marca de tiempo, número de secuencia o uso de una MAC de un solo uso). De lo contrario, un atacante podría, sin siquiera comprender su contenido, grabar este mensaje y reproducirlo más tarde, produciendo el mismo resultado que el remitente original.