Capítulo 8 — Criptografia e serviços de confiança: modos de falha
Mapa da aula
Aula 08 publicada. Mapa, exemplo, EX029.
flowchart TD
N0["8.1 Quatro classes de falha"]
N1["8.2 Nonces e aleatoriedade"]
N2["8.3 Primeiras respostas"]
N3["Síntese"]
N0 --> N1 --> N2 --> N3
N3 --> EX["Exemplo resolvido"]
EX --> Q["Exercício EX029"]
Desenho lógico
flowchart LR
N0["8.1 Quatro classes de falha"]
N1["8.2 Nonces e aleatoriedade"]
N2["8.3 Primeiras respostas"]
N3["Síntese"]
N0 --> N1 --> N2 --> N3 --> Q["EX029"]
[8.1 Quatro classes de falha]
|
v
[8.2 Nonces e aleatoriedade]
|
v
[8.3 Primeiras respostas]
|
v
[Síntese]
|
v
[Exemplo resolvido] --> [Exercício EX029]
Objetivos de aprendizagem
Você vai (1) classificar as falhas criptográficas como expiração, incompatibilidade, má configuração ou comprometimento; (2) explicar em termos simples a reutilização de nonces e a aleatoriedade fraca; (3) escolher uma primeira resposta para cada classe.
8.1 Quatro classes de falha
Priya agrupa os incidentes anteriores da Lumen em quatro classes. Expiração: um certificado ou uma chave passou da data final, então os clientes o recusaram. Incompatibilidade: o certificado não cobria o nome do host, ou a cadeia estava incompleta. Má configuração: um servidor permitia versões obsoletas do protocolo, ou um script desativava a verificação. Comprometimento: uma chave privada ou um segredo compartilhado vazou. Tomás nota que as três primeiras são operacionais e normalmente barulhentas, porque os usuários veem erros, enquanto o comprometimento costuma ser silencioso. Essa diferença molda o monitoramento: as falhas barulhentas precisam de reparo rápido, e as silenciosas precisam de controles de detecção, como o monitoramento de transparência e os logs de acesso às chaves.
8.2 Nonces e aleatoriedade
Algumas falhas vêm de usos indevidos dentro do software, e não das configurações. O AES-GCM, descrito na NIST SP 800-38D, exige que um nonce nunca se repita sob a mesma chave; uma repetição pode revelar a relação entre duas mensagens e permite que um atacante forje etiquetas de autenticação. As chaves e os nonces precisam vir de um gerador criptograficamente seguro, como a fonte do sistema operacional encapsulada pelo módulo secrets do Python, e não do random, que é previsível. Tomás não vai escrever esse tipo de código para produção, mas precisa reconhecer esses erros nos avisos dos fornecedores e nas revisões de código e saber que eles exigem uma correção do fornecedor, e não um ajuste de configuração.
8.3 Primeiras respostas
Para a expiração, renove e implante o certificado e depois acrescente monitoramento. Para a incompatibilidade, emita de novo com os nomes corretos ou corrija a cadeia servida pelo host. Para a má configuração, mude a configuração por meio do controle de mudanças e teste de novo. Para o comprometimento, revogue o certificado ou rotacione o segredo imediatamente, descubra onde a chave foi exposta e revise os logs em busca de uso indevido. Tomás escreve isso num cartão plastificado para o turno da noite. Ele acrescenta que um técnico que não tenha certeza se um caso é má configuração ou comprometimento deve tratá-lo como comprometimento até que um engenheiro sênior decida.
Exemplo resolvido
Tomás separa seis incidentes sintéticos nas quatro classes e escreve num cartão de uma página a primeira resposta correspondente a cada um.
Caso sintético. Os incidentes são inventados; a SP 800-38D é real.
Erros e limites
As classes se sobrepõem; um certificado expirado substituído às pressas por um autoassinado vira má configuração. Um comprometimento silencioso pode nunca ser detectado.
Exercícios
-
EX029 — Barulhentas e silenciosas. Que classe de falha costuma ser silenciosa, e o que isso implica? Rubrica: 3 = comprometimento; exige controles de detecção, como CT e logs de acesso às chaves;; 2 = nomeia comprometimento;; 1 = nomeia expiração;; 0 = nenhuma.
-
EX030 — Regra do nonce do GCM. Que regra o AES-GCM impõe aos nonces? Rubrica: 3 = nunca repetir um nonce sob a mesma chave;; 2 = unicidade;; 1 = vago;; 0 = nenhuma.
-
EX031 — Módulo random. Por que o módulo random do Python é errado para chaves? Rubrica: 3 = é previsível; use o secrets, que encapsula o CSPRNG do sistema operacional;; 2 = previsível;; 1 = tudo bem;; 0 = nenhuma.
-
EX032 — Caso incerto. O que um técnico deve fazer quando não tem certeza se um caso é comprometimento? Rubrica: 3 = tratá-lo como comprometimento até que um engenheiro sênior decida;; 2 = escalar;; 1 = esperar;; 0 = nenhuma.
Síntese
Classificar uma falha como expiração, incompatibilidade, má configuração ou comprometimento diz ao técnico quão urgente ela é e o que fazer primeiro.
Continue estudando — aula 08 (capítulo 08 de 18)
← Capítulo 07 · Índice das aulas · Capítulo 09 →
Continue para a próxima aula já escrita.