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

Capítulo 28 — Criptografia e serviços de confiança: implementação I

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 28 — Criptografia e serviços de confiança: implementação I

Mapa da aula

Aula 28 publicada. Mapa, exemplo, EX082.

flowchart TD
  N0["28.1 O caminho de atualização do firmware"]
  N1["Laboratório — Verificação do manifesto"]
  N2["28.2 Ler a verificação do manifesto"]
  N3["28.3 Detalhes de integração"]
  N4["Síntese"]
  N0 --> N1 --> N2 --> N3 --> N4
  N4 --> EX["Exemplo resolvido"]
  EX --> Q["Exercício EX082"]

Desenho lógico

flowchart LR
  N0["28.1 O caminho de atualização do firmware"]
  N1["Laboratório — Verificação do manifesto"]
  N2["28.2 Ler a verificação do manifesto"]
  N3["28.3 Detalhes de integração"]
  N4["Síntese"]
  N0 --> N1 --> N2 --> N3 --> N4 --> Q["EX082"]
[28.1 O caminho de atualização do firmware]
    |
    v
[Laboratório — Verificação do manifesto]
    |
    v
[28.2 Ler a verificação do manifesto]
    |
    v
[28.3 Detalhes de integração]
    |
    v
[Síntese]
    |
    v
[Exemplo resolvido] --> [Exercício EX082]

Objetivos de aprendizagem

Você vai (1) implementar a verificação do firmware com um manifesto de hashes e uma assinatura; (2) explicar por que o manifesto precisa ser assinado; (3) integrar a verificação ao processo de atualização.

28.1 O caminho de atualização do firmware

Aiyana implementa a primeira parte do caminho de atualização do firmware. O sistema de build produz uma imagem e um manifesto que contém a versão e o digest SHA-256 da imagem. O manifesto é assinado com a chave de assinatura intermediária. Os medidores baixam os dois, verificam a assinatura do manifesto contra a cadeia embutida de raiz e intermediária, conferem que a versão é mais nova e depois calculam o hash da imagem e o comparam com o digest do manifesto. Só se todas as verificações passarem o medidor grava a imagem no seu slot inativo e reinicia a partir dele.

Laboratório — Verificação do manifesto

"""Verify a synthetic firmware image against a SHA-256 manifest before install (FIPS 180-4)."""
import hashlib
IMAGE = b"RIDGEWAY-METER-FW v3.2.1\n" + bytes(range(256)) * 4
MANIFEST = {"version": "3.2.1", "sha256": hashlib.sha256(IMAGE).hexdigest()}

def check(img):
    return hashlib.sha256(img).hexdigest() == MANIFEST["sha256"]

def main():
    print("manifest digest", MANIFEST["sha256"][:20], "...")
    print("intact image accepted:", check(IMAGE))
    bad = bytearray(IMAGE); bad[100] ^= 1
    print("one flipped bit accepted:", check(bytes(bad)))
    print("note: the manifest itself must be signed, or an attacker swaps both")

if __name__ == "__main__":
    main()

Execute com python3 lab_manifest.py. Saída verificada:

manifest digest 29de505e903e58072161 ...
intact image accepted: True
one flipped bit accepted: False
note: the manifest itself must be signed, or an attacker swaps both

28.2 Ler a verificação do manifesto

O laboratório calcula o digest SHA-256 de uma imagem sintética e o guarda num manifesto. A imagem intacta é aceita; inverter um único bit faz a verificação falhar, ilustrando a propriedade de avalanche dos hashes do FIPS 180-4. A última linha do laboratório enuncia a lição principal: um hash sozinho prova apenas que a imagem coincide com o manifesto. Um atacante que consiga substituir tanto a imagem quanto um manifesto não assinado vence com facilidade. É a assinatura sobre o manifesto, feita com ECDSA ou Ed25519 numa biblioteca avaliada, que vincula o digest à Ridgeway.

28.3 Detalhes de integração

Aiyana trata dos detalhes práticos. Os medidores mantêm dois slots de firmware, para que uma atualização que falhe possa voltar à versão anterior sem inutilizar o aparelho. A verificação acontece antes da gravação e de novo na inicialização. Imagens grandes têm o hash calculado em blocos, para caber na memória do medidor, usando o método de atualização incremental do hashlib. Os medidores reportam a versão instalada e o resultado da verificação, alimentando a medida de sucesso do firmware do Capítulo 20. Ela documenta que a verificação de assinaturas usa no medidor a biblioteca certificada do fornecedor, e não o código dela. Os relatos de verificações que falharam vão para o sistema de alertas descrito anteriormente.

Exemplo resolvido

Aiyana implementa a verificação baseada em manifesto, com assinatura, verificação de versão, dois slots e nova verificação na inicialização, e mostra que um único bit invertido faz o hash falhar.

Caso sintético. A imagem e o manifesto são inventados; o FIPS 180-4 é real.

Erros e limites

Um hash sem assinatura não autentica nada diante de um atacante ativo. Os dois slots precisam de proteção contra rollback, para que os atacantes não consigam forçar versões antigas.

Exercícios

Síntese

A verificação do firmware liga um hash da imagem a um manifesto assinado, conferido antes da instalação e na inicialização, com slots seguros de reversão.

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

← Capítulo 27 · Índice das aulas · Capítulo 29 →

Continue para a próxima aula já escrita.