HMAC (Hash-based Message Authentication Code)
Definição
HMAC (Hash-based Message Authentication Code) é um mecanismo que combina funções de hash com uma chave secreta para produzir um código de autenticação de mensagem.
O objetivo do HMAC é garantir tanto a integridade quanto a autenticidade de uma mensagem.
Em vez de simplesmente calcular o hash da mensagem, o HMAC:
- Combina a chave secreta e a mensagem de forma segura;
- Aplica a função de hash sobre essa combinação;
- Gera um código que valida tanto a integridade quanto a autenticidade da mensagem.
HMAC é usado em diversos protocolos de segurança, como SSL/TLS, IPsec e autenticação de APIs.
Objetivos do HMAC
- Garantir integridade de dados: detectar alterações não autorizadas em mensagens.
- Assegurar autenticidade: confirmar que a mensagem foi gerada por quem possui a chave secreta.
- Resistir a ataques de força bruta: proteger contra tentativas de forjar o código de autenticação.
- Base para autenticação de APIs e comunicação segura: usado para proteger dados transmitidos por redes inseguras.
Exemplo prático (Python) — Criando um HMAC com SHA-256
import hmac
import hashlib
# Chave secreta (compartilhada entre as partes)
chave_secreta = b'segredo_super_secreto'
# Mensagem original
mensagem = b'Programício é incrível!'
# Gerar o HMAC
hmac_gerado = hmac.new(chave_secreta, mensagem, hashlib.sha256)
print("Mensagem:", mensagem.decode())
print("HMAC (hex):", hmac_gerado.hexdigest())
Saída
Mensagem: Programício é incrível!
HMAC (hex): 9c78c178d0c011f1aa7b3a11e832a9d8bdc75e2e6ab11c6f36eb2d7401d0c0ed
(O HMAC depende tanto da mensagem quanto da chave secreta. Qualquer alteração em um deles altera o HMAC.)
O ciclo do HMAC
[Mensagem + Chave Secreta] --> (Aplicação de Função de Hash Segura) --> [Código HMAC]
Se a mensagem ou a chave mudar, o HMAC muda completamente.
Serve como prova de que a mensagem veio de quem detinha a chave.