OpenCyber Academy
Graduação · Capítulo 17 · Português
Código do curso: OCA-115Capítulo 17: OCA-115-C017

Capítulo 17 — Conceitos de criptografia

Ensino gratuito e aberto para quem deseja proteger pessoas e tecnologias. Não é preciso criar uma conta para estudar ou consultar as respostas.

Mapa da aula

Aula 17 publicada. Mapa, exemplo, EX033.

flowchart TD
  N0["17.1 As ferramentas e as suas garantias"]
  N1["17.2 Do que os sistemas de controle precisam"]
  N2["17.3 As chaves são a parte difícil"]
  N3["Síntese do capítulo"]
  N0 --> N1 --> N2 --> N3
  N3 --> EX["Exemplo resolvido"]
  EX --> Q["Exercício EX033"]

Desenho lógico

flowchart LR
  N0["17.1 As ferramentas e as suas garantias"]
  N1["17.2 Do que os sistemas de controle precisam"]
  N2["17.3 As chaves são a parte difícil"]
  N3["Síntese do capítulo"]
  N0 --> N1 --> N2 --> N3 --> Q["EX033"]
[17.1 As ferramentas e as suas garantias]
    |
    v
[17.2 Do que os sistemas de controle precisam]
    |
    v
[17.3 As chaves são a parte difícil]
    |
    v
[Síntese do capítulo]
    |
    v
[Exemplo resolvido] --> [Exercício EX033]

Objetivos de aprendizagem e conexão

Depois deste capítulo, você consegue (1) explicar o que hash, cifração simétrica, códigos de autenticação de mensagens, cifração de chave pública e assinaturas digitais garantem e não garantem; (2) explicar por que a integridade e a autenticidade, mais que o sigilo, são as necessidades criptográficas dos sistemas de controle; (3) usar HMAC com um número de sequência para rejeitar comandos alterados e repetidos; e (4) tornar um log evidente a adulterações com uma cadeia de hashes e uma âncora externa. O capítulo se apoia nos Capítulos 5 e 8 e prepara o Capítulo 24 (controles) e o Capítulo 29 (operações).

17.1 As ferramentas e as suas garantias

Uma função de hash criptográfica como a SHA-256 mapeia qualquer entrada num resumo de tamanho fixo; é inviável encontrar duas entradas com o mesmo resumo ou recuperar a entrada (FIPS 180-4). Um hash sozinho não prova nada sobre quem produziu os dados: qualquer um pode recalculá-lo. A cifração simétrica (por exemplo, o AES, FIPS 197) fornece confidencialidade com uma chave compartilhada. Um código de autenticação de mensagem (MAC) como o HMAC (RFC 2104; FIPS 198-1) permite que quem tem a chave compartilhada verifique que uma mensagem foi produzida por outro detentor da chave e não foi alterada. A criptografia de chave pública (Diffie and Hellman, 1976; Rivest, Shamir and Adleman, 1978) permite as assinaturas digitais: qualquer um com a chave pública pode verificar, só quem tem a chave privada pode assinar — a base do firmware assinado e dos certificados. Protocolos como o TLS 1.3 combinam essas ferramentas para fornecer canais autenticados e cifrados (RFC 8446).

17.2 Do que os sistemas de controle precisam

Para um comando de disjuntor, o sigilo raramente é o ponto; o que importa é a autenticidade (veio do centro de controle), a integridade (não foi alterado) e o frescor (não é um comando antigo repetido). Um MAC fornece as duas primeiras. O frescor precisa de um número de sequência ou de um carimbo de tempo dentro da mensagem autenticada, e de um receptor que rejeite tudo o que não for mais novo que o último valor aceito. Sem frescor, um atacante que gravou o "OPEN" válido de ontem pode repeti-lo hoje.

O Laboratório 8 demonstra as duas coisas: o nome de disjuntor alterado falha no MAC, e a sequência 41 é rejeitada depois de já ter sido aceita.

17.3 As chaves são a parte difícil

A criptografia desloca o problema de proteger os dados para proteger as chaves. Quem gera as chaves, onde elas ficam guardadas, como são trocadas e revogadas, e o que acontece quando a chave de um dispositivo de campo vaza — isso determina a segurança real. As chaves nunca devem estar fixas em código publicado (a chave do Laboratório 8 é deliberadamente pública), nunca devem ser compartilhadas entre todos os dispositivos e devem ficar em hardware sempre que possível. Planejar com antecedência também importa: o NIST finalizou os seus primeiros padrões de criptografia pós-quântica em 2024 (NIST, 2024), e uma infraestrutura com vida útil de 20 anos precisa da capacidade de trocar de algoritmo ("agilidade criptográfica").

17.4 Exemplo resolvido e Laboratório 8 (sintético)

Este caso é sintético. A CPN autentica os comandos de disjuntor com HMAC-SHA-256 sobre uma mensagem que contém um número de sequência e mantém um log encadeado por hashes das ações dos operadores, cuja cabeça mais recente é copiada de hora em hora para um servidor separado (a âncora).

