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

Capítulo 9 — Programação II

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 9 — Programação II

Mapa da aula

Aula 09 publicada. Mapa, exemplo, EX025.

flowchart TD
  N0["9.1 Encapsular bibliotecas com segurança"]
  N1["9.3 Testar código criptográfico"]
  N2["Síntese"]
  N0 --> N1 --> N2
  N2 --> EX["Exemplo resolvido"]
  EX --> Q["Exercício EX025"]

Desenho lógico

flowchart LR
  N0["9.1 Encapsular bibliotecas com segurança"]
  N1["9.3 Testar código criptográfico"]
  N2["Síntese"]
  N0 --> N1 --> N2 --> Q["EX025"]
[9.1 Encapsular bibliotecas com segurança]
    |
    v
[9.3 Testar código criptográfico]
    |
    v
[Síntese]
    |
    v
[Exemplo resolvido] --> [Exercício EX025]

Objetivos de aprendizagem

Você vai (1) estruturar código que chama bibliotecas criptográficas com segurança; (2) tratar erros sem vazar informação; (3) testar código criptográfico com testes de resposta conhecida e testes negativos.

9.1 Encapsular bibliotecas com segurança

Aiyana escreve um pequeno módulo que o serviço de leitura dos medidores vai chamar para a autenticação. Ele expõe duas funções, gerar a tag de uma leitura e verificar uma leitura, e esconde internamente todo o manuseio de chaves e as escolhas de algoritmos. Quem chama não pode escolher algoritmos nem passar chaves brutas. Esse padrão de encapsulamento (wrapper) reduz o uso indevido: os desenvolvedores não podem usar por acidente um hash fraco nem comparar tags com a igualdade comum. Marcus lembra a ela que o wrapper delega ao hmac e ao hashlib da biblioteca padrão, que implementam a RFC 2104 e o FIPS 180-4, em vez de reimplementar qualquer primitiva.

9.2 Erros que não vazam

Quando a verificação falha, o serviço não deve dizer a quem chamou o motivo, por exemplo se o identificador do medidor era desconhecido ou se a tag estava errada, porque erros detalhados ajudam os atacantes a sondar o sistema. A função de verificação de Aiyana devolve a quem chama apenas verdadeiro ou falso e escreve o motivo detalhado num log protegido. Ela também garante que as exceções nunca incluam material de chave nem leituras completas em suas mensagens. Essas regras refletem um princípio mais amplo: em código de segurança, a conveniência para a depuração não pode virar informação para os atacantes.

9.3 Testar código criptográfico

Aiyana escreve três tipos de teste. Os testes de resposta conhecida conferem seu wrapper contra vetores publicados, como os valores da RFC 4231 para o HMAC-SHA256, confirmando o uso correto. Os testes negativos conferem que uma leitura alterada, uma chave errada ou uma tag truncada falham. Os testes de propriedade geram muitas leituras aleatórias e confirmam que gerar a tag e depois verificar sempre dá certo. Ela aprende que os testes negativos muitas vezes faltam na prática, de modo que uma função de verificação que sempre devolve verdadeiro poderia passar em todos os testes positivos. Sua suíte de testes roda a cada mudança, na integração contínua.

Exemplo resolvido

O wrapper de Aiyana expõe apenas a geração de tag e a verificação, devolve apenas verdadeiro ou falso, registra os detalhes de forma privada e passa nos testes de resposta conhecida, negativos e de propriedade.

Caso sintético. O serviço e o wrapper são inventados; a RFC 2104 e o FIPS 180-4 são reais.

Erros e limites

Wrappers podem esconder bugs tanto quanto complexidade; eles precisam ser revisados e testados. Uma suíte de testes sem casos negativos não consegue pegar um verificador que aceita tudo.

Exercícios

Síntese

A programação criptográfica segura encapsula bibliotecas avaliadas, revela pouco nas falhas e comprova o comportamento com testes positivos e negativos.

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

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

Continue para a próxima aula já escrita.