Un código de autentificación de mensaje (message authentication code o MAC) es un bloque de datos de tamaño fijo que se envía con un mensaje para averiguar su origen e integridad. Son muy útiles para proporcionar autentificación e integridad sin confidencialidad. Para generar MACs se pueden usar algoritmos de clave secreta, de clave pública y algoritmos de resumen de mensajes.
Un tipo de MAC muy empleado en la actualidad es el código de autentificación de mensaje resumido (hashed message authentication code o HMAC). Lo que hacemos es generar el MAC aplicando una función de dispersión criptográfica a un conjunto formado por un mensaje y un código secreto. Así, el que recibe el mensaje puede calcular su propio MAC con el mensaje y el código secreto (que comparte con el que ha generado el MAC). Si no coinciden sabemos que el mensaje ha sido manipulado. Este tipo de técnicas se emplean para proteger comunicaciones a nivel de la capa de red.
La firma digital es un item que responde del origen e integridad de un mensaje. El que escribe un mensaje lo firma usando una clave de firmado y manda el mensaje y la firma digital. El destinatario usa una clave de verificación para comprobar el origen del mensaje y que no ha sido modificado durante el tránsito.
Para firmar los mensajes se emplean algoritmos de clave pública y funciones de dispersión. El proceso es como sigue:
Hay que indicar que los MAC y las firmas digitales se diferencian en un punto importante: aunque los MAC se pueden usar para verificar la autenticidad de los mensajes, no se pueden usar para firmar los mensajes, ya que sólo se usa una clave secreta que comparten el emisor y el receptor, lo que hace que ambos puedan generar la misma firma.