0Pricing
Cryptology Academy · Aula

HMAC em APIs: assinatura de solicitações

Implemente a assinatura de solicitações baseada em HMAC e a prevenção de ataques de repetição.

HMAC em APIs: assinatura de solicitações é uma aula grátis de Cryptology Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Cryptology Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Cryptology Academy inclui 4 aulas no total.

Boas-vindas

A assinatura de solicitações baseada em HMAC é usada pela AWS, pelo GitHub, pela Stripe e pela Twilio para autenticar chamadas de API. Nesta lição, construiremos um sistema completo de assinatura de solicitações.

Por que assinar solicitações de API?

As chaves de API em URLs podem ser registradas em servidores proxy, no histórico do navegador e nos registros do servidor. A assinatura da solicitação inclui o corpo completo no MAC, garantindo que o conteúdo útil não tenha sido modificado e que a chave não seja exposta sozinha.

Versão 4 da assinatura da AWS

O AWS SigV4 calcula: 1. Solicitação canônica (método + URL + cabeçalhos + resumo do corpo) 2. String a ser assinada (data + região + serviço + resumo da solicitação canônica) 3. Chave de assinatura = HMAC(HMAC(HMAC(HMAC('AWS4'+secret, date), region), service), 'aws4_request') 4. Assinatura = HMAC(signing_key, string_to_sign)

Verificação de webhook do GitHub

O GitHub assina cada conteúdo útil de webhook: X-Hub-Signature-256: sha256=HMACHEX Verifique: import hmac expected = 'sha256=' + hmac.new(secret, payload, 'sha256').hexdigest() hmac.compare_digest(expected, received_signature)

Ameaça de ataque de repetição

Se um invasor capturar uma solicitação assinada válida, poderá reenviá-la várias vezes. Uma transferência de US$ 100 assinada uma vez poderia ser repetida 1.000 vezes. O HMAC sozinho NÃO impede ataques de repetição.

Prevenção de repetições baseada em marca temporal

Inclua uma marca temporal na mensagem assinada. Rejeite solicitações com mais de 5 minutos. A Stripe envia X-Stripe-Signature com uma marca temporal. O GitHub usa X-GitHub-Delivery (UUID), e não uma abordagem baseada em marca temporal.

Prevenção de repetições baseada em valor único

Inclua um valor único aleatório em cada solicitação. O servidor armazena os valores únicos usados (no Redis com TTL). Rejeite qualquer solicitação com um valor único já visto. É mais confiável do que marcas temporais em sistemas distribuídos.

Implementação da assinatura de solicitações

import hmac, hashlib, time, os def sign_request(secret, method, path, body, timestamp=None): ts = timestamp or str(int(time.time())) payload = f'{method}\n{path}\n{ts}\n' + hashlib.sha256(body).hexdigest() sig = hmac.new(secret.encode(), payload.encode(), 'sha256').hexdigest() return ts, sig

Verificação no servidor

def verify_request(secret, method, path, body, ts, received_sig): # Check timestamp freshness if abs(time.time() - int(ts)) > 300: # 5 minutes return False # Recompute and compare _, expected = sign_request(secret, method, path, body, ts) return hmac.compare_digest(expected, received_sig)

JWT com HMAC (HS256)

Os JWTs HS256 usam HMAC-SHA256 com um segredo compartilhado. O servidor assina e verifica os tokens. Limitação: qualquer entidade que tenha a chave pode falsificar tokens. Para confiança assimétrica (autenticação de terceiros), use RS256 ou ES256.

Estratégia de rotação de chaves

Faça a rotação periódica das chaves HMAC: gere uma chave nova, aceite a antiga e a nova durante a janela de transição (24 horas) e depois desative a chave antiga. O AWS SigV4 deriva chaves de segredos associados a datas para permitir a rotação diária.

Verificação rápida

Por que a assinatura de solicitações com HMAC, sozinha, não é suficiente para impedir ataques de repetição?

Recapitulação

A assinatura de solicitações com HMAC e proteção contra repetições foi implementada. Em seguida, compararemos CMAC e Poly1305 como alternativas de MAC baseadas em cifras de bloco.

Perguntas Frequentes

A aula “HMAC em APIs: assinatura de solicitações” é grátis?

Sim — o texto completo de “HMAC em APIs: assinatura de solicitações” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Cryptology Academy, atualize para CoddyKit PRO. O curso de Cryptology Academy inclui 4 aulas no total.

O que vou aprender em “HMAC em APIs: assinatura de solicitações”?

Implemente a assinatura de solicitações baseada em HMAC e a prevenção de ataques de repetição. Você pratica Cryptology Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Cryptology Academy?

Nenhuma experiência prévia é necessária. Cryptology Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.

Quanto tempo leva a aula “HMAC em APIs: assinatura de solicitações”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Cryptology Academy?

Sim. Cada aula de Cryptology Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Conceitos de MAC e ataques de extensão de comprimento
  2. Construção do HMAC e prova de segurança
  3. HMAC em APIs: assinatura de solicitações
  4. CMAC e Poly1305: MACs baseados em cifras de bloco
← Voltar para Cryptology Academy