Hash e Segurança

Gerador de HMAC

Gere uma assinatura HMAC a partir de uma mensagem e uma chave secreta.

Avalie esta ferramenta

Como usar Gerador de HMAC

  1. Cole a mensagem que deseja assinar.
  2. Digite a chave secreta compartilhada pelas duas partes.
  3. Escolha um algoritmo — HMAC-SHA-256 se estiver em dúvida — e copie o resultado.

Sobre Gerador de HMAC

HMAC significa Hash-based Message Authentication Code (Código de Autenticação de Mensagem baseado em Hash), definido na RFC 2104. Ele mistura uma chave secreta ao processo de hashing, e essa única adição muda o que a saída comprova. Um hash simples só prova que algum dado produziu algum digest — se um atacante consegue mudar a mensagem, ele pode simplesmente recalcular o hash para corresponder, e nada parece errado. Com o HMAC, ele não consegue produzir um código válido sem a chave, então o destinatário obtém tanto a integridade (a mensagem não foi alterada) quanto a autenticidade (ela veio de alguém que possui a chave).

O HMAC não é apenas "fazer hash da chave e da mensagem juntas" — ele usa uma construção aninhada, fazendo hash duas vezes com dois valores de chave derivados. Essa estrutura é o que torna o HMAC imune ao ataque de extensão de comprimento que afeta o SHA-256 e o SHA-512 puros, em que um atacante que conhece um digest pode anexar dados e calcular um novo digest válido sem conhecer a entrada original. É um motivo real pelo qual esquemas ingênuos do tipo hash(secreto + mensagem) falham e o HMAC não.

Você quase certamente já usou HMAC sem perceber. As assinaturas de webhook do Stripe e do GitHub são HMACs — o cabeçalho que você compara é calculado a partir do corpo bruto da requisição e do seu segredo de assinatura. A assinatura de requisições da AWS o utiliza. Assim como os JWTs assinados com HS256, que você pode desmontar com nosso decodificador de JWT. O HMAC-SHA-256 é o padrão usual e a escolha certa para novos projetos. O HMAC-MD5 é um caso interessante: ainda é considerado aceitável como MAC apesar da fraqueza de colisão do MD5, porque a segurança do HMAC não depende da resistência a colisões — mas não há um bom motivo para escolhê-lo em um novo projeto.

Perguntas frequentes

Qual é a diferença entre HMAC e um hash simples?

Um hash simples não prova nada se um atacante conseguir mudar a mensagem, porque ele também pode recalcular o hash. O HMAC incorpora uma chave secreta, então só quem possui a chave consegue produzir um código válido — isso garante autenticidade além de integridade.

Qual algoritmo devo escolher?

HMAC-SHA-256, a menos que algo específico indique o contrário — é o padrão comum para webhooks, assinatura de APIs e JWT HS256.

O HMAC-MD5 é seguro?

Ainda é considerado aceitável como MAC mesmo que o próprio MD5 esteja quebrado quanto a colisões, porque o HMAC não depende de resistência a colisões. Dito isso, não o escolha para um novo projeto — use HMAC-SHA-256.

Por que a assinatura do meu webhook não corresponde?

Quase sempre porque os bytes da mensagem são diferentes. Assine exatamente o corpo bruto da requisição — não uma versão reserializada — e verifique se há uma quebra de linha no final ou uma codificação de chave diferente.

Minha mensagem e minha chave são armazenadas?

Não. Ambas são enviadas ao nosso servidor porque os navegadores não conseguem calcular a maioria destes algoritmos, depois são usadas no cálculo e descartadas imediatamente — nunca registradas, nunca armazenadas. Para uma chave de assinatura em produção real, fazer isso na sua própria máquina ainda é o hábito mais seguro.