Glossário

HMAC

código de autenticação de mensagem baseado em hashhash com chave

HMAC é um código de autenticação de mensagem com chave construído a partir de uma função hash criptográfica.

Definição

HMAC significa Hash-based Message Authentication Code. Ele combina uma chave secreta com uma função hash criptográfica para produzir uma etiqueta de autenticação de tamanho fixo para uma mensagem.

Um verificador com a mesma chave secreta recalcula a etiqueta sobre os bytes exatos da mensagem e a compara com a etiqueta recebida. Uma correspondência mostra que a mensagem não foi alterada e que a etiqueta foi criada por alguém que conhecia a chave compartilhada.

Como funciona

HMAC aplica hash à chave e à mensagem em duas etapas aninhadas com constantes de preenchimento diferentes. Essa construção é mais segura do que simplesmente calcular hash(key || message), que pode ser vulnerável com algumas funções hash.

A função hash escolhida determina o tamanho da etiqueta: HMAC-SHA256 produz 32 bytes, geralmente escritos como 64 caracteres hexadecimais. HMAC-SHA512 e HMAC-SHA384 produzem etiquetas maiores, enquanto HMAC-SHA1 permanece principalmente por compatibilidade.

Uso e limites

HMAC é usado em assinaturas de API, webhooks, dados de sessão, JWT HS256 e mensagens de protocolo quando os dois lados já compartilham um segredo. Ele fornece integridade e autenticação, não confidencialidade: a mensagem em si não é ocultada.

Use uma chave secreta aleatória, preserve os bytes exatos assinados e compare etiquetas com comparação em tempo constante no código da aplicação. Para verificação pública sem segredo compartilhado, use uma assinatura digital.

Perguntas frequentes

Não. HMAC autentica uma mensagem, mas não a oculta. Use criptografia separadamente quando a mensagem precisar ser confidencial.

Um hash comum não tem chave secreta, então qualquer pessoa pode alterar a mensagem e calcular um novo hash. HMAC exige o segredo compartilhado para criar uma etiqueta válida.

Não. A verificação recalcula a etiqueta a partir da mensagem original e da chave secreta; ela não recupera esses valores a partir da etiqueta.

Veja também
Ferramentas relacionadas