Como usar
- Cole o payload exatamente como foi recebido ou será enviado.
- Informe a secret key.
- Escolha o algoritmo (HMAC-SHA256 é o mais comum).
- Selecione hex ou Base64 conforme o formato esperado pelo serviço e copie.
Casos de uso
- Validar assinaturas de webhooks de Stripe, GitHub, Shopify e gateways de pagamento.
- Assinar requisições entre microsserviços.
- Investigar por que a assinatura calculada no backend não confere.
Conceitos técnicos
Como o HMAC funciona
HMAC (RFC 2104) combina uma função hash com uma chave secreta: H((K ⊕ opad) || H((K ⊕ ipad) || mensagem)). Só quem conhece a chave produz a assinatura correta, o que garante autenticidade e integridade da mensagem.
Byte a byte
A assinatura depende de cada byte do payload. Reformatar o JSON, trocar a ordem das chaves ou alterar quebras de linha gera outra assinatura. Sempre assine o corpo bruto da requisição, antes de qualquer parse.
Comparação em tempo constante
No servidor, compare assinaturas com funções de tempo constante (crypto.timingSafeEqual no Node, hmac.compare_digest no Python) para evitar ataques de timing.
Perguntas frequentes
Minha secret key fica salva?
Não. A chave existe apenas na memória da página e é usada pela Web Crypto API local.
Por que minha assinatura não bate com a do serviço?
As causas mais comuns são payload alterado por parse, encoding de saída diferente (hex vs Base64) e prefixos como sha256= ou timestamps que o serviço concatena antes de assinar.
HMAC-SHA1 ainda é seguro?
Sim para HMAC: as colisões do SHA-1 não quebram a construção HMAC na prática. Mesmo assim, prefira SHA-256 em novos sistemas.