HMAC


En criptografía , un HMAC (a veces expandido como código de autenticación de mensajes hash con clave o código de autenticación de mensajes basado en hash ) es un tipo específico de código de autenticación de mensajes (MAC) que involucra una función hash criptográfica y una clave criptográfica secreta. Al igual que con cualquier MAC, se puede usar para verificar simultáneamente la integridad de los datos y la autenticidad de un mensaje.

HMAC puede proporcionar autenticación mediante un secreto compartido en lugar de utilizar firmas digitales con criptografía asimétrica . Equilibra la necesidad de una infraestructura de clave pública compleja al delegar el intercambio de claves a las partes que se comunican, quienes son responsables de establecer y utilizar un canal confiable para acordar la clave antes de la comunicación.

Cualquier función hash criptográfica, como SHA-2 o SHA-3 , puede usarse en el cálculo de un HMAC; el algoritmo MAC resultante se denomina HMAC-X, donde X es la función hash utilizada (por ejemplo, HMAC-SHA256 o HMAC-SHA3-512). La fortaleza criptográfica del HMAC depende de la fortaleza criptográfica de la función hash subyacente, el tamaño de su salida hash y el tamaño y la calidad de la clave.

HMAC utiliza dos pases de cálculo hash. La clave secreta se usa primero para derivar dos claves: interna y externa. El primer paso del algoritmo produce un hash interno derivado del mensaje y la clave interna. El segundo paso produce el código HMAC final derivado del resultado hash interno y la clave externa. Por lo tanto, el algoritmo proporciona una mejor inmunidad contra los ataques de extensión de longitud .

Una función hash iterativa divide un mensaje en bloques de un tamaño fijo y los itera con una función de compresión . Por ejemplo, SHA-256 opera en bloques de 512 bits. El tamaño de la salida de HMAC es el mismo que el de la función hash subyacente (por ejemplo, 256 y 512 bits en el caso de SHA-256 y SHA3-512, respectivamente), aunque se puede truncar si se desea.

HMAC no cifra el mensaje. En su lugar, el mensaje (cifrado o no) debe enviarse junto con el hash HMAC. Las partes con la clave secreta volverán a codificar el mensaje y, si es auténtico, los algoritmos hash recibidos y calculados coincidirán.


Generación HMAC-SHA1