◇ OpenCyber Academy
Graduação · Capítulo 8 · Português

Capítulo 8 — 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 8 — Programação II

Mapa da aula

Aula 08 publicada. Mapa, exemplo, EX022.

flowchart TD
  N0["8.1 APIs de alto nível"]
  N1["8.2 Estruturar com segurança"]
  N2["8.3 Testes negativos"]
  N3["Síntese"]
  N0 --> N1 --> N2 --> N3
  N3 --> EX["Exemplo resolvido"]
  EX --> Q["Exercício EX022"]

Desenho lógico

flowchart LR
  N0["8.1 APIs de alto nível"]
  N1["8.2 Estruturar com segurança"]
  N2["8.3 Testes negativos"]
  N3["Síntese"]
  N0 --> N1 --> N2 --> N3 --> Q["EX022"]
[8.1 APIs de alto nível]
    |
    v
[8.2 Estruturar com segurança]
    |
    v
[8.3 Testes negativos]
    |
    v
[Síntese]
    |
    v
[Exemplo resolvido] --> [Exercício EX022]

Objetivos de aprendizagem

Você vai (1) usar com segurança APIs criptográficas de alto nível; (2) estruturar o código para evitar usos indevidos; (3) escrever testes negativos.

8.1 APIs de alto nível

Priya aprende que as bibliotecas criptográficas oferecem primitivas de baixo nível e receitas de alto nível. As APIs de baixo nível exigem escolher modos, nonces e preenchimento, onde é fácil errar. As APIs de alto nível, como uma função de cifração autenticada que gera os nonces e devolve um único token, tornam o uso seguro o padrão. Para a ferramenta de exportação da Tidewell, ela usa a receita de cifração autenticada de uma biblioteca mantida, em vez de montar por conta própria o AES e um modo. A regra do curso é explícita: os estudantes aprendem como as primitivas funcionam, mas o código de produção usa APIs de alto nível avaliadas. Os colegas de equipe concordam em segui-la.

8.2 Estruturar com segurança

Priya isola a criptografia num módulo com uma interface pequena: protect(data) e unprotect(token). As chaves são carregadas do cofre de segredos do consórcio, nunca do código-fonte. Os erros em unprotect lançam uma única exceção genérica, para que quem chama não possa saber por que um token falhou. Ela escreve anotações de tipo que marcam os valores secretos e evita registrá-los em log. A revisão de código se concentra nesse módulo, que é pequeno o bastante para ser lido com cuidado. A estrutura faz com que futuras mudanças de algoritmo afetem um arquivo, e não a aplicação inteira.

8.3 Testes negativos

Priya escreve testes que devem falhar: tokens adulterados, tokens truncados, tokens protegidos com outra chave e entrada vazia. Cada um precisa ser rejeitado. Ela também testa que duas proteções dos mesmos dados produzem tokens diferentes, confirmando que os nonces são novos. Uma versão anterior de um colega passava em todos os testes positivos, mas devolvia os dados mesmo para tokens adulterados, porque pulava a verificação da tag. Os testes negativos pegaram isso. Ela os acrescenta à integração contínua, para que rodem a cada mudança. Cada teste tem um comentário de uma linha que explica seu propósito.

Exemplo resolvido

Priya usa uma receita de cifração autenticada de alto nível num pequeno módulo protect/unprotect, carrega as chaves de um cofre de segredos e pega, com testes negativos, uma verificação de tag que era pulada.

Caso sintético. A ferramenta de exportação é inventada.

Erros e limites

As APIs de alto nível ainda precisam de um gerenciamento de chaves correto. Os testes só provam aquilo que verificam.

Exercícios

Síntese

Um código criptográfico seguro se apoia em APIs de alto nível, num módulo pequeno e isolado e em testes negativos que comprovam a rejeição.

Continue estudando — aula 08 (capítulo 08 de 40)

← Capítulo 07 · Índice das aulas · Capítulo 09 →

Continue para a próxima aula já escrita.