Neste artigo
O que e HMAC?
HMAC (Hash-based Message Authentication Code) e um mecanismo criptografico que combina uma chave secreta com uma funcao hash para produzir um codigo de autenticacao de mensagem. Ao contrario de um hash simples, o HMAC prova tanto a integridade quanto a autenticidade de uma mensagem.
O HMAC e definido na RFC 2104 e e usado em TLS, IPsec, assinaturas JWT e verificacao de webhooks de API. O algoritmo e resistente a ataques de extensao de comprimento que afetam funcoes hash simples.
Como funciona o HMAC
O HMAC usa uma abordagem de hash em duas passagens com preenchimento interno e externo. A chave secreta e completada ao tamanho do bloco da funcao hash e combinada com duas constantes diferentes.
- Hash interno — a chave e combinada com ipad (0x36), concatenada com a mensagem e hashada: H(K XOR ipad || mensagem)
- Hash externo — a chave e combinada com opad (0x5C), concatenada com o resultado do hash interno: H(K XOR opad || inner_hash)
- Resultado final — o resultado do hash externo e o valor HMAC, representado como uma string hexadecimal
Esta construcao de hash duplo previne ataques de extensao de comprimento. Mesmo que um atacante conheca H(mensagem), nao pode calcular HMAC(chave, mensagem || dados_extras) sem a chave secreta.
Algoritmos HMAC
A construcao HMAC funciona com qualquer funcao hash criptografica. As escolhas mais comuns sao SHA-256, SHA-384 e SHA-512.
- HMAC-SHA256 — saida de 256 bits, a variante mais usada para autenticacao de API, assinaturas JWT HS256 e verificacao de webhooks. Tamanho de chave recomendado: 32 bytes
- HMAC-SHA384 — saida de 384 bits, usado em suites de cifra TLS 1.3 e aplicacoes de alta seguranca. Tamanho de chave recomendado: 48 bytes
- HMAC-SHA512 — saida de 512 bits, preferido quando a margem maxima de seguranca e necessaria. Tamanho de chave recomendado: 64 bytes
A chave deve ter pelo menos o mesmo comprimento que a saida do hash. Para a maioria das aplicacoes, HMAC-SHA256 com uma chave aleatoria de 32 bytes oferece excelente seguranca.
Experimente gratuitamente — sem cadastro
Gerar assinaturas HMAC →Casos de uso comuns
O HMAC e a base de muitos protocolos de seguranca e esquemas de autenticacao de API.
- Autenticacao de API — servicos como Stripe, GitHub e AWS usam assinaturas HMAC para verificar cargas de webhooks
- Assinatura JWT — os algoritmos HS256, HS384 e HS512 usam HMAC para assinar a carga do token
- Integridade de mensagens — o HMAC verifica que os dados nao foram alterados durante a transmissao
- OAuth 1.0a — o metodo de assinatura HMAC-SHA1 assina os parametros de solicitacao OAuth para comprovar autorizacao
HMAC vs outros metodos de autenticacao
O HMAC e uma das varias abordagens para autenticacao de mensagens. Cada uma tem diferentes compromissos em seguranca, desempenho e gestao de chaves.
- HMAC vs assinaturas digitais — HMAC usa uma chave secreta compartilhada (simetrica), assinaturas digitais usam pares de chaves (assimetrica). HMAC e mais rapido, mas exige compartilhar o segredo.
- HMAC vs chaves de API — chaves de API sao tokens bearer simples. HMAC assina o conteudo da solicitacao, impedindo a falsificacao de novas solicitacoes.
- HMAC vs hash simples — o hash prova integridade, mas nao autenticidade. HMAC requer a chave secreta.
Perguntas frequentes
Qual e o comprimento ideal da chave HMAC?
A chave deve ter pelo menos o mesmo comprimento que a saida do hash — 32 bytes para HMAC-SHA256, 48 para HMAC-SHA384, 64 para HMAC-SHA512. Chaves mais curtas enfraquecem a seguranca.
HMAC e o mesmo que criptografia?
Nao. HMAC fornece autenticacao e integridade, nao confidencialidade. A mensagem permanece legivel. Use criptografia (AES, ChaCha20) alem do HMAC para ocultar o conteudo.
Posso usar HMAC no navegador com a Web Crypto API?
Sim. A Web Crypto API suporta HMAC nativamente via crypto.subtle.importKey() e crypto.subtle.sign(). Voce pode gerar assinaturas HMAC inteiramente no lado do cliente.