◇ OpenCyber Academy
Técnico · Capítulo 11 · Português

Capítulo 11 — Criptografia e serviços de confiança: verificação

Ensino gratuito e aberto para quem deseja proteger pessoas e tecnologias. Não é preciso criar uma conta para estudar ou consultar as respostas.

Capítulo 11 — Criptografia e serviços de confiança: verificação

Mapa da aula

Aula 11 publicada. Mapa, exemplo, EX041.

flowchart TD
  N0["11.1 Vetores de teste"]
  N1["11.2 Verificar os callbacks"]
  N2["Laboratório — Vetor de teste HMAC e verificação de c"]
  N3["11.3 O que a aprovação prova"]
  N4["Síntese"]
  N0 --> N1 --> N2 --> N3 --> N4
  N4 --> EX["Exemplo resolvido"]
  EX --> Q["Exercício EX041"]

Desenho lógico

flowchart LR
  N0["11.1 Vetores de teste"]
  N1["11.2 Verificar os callbacks"]
  N2["Laboratório — Vetor de teste HMAC e verificação de c"]
  N3["11.3 O que a aprovação prova"]
  N4["Síntese"]
  N0 --> N1 --> N2 --> N3 --> N4 --> Q["EX041"]
[11.1 Vetores de teste]
    |
    v
[11.2 Verificar os callbacks]
    |
    v
[Laboratório — Vetor de teste HMAC e verificação de c]
    |
    v
[11.3 O que a aprovação prova]
    |
    v
[Síntese]
    |
    v
[Exemplo resolvido] --> [Exercício EX041]

Objetivos de aprendizagem

Você vai (1) verificar uma implementação contra um vetor de teste publicado; (2) verificar a autenticação de mensagens com comparação em tempo constante; (3) declarar o que um teste aprovado prova e o que não prova.

11.1 Vetores de teste

Antes de confiar em qualquer componente criptográfico, a Lumen o confere contra vetores de teste publicados: entradas fixas com saídas corretas conhecidas, impressas nas normas. A RFC 4231 lista vetores para o HMAC-SHA-256. Se o módulo hmac do Python, um equipamento de um fornecedor ou a biblioteca de um parceiro produzem a saída documentada para essas entradas, Tomás ganha confiança de que o algoritmo está corretamente ligado. Uma divergência significa que algo está errado, talvez a função de hash errada ou um erro na codificação da chave. Os vetores de teste conferem a correção da primitiva; eles não provam que as chaves estão protegidas nem que o protocolo ao redor é seguro.

11.2 Verificar os callbacks

O processador de pagamentos assina cada callback com HMAC-SHA-256 usando um segredo compartilhado com a Lumen. O portal recalcula o HMAC sobre o corpo recebido e o compara com o cabeçalho. Tomás aprende duas regras. Primeiro, comparar com hmac.compare_digest, que leva o mesmo tempo seja o primeiro ou o último byte que difere, e não com ==, que pode vazar informação pelo tempo. Segundo, incluir um carimbo de tempo nos dados assinados e rejeitar as mensagens antigas, para que um atacante não consiga repetir um callback capturado. O laboratório confere o vetor da RFC 4231 e depois verifica um callback sintético autêntico, um modificado e um antigo.

Laboratório — Vetor de teste HMAC e verificação de callbacks

# HMAC-SHA-256: RFC 4231 test case 1, then synthetic callback checks. Teaching only.
import hmac, hashlib
key = bytes.fromhex("0b" * 20); data = b"Hi There"
expected = "b0344c61d8db38535ca8afceaf0bf12b881dc200c9833da726e9376c2e32cff7"
print("RFC 4231 TC1 match:", hmac.new(key, data, hashlib.sha256).hexdigest() == expected)
SECRET = b"synthetic-callback-secret"; NOW = 1_800_000_000; WINDOW = 300
def sign(ts, body): return hmac.new(SECRET, f"{ts}.".encode() + body, hashlib.sha256).hexdigest()
def verify(ts, body, tag):
    return abs(NOW - ts) <= WINDOW and hmac.compare_digest(sign(ts, body), tag)
body = b'{"order":"LF-1042","status":"paid"}'
tag = sign(NOW - 20, body)
print("authentic:", verify(NOW - 20, body, tag))
print("edited body:", verify(NOW - 20, body.replace(b"paid", b"refunded"), tag))
old = NOW - 3600
print("stale replay:", verify(old, body, sign(old, body)))

Execute com python3 lab_hmac.py. Saída verificada:

RFC 4231 TC1 match: True
authentic: True
edited body: False
stale replay: False

11.3 O que a aprovação prova

Um teste verde é fácil de interpretar em excesso. Passar no vetor da RFC 4231 prova que o cálculo do HMAC está correto para aquela entrada. Passar no teste de callback prova que o portal rejeita um corpo adulterado e um carimbo de tempo antigo. Isso não prova que o segredo compartilhado está guardado com segurança, que todos os caminhos do código chamam a verificação nem que os próprios sistemas do processador são seguros. Tomás escreve cada resultado de verificação com seus limites declarados, para que os gestores não leiam uma única verificação aprovada como uma afirmação de que os pagamentos estão seguros de ponta a ponta.

Exemplo resolvido

Tomás executa o laboratório de HMAC, vê o vetor coincidir, o callback editado falhar e o callback antigo falhar e registra o resultado com seus limites declarados.

Caso sintético. O segredo do callback e os corpos são sintéticos; o caso de teste 1 da RFC 4231 é real.

Erros e limites

Os vetores de teste não cobrem canais laterais nem o manuseio das chaves. Uma janela de repetição longa demais enfraquece a verificação do carimbo de tempo.

Exercícios

Síntese

A verificação combina vetores publicados, comparação correta e verificações de repetição e é relatada junto com o que deixa sem provar.

Continue estudando — aula 11 (capítulo 11 de 18)

← Capítulo 10 · Índice das aulas · Capítulo 12 →

Continue para a próxima aula já escrita.