HMAC

Hash-based Message Authentication Code

Bellare, Canetti & Krawczyk (1996) · RFC 2104 · FIPS 198

Autenticação de Mensagem

Integridade e autenticidade com chave secreta

MAC
O HMAC combina uma função de hash (como SHA-256) com uma chave secreta compartilhada. Resultado: um código que prova integridade (a mensagem não mudou) e autenticidade de origem (veio de quem possui a chave).

Hash não basta sozinho

Um hash simples qualquer um recalcula. O segredo é o que liga o código à origem: sem a chave, o atacante não consegue gerar um HMAC válido para uma mensagem forjada.

MAC × Assinatura digital

O HMAC usa chave simétrica (ambas as partes a têm), então não dá não repúdio — qualquer um dos dois pode tê-lo gerado. Para não repúdio, use assinatura digital.

A construção aninhada

HMAC(K, m) = H( (K ⊕ opad) ‖ H( (K ⊕ ipad) ‖ m ) )
K ⊕ ipad ‖ msg chave interna + mensagem H interno K ⊕ opad ‖ (hash interno) chave externa + resultado H externo HMAC

O duplo hash com pads interno (ipad) e externo (opad) é o que dá imunidade ao ataque de extensão de comprimento.

Propriedade notável: o HMAC permanece seguro mesmo que o hash subjacente tenha fraquezas de colisão — por isso o HMAC-SHA1 ainda é considerado seguro, embora desencorajado.

Onde o HMAC é usado

Boas práticas: use chaves de tamanho adequado e comparação em tempo constante ao validar o HMAC, para evitar ataques de timing que revelariam o código byte a byte.
Ex.: um servidor recebe payload + HMAC; recalcula o HMAC com a chave secreta e compara. Se baterem, a requisição é íntegra e autêntica.

Em resumo

O HMAC transforma um hash em prova de integridade + autenticidade com uma chave secreta, via construção aninhada imune a length-extension. Não oferece não repúdio (chave simétrica). É o motor de autenticação de APIs, JWT (HS256) e derivação de chaves.

SHA-256 ECDSA AES Todos os algoritmos
Voltar aos Pilares