◇ OpenCyber Academy
Engenharia · Capítulo 30 · Português

Capítulo 30 — Laboratório de verificação I

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 30 — Laboratório de verificação I

Mapa da aula

Aula 30 publicada. Mapa, exemplo, EX088.

flowchart TD
  N0["30.1 Propósito da verificação"]
  N1["30.2 Testes de autenticidade e de replay"]
  N2["Laboratório — Verificação de autenticidade e de repl"]
  N3["30.3 Registrar as evidências"]
  N4["Síntese"]
  N0 --> N1 --> N2 --> N3 --> N4
  N4 --> EX["Exemplo resolvido"]
  EX --> Q["Exercício EX088"]

Desenho lógico

flowchart LR
  N0["30.1 Propósito da verificação"]
  N1["30.2 Testes de autenticidade e de replay"]
  N2["Laboratório — Verificação de autenticidade e de repl"]
  N3["30.3 Registrar as evidências"]
  N4["Síntese"]
  N0 --> N1 --> N2 --> N3 --> N4 --> Q["EX088"]
[30.1 Propósito da verificação]
    |
    v
[30.2 Testes de autenticidade e de replay]
    |
    v
[Laboratório — Verificação de autenticidade e de repl]
    |
    v
[30.3 Registrar as evidências]
    |
    v
[Síntese]
    |
    v
[Exemplo resolvido] --> [Exercício EX088]

Objetivos de aprendizagem

Você vai (1) verificar se os controles implementados atendem às suas especificações; (2) rodar casos de teste positivos e negativos de autenticidade dos registros e de replay; (3) registrar as evidências de verificação.

30.1 Propósito da verificação

A verificação pergunta se o sistema foi construído conforme especificado. No Laboratório de Verificação I, Sofia testa os controles de autenticidade e de replay do componente de ingestão num laboratório isolado, com validadores sintéticos. Seu plano de testes vem diretamente das especificações dos controles: cada requisito tem testes positivos, que mostram o comportamento correto, e testes negativos, que mostram que entradas ruins são rejeitadas. O ambiente do laboratório usa apenas chaves e dados sintéticos. As evidências de verificação sustentarão o assurance case mais adiante, então cada teste registra as entradas, os resultados esperados, os resultados obtidos, a versão do ambiente e a data, num formato consistente.

30.2 Testes de autenticidade e de replay

No laboratório, os validadores autenticam os registros de validação com um código de autenticação de mensagem (MAC), usando uma chave compartilhada com a ingestão, um substituto simplificado das assinaturas de produção, implementado com o módulo hmac do Python. O script de Sofia envia quatro registros sintéticos: um registro novo e autêntico, uma duplicata dele, um registro com o valor alterado e um registro de um validador desativado cuja chave foi removida. O laboratório abaixo mostra a ingestão aceitando apenas o primeiro. Ela compara os resultados com os desfechos esperados e constata que os quatro coincidem. Uma divergência seria um defeito a ser relatado, e não um teste a ser ajustado.

Laboratório — Verificação de autenticidade e de replay

# Lab ingestion check: HMAC stand-in for validator signatures + replay store. Synthetic keys only.
import hmac, hashlib
keys = {"V-101": b"lab-key-101", "V-102": b"lab-key-102"}       # V-099 retired: key removed
seen = set()
def tag(k, rec): return hmac.new(k, rec, hashlib.sha256).hexdigest()
def ingest(vid, rec, t):
    k = keys.get(vid)
    if k is None: return "reject: unknown or retired validator"
    if not hmac.compare_digest(tag(k, rec), t): return "reject: bad tag"
    rid = rec.split(b",")[0]
    if (vid, rid) in seen: return "reject: replay"
    seen.add((vid, rid)); return "accept"
r = b"R-5521,C100,2.40"
t = tag(keys["V-101"], r)
print("authentic:", ingest("V-101", r, t))
print("duplicate:", ingest("V-101", r, t))
print("altered amount:", ingest("V-101", b"R-5522,C100,0.10", tag(keys["V-101"], b"R-5522,C100,2.40")))
print("retired validator:", ingest("V-099", b"R-7,C200,2.40", tag(b"old-099", b"R-7,C200,2.40")))

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

authentic: accept
duplicate: reject: replay
altered amount: reject: bad tag
retired validator: reject: unknown or retired validator

30.3 Registrar as evidências

Sofia escreve um relatório de verificação com uma tabela de testes, resultados e links para as evidências, e anota o que não foi verificado: o desempenho sob a carga de pico, o comportamento durante o failover do banco de dados e o caminho das assinaturas de produção, que usa outro mecanismo. Ela assina e data o relatório e o guarda com um hash no repositório de evidências do projeto. Daniel lembra que a verificação mostra a conformidade com a especificação; se a própria especificação é adequada é uma questão separada, tratada pela validação, que vem mais adiante no curso.

Exemplo resolvido

Sofia roda quatro testes de autenticidade e de replay num laboratório isolado, constata que todos coincidem com o esperado e registra um relatório que lista três áreas ainda não verificadas.

Caso sintético. O laboratório, as chaves e os registros são sintéticos; o HMAC substitui as assinaturas de produção.

Erros e limites

Os ambientes de laboratório diferem da produção em escala e em tempo. Testes aprovados dependem da qualidade dos casos de teste.

Exercícios

Síntese

A verificação testa os controles em relação às suas especificações com casos positivos e negativos e registra evidências honestas sobre o escopo.

Continue estudando — aula 30 (capítulo 30 de 50)

← Capítulo 29 · Índice das aulas · Capítulo 31 →

Continue para a próxima aula já escrita.