En criptografía , un código de autenticación de mensajes ( MAC ), a veces conocido como etiqueta de autenticación , es un pequeño fragmento de información que se utiliza para autenticar y comprobar la integridad de un mensaje. En otras palabras, para 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 del mensaje ( MIC ) se sustituye con frecuencia 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 del mensaje , que solo tiene como objetivo identificar de forma única pero opaca un único mensaje. RFC 4949 recomienda evitar el término código de integridad del mensaje (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 del mensaje 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 los mensajes , 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 que está en cuestión. [3]
Formalmente, un sistema de código de autenticación de mensajes ( MAC ) es un triple de algoritmos eficientes [4] ( G , S , V ) que satisfacen:
S y V deben satisfacer lo siguiente:
Una 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 conoce 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 diferentes requisitos de seguridad. 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 oráculo que posee la clave secreta y genera MAC para los mensajes que elige el atacante, el atacante no puede adivinar la MAC para otros mensajes (que no se usaron para consultar el oráculo) sin realizar cantidades inviables de cálculos.
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 es el caso del 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 criptografía de clave pública. [4] Dado que esta clave privada solo es accesible para su titular, una firma digital prueba que un documento fue firmado por nadie más que ese titular. Por lo tanto, las firmas digitales ofrecen no repudio. Sin embargo, el no repudio puede ser proporcionado por sistemas que vinculan 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 se puede utilizar para generar la 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 la MAC. Esto se hace comúnmente en la industria financiera. [ cita requerida ]
Los algoritmos MAC pueden construirse a partir de otras primitivas criptográficas, como las funciones hash criptográficas (como en el caso de HMAC ) o de algoritmos de cifrado por 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 en base a un 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, de modo de mantener la protección incluso si posteriormente se descubre que una de ellas es vulnerable. Por ejemplo, en las versiones de Transport Layer Security (TLS) anteriores a la 1.2, los datos de entrada se dividen en mitades que se procesan cada una con una primitiva de hash diferente ( SHA-1 y SHA-2 ) y luego se combinan para generar la MAC.
El hash universal y, en particular, las funciones hash independientes por pares proporcionan un código de autenticación de mensajes seguro siempre que la clave se utilice como máximo una vez. Esto puede considerarse como un bloque de un solo uso para la autenticación. [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, las funciones hash independientes de k proporcionan un código de autenticación de mensaje seguro siempre que la clave se use menos de k veces para funciones hash independientes de k formas.
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, entre ellos:
Las normas 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 mediante la designación de 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 bloque 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. A continuación, 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, lo que produce una segunda etiqueta de datos MAC. A continuación, el receptor compara la primera etiqueta MAC recibida en la transmisión con la segunda etiqueta MAC generada. Si son idénticas, 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 que el receptor pueda detectar ataques de repetición , el mensaje en sí debe contener datos que aseguren que ese mismo mensaje solo puede enviarse una vez (por ejemplo, marca de tiempo, número de secuencia o uso de una MAC única). De lo contrario, un atacante podría, sin siquiera entender su contenido, grabar este mensaje y reproducirlo en un momento posterior, produciendo el mismo resultado que el remitente original.