Gerador de HMAC

HMAC é o algoritmo por trás da maioria dos webhooks assinados, cabeçalhos AWS Signature v4 e tokens JWT HS256. Insira uma mensagem e uma chave secreta, escolha uma família de hash, e este gerador produz o HMAC exatamente como especificado na RFC 2104, útil para verificar o que seu backend está prestes a enviar ou reproduzir uma assinatura que você recebeu de uma API.

Como calcular um HMAC

  1. 1

    Cole a mensagem

    Os bytes exatos a serem assinados, um payload de webhook, uma solicitação canônica ou qualquer string.

  2. 2

    Insira a chave secreta

    Pode ser texto ou hexadecimal. O gerador preenche ou faz hash para o tamanho do bloco conforme a RFC.

  3. 3

    Escolha o algoritmo de hash

    SHA-256 é o padrão; escolha SHA-1, SHA-384, SHA-512 ou MD5 para compatibilidade legada.

  4. 4

    Copie a assinatura

    A saída é hexadecimal minúscula, pronta para colar em uma configuração de webhook ou em um cabeçalho de autorização.

HMAC nos bastidores

HMAC envolve uma função de hash simples em uma construção com chave para que a assinatura não possa ser forjada sem a chave.

A receita da RFC 2104

HMAC(k, m) = H((k' ⊕ opad) ∥ H((k' ⊕ ipad) ∥ m))

onde k' é a chave preenchida para o tamanho do bloco de hash, opad = 0x5c repetido e ipad = 0x36 repetido.

Opções de algoritmo

Algoritmo Tamanho do bloco Comprimento da saída Recomendado para
HMAC-SHA-256 64 bytes 32 bytes Padrão moderno, assinatura de webhook
HMAC-SHA-384 128 bytes 48 bytes Assinatura de API de maior segurança
HMAC-SHA-512 128 bytes 64 bytes Tokens de longa duração
HMAC-SHA-1 64 bytes 20 bytes Legado (AWS S3 v2, OAuth 1.0)
HMAC-MD5 64 bytes 16 bytes Apenas legado; evite para novos trabalhos

Onde o HMAC aparece

  • Webhooks do GitHub, Stripe, Shopify: cabeçalho X-Hub-Signature-256, Stripe-Signature, etc.
  • AWS Signature v4: uma cadeia de HMAC-SHA256 sobre a solicitação canônica.
  • JWT HS256: a assinatura do token é HMAC-SHA-256(header.payload, secret).
  • Tokens de redefinição de senha: HMAC sobre user_id + expiração + um segredo do site.

Erros comuns

  • Passar uma chave codificada em hexadecimal como texto em vez de decodificá-la para bytes primeiro.
  • Assinar os bytes do payload errado: alguns webhooks assinam o corpo da solicitação bruta incluindo espaços em branco, outros assinam uma forma canônica.
  • Usar == em JavaScript ou Python para comparar assinaturas; sempre use uma comparação segura em tempo para resistir a ataques de tempo.

Perguntas frequentes

Quase sempre porque os bytes da mensagem diferem. Assinar o corpo analisado em JSON introduz mudanças de espaço em branco; assine o corpo da solicitação bruta. Também verifique se a chave é decodificada da mesma forma (hex vs bytes brutos) em ambos os lados.

Sim. Se a chave for mais curta que o tamanho do bloco de hash, ela é preenchida com zeros; se for mais longa, é feita hash primeiro. A RFC 2104 recomenda chaves com pelo menos o comprimento da saída (32 bytes para SHA-256).

O HMAC ainda é resistente a ataques conhecidos de colisão do MD5 porque o ataque não se transfere para a construção do HMAC. Ainda assim, use HMAC-SHA-256 para qualquer novo código, ferramentas e auditores esperam isso.

Sim. A mensagem e a chave secreta são enviadas ao nosso servidor por uma conexão HTTPS criptografada para que o HMAC seja calculado. Elas são usadas apenas para o cálculo e não são armazenadas nem registradas.

Ferramentas relacionadas

Ferramenta disponível em outros idiomas