# Lab 8 - HMAC message authentication and a hash-chained log (synthetic; DEMO KEY ONLY, offline)
import hmac, hashlib
KEY = b"demo-key-published-in-a-textbook-never-use"
def tag(msg): return hmac.new(KEY, msg, hashlib.sha256).hexdigest()[:16]
cmd = b"seq=41;breaker=F7;op=OPEN"
t = tag(cmd)
print("tag:", t)
print("valid original:", hmac.compare_digest(t, tag(cmd)))
print("valid altered :", hmac.compare_digest(t, tag(b"seq=41;breaker=F2;op=OPEN")))
last_seq = 41
print("replay of seq 41 accepted?", 41 > last_seq)
# hash chain: each entry commits to the previous head
def chain(entries):
    head, heads = "0" * 64, []
    for e in entries:
        head = hashlib.sha256((head + e).encode()).hexdigest(); heads.append(head)
    return heads
log = ["08:00 login ana", "08:05 setpoint PS2 4.1m", "08:09 logout ana"]
good = chain(log)
log[1] = "08:05 setpoint PS2 2.0m"
bad = chain(log)
print("anchored head:", good[-1][:12], "| recomputed after edit:", bad[-1][:12])
print("first differing entry:", next(i for i, (a, b) in enumerate(zip(good, bad)) if a != b))

Saída esperada:

tag: 347e6a26d1844d03
valid original: True
valid altered : False
replay of seq 41 accepted? False
anchored head: c5754d1d1639 | recomputed after edit: 65e0b2a20fac
first differing entry: 1

O nome de disjuntor alterado falha na verificação; o número de sequência repetido é rejeitado; o log editado já não corresponde à cabeça ancorada, e a comparação mostra a primeira entrada alterada. Truncar a tag em 64 bits mantém a impressão curta; os sistemas reais usam a tag completa ou uma truncagem padronizada. A cadeia de hashes detecta a edição somente se a âncora estiver fora do alcance de quem edita — alguém que controla tanto o log quanto a âncora consegue reconstruir a cadeia inteira.

17.5 Erros comuns e limites

No Laboratório 8, um SHA-256 simples do comando permitiria a quem o altera calcular um resumo novo. O MAC sem seq= aceitaria o OPEN de ontem. O laboratório usa hmac.compare_digest em vez de ==. Uma única chave em todas as RTUs significa que uma chave vazada compromete a rede. E a cifração não ajudaria se a própria IHM do centro de controle enviasse comandos forjados.

Exercícios — capítulo 17

EX033 — Escolha a primitiva. Objetivo: casar necessidades com ferramentas. Entradas: (a) atualizações de firmware das bombas de infusão do CVH vindas do fabricante; (b) comandos do centro de controle da CPN para as suas próprias RTUs; (c) prontuários num notebook perdido; (d) detectar edições num log de auditoria. Etapas: escolha uma primitiva para cada um e justifique. Evidência esperada: quatro escolhas. Rubrica: 3 = assinaturas, MAC com frescor (ou um canal autenticado), cifração simétrica com proteção da chave, cadeia de hashes com âncora externa; 2 = uma errada; 1 = duas erradas; 0 = nada.

EX034 — Quebre a âncora. Objetivo: raciocinar sobre a confiança na âncora. Entradas: Laboratório 8. Etapas: explique como um administrador com acesso de escrita tanto ao servidor de logs quanto à âncora poderia esconder uma edição e proponha duas mudanças de projeto que impeçam isso. Evidência esperada: descrição do ataque e mudanças. Rubrica: 3 = recalcular a cadeia e sobrescrever a âncora; mudanças: âncora mantida por outra equipe/outro sistema com armazenamento só de acréscimo, publicação externa periódica ou carimbos de tempo assinados; 2 = uma mudança; 1 = só a descrição; 0 = nada.

Síntese do capítulo

Cada primitiva garante algo específico: os hashes detectam mudanças só contra uma referência confiável, os MACs e as assinaturas dão autenticidade, os números de sequência dão frescor e a cifração dá sigilo. Nos sistemas de controle, a autenticidade, a integridade e o frescor são o que mais importa, e a segurança real depende da gestão de chaves e de manter as âncoras fora do alcance de um atacante.

Respostas comentadas

EX033. (a) Assinaturas digitais — qualquer um pode verificar, só o fabricante pode assinar. (b) MAC com números de sequência (ou um canal com autenticação mútua, como TLS, onde os dispositivos o suportarem) — autenticidade, integridade e atualidade. (c) Cifração simétrica de disco, com a chave protegida por hardware e pela autenticação do usuário. (d) Cadeia de hashes com uma âncora mantida externamente (ou entradas de log assinadas).

EX034. Um administrador com acesso tanto ao log quanto à âncora edita uma entrada, recalcula todas as cabeças seguintes e sobrescreve a âncora com a nova cabeça; a verificação então passa. Prevenção: manter a âncora num sistema administrado por outra equipe, com armazenamento só de acréscimo; publicar ou contra-assinar periodicamente as cabeças com um serviço confiável de carimbo de tempo; alertar sobre qualquer reescrita da âncora.