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
-
EX025 — Benefício do wrapper. Como o wrapper reduz o uso indevido? Rubrica: 3 = quem chama não pode escolher algoritmos, passar chaves brutas nem comparar tags de forma insegura;; 2 = esconde detalhes;; 1 = mais rápido;; 0 = nenhuma.
-
EX026 — Falha silenciosa. Por que a verificação devolve apenas verdadeiro ou falso a quem chama? Rubrica: 3 = motivos detalhados ajudam atacantes a sondar; os detalhes vão para logs protegidos;; 2 = segurança;; 1 = mais simples;; 0 = nenhuma.
-
EX027 — Testes negativos ausentes. Contra que perigo os testes negativos protegem? Rubrica: 3 = um verificador que sempre devolve verdadeiro passar em todos os testes positivos;; 2 = bugs;; 1 = vago;; 0 = nenhuma.
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.