Skip to content
Latchkey

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.

Verifying an HMAC signature
# 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.

Guias relacionados