O Que É um HMAC? Autenticação por Hash com Chave Explicada
Um HMAC é um hash com chave que combina uma chave secreta com uma mensagem para provar tanto sua integridade quanto que ela veio de alguém que possui a chave.
Um hash simples prova que os dados não foram alterados, mas qualquer um pode recalculá-lo, então não prova quem os produziu. Um HMAC corrige isso misturando uma chave secreta compartilhada. Apenas quem tem a chave consegue produzir um HMAC válido, então ele também autentica o remetente. É exatamente assim que assinaturas de webhook - incluindo as que os pipelines de CI verificam - funcionam.
O que é um HMAC
HMAC significa Hash-based Message Authentication Code. Ele combina uma chave secreta com a mensagem e uma função de hash (como SHA-256) para produzir uma tag. Um receptor que compartilha o segredo recalcula a tag e compara; uma correspondência prova que a mensagem está íntegra e foi criada por quem possui a chave.
Por que um hash simples não basta
Um hash puro não tem segredo, então qualquer um pode calculá-lo para quaisquer dados. Isso detecta corrupção acidental mas não prova autenticidade - um atacante que altera a mensagem simplesmente recalcula o hash. A chave secreta em um HMAC é o que vincula a tag a um remetente confiável.
HMAC para webhooks
Provedores de webhook assinam cada payload com um HMAC usando um segredo compartilhado e colocam a assinatura resultante em um header. O receptor recalcula o HMAC sobre o corpo bruto com o mesmo segredo e compara. Se diferirem, a requisição é rejeitada como forjada ou adulterada.
HMAC no CI
Pipelines que recebem webhooks - para disparar deploys ou processar eventos - devem verificar a assinatura HMAC antes de agir, para que uma requisição forjada não possa iniciar um pipeline. A comparação deve ser em tempo constante para evitar vazar o segredo por timing, um detalhe que scanners de segurança checam.
# Verify an HMAC webhook signature before acting
steps:
- run: |
expected=$(printf "%s" "$BODY" | openssl dgst -sha256 -hmac "$SECRET" -hex)
test "sha256=$expected" = "$SIGNATURE_HEADER"Nota Latchkey
Quando um pipeline Latchkey é disparado por um webhook, verificar a assinatura HMAC com um segredo armazenado é a proteção padrão - o segredo é mascarado nos logs e a verificação roda como um passo de job comum.
Principais conclusões
- Um HMAC mistura uma chave secreta a um hash para provar tanto integridade quanto autenticidade.
- Um hash simples prova apenas integridade; a chave secreta em um HMAC também prova o remetente.
- Webhooks assinam payloads com HMAC, e o CI deve verificar a assinatura antes de agir sobre uma requisição.