Skip to main content
CheckTown
Ferramentas dev

HMAC: como funciona a autenticação baseada em hash

Publicado 6 min de leitura
Neste artigo

O que e HMAC?

HMAC (Hash-based Message Authentication Code) e um mecanismo criptográfico que combina uma chave secreta com uma função hash para produzir um código de autenticação 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 verificação de webhooks de API. O algoritmo e resistente a ataques de extensão de comprimento que afetam funções 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 função 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 construção de hash duplo previne ataques de extensão de comprimento. Mesmo que um atacante conheça H(mensagem), não pode calcular HMAC(chave, mensagem || dados_extras) sem a chave secreta.

Algoritmos HMAC

A construção HMAC funciona com qualquer função hash criptográfica. As escolhas mais comuns sao SHA-256, SHA-384 e SHA-512.

  • HMAC-SHA256 — saida de 256 bits, a variante mais usada para autenticação de API, assinaturas JWT HS256 e verificação de webhooks. Tamanho de chave recomendado: 32 bytes
  • HMAC-SHA384 — saida de 384 bits, usado em suites de cifra TLS 1.3 e aplicações de alta segurança. Tamanho de chave recomendado: 48 bytes
  • HMAC-SHA512 — saida de 512 bits, preferido quando a margem maxima de segurança 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 aplicações, HMAC-SHA256 com uma chave aleatoria de 32 bytes oferece excelente segurança.

Experimente gratuitamente — sem cadastro

Gerar assinaturas HMAC →

Casos de uso comuns

O HMAC e a base de muitos protocolos de segurança e esquemas de autenticação de API.

  • Autenticação de API — serviços 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 não foram alterados durante a transmissão
  • OAuth 1.0a — o metodo de assinatura HMAC-SHA1 assina os parametros de solicitação OAuth para comprovar autorização

HMAC vs outros metodos de autenticação

O HMAC e uma das varias abordagens para autenticação de mensagens. Cada uma tem diferentes compromissos em segurança, desempenho e gestão de chaves.

  • HMAC vs assinaturas digitais — HMAC usa uma chave secreta compartilhada (simetrica), assinaturas digitais usam pares de chaves (assimetrica). HMAC e mais rápido, mas exige compartilhar o segredo.
  • HMAC vs chaves de API — chaves de API sao tokens bearer simples. HMAC assina o conteudo da solicitação, impedindo a falsificação de novas solicitações.
  • HMAC vs hash simples — o hash prova integridade, mas não 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 segurança.

HMAC e o mesmo que criptografia?

Não. HMAC fornece autenticação e integridade, não 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(). Você pode gerar assinaturas HMAC inteiramente no lado do cliente.

Ferramentas relacionadas