Capítulo 4 — Scripts e formatos de dados
Mapa da aula
Aula 04 publicada. Mapa, exemplo, EX013.
flowchart TD
N0["4.1 Codificação, hash, cifração"]
N1["4.2 Manifestos de integridade"]
N2["Laboratório — Verificação de manifesto SHA-256"]
N3["4.3 Ler arquivos PEM"]
N4["Síntese"]
N0 --> N1 --> N2 --> N3 --> N4
N4 --> EX["Exemplo resolvido"]
EX --> Q["Exercício EX013"]
Desenho lógico
flowchart LR
N0["4.1 Codificação, hash, cifração"]
N1["4.2 Manifestos de integridade"]
N2["Laboratório — Verificação de manifesto SHA-256"]
N3["4.3 Ler arquivos PEM"]
N4["Síntese"]
N0 --> N1 --> N2 --> N3 --> N4 --> Q["EX013"]
[4.1 Codificação, hash, cifração]
|
v
[4.2 Manifestos de integridade]
|
v
[Laboratório — Verificação de manifesto SHA-256]
|
v
[4.3 Ler arquivos PEM]
|
v
[Síntese]
|
v
[Exemplo resolvido] --> [Exercício EX013]
Objetivos de aprendizagem
Você vai (1) distinguir codificação, hash e cifração nos dados que encontra no dia a dia; (2) construir um manifesto de integridade SHA-256 com Python; (3) ler PEM e Base64 com segurança.
4.1 Codificação, hash, cifração
Tomás vê com frequência cadeias longas nos arquivos de configuração e precisa distingui-las. Base64 e hexadecimal são codificações: mudam a representação, e qualquer um pode revertê-las sem chave. Um hash como o SHA-256, especificado no FIPS 180-4, mapeia qualquer entrada num resumo fixo de 32 bytes e não pode ser revertido, mas qualquer um pode calculá-lo, então ele só prova integridade quando o próprio resumo esperado é confiável. A cifração precisa de uma chave para ser revertida. Certa vez, um colega chamou de cifrada uma senha em Base64; Tomás hoje explica que decodificá-la leva um comando e nenhum segredo.
4.2 Manifestos de integridade
Os arquivos noturnos dos parceiros chegam por SFTP, e de vez em quando uma transferência truncada passa despercebida. Priya sugere um manifesto: o remetente lista cada nome de arquivo com seu resumo SHA-256, e o destinatário recalcula e compara. Tomás escreve um pequeno script que faz isso sobre dados sintéticos. Um manifesto detecta de forma confiável a corrupção acidental. Contra um atacante capaz de alterar tanto o arquivo quanto o manifesto, ele não prova nada, então em produção o próprio manifesto precisa ser assinado ou entregue por um canal autenticado. O laboratório abaixo mostra tanto o caso de sucesso quanto uma alteração detectada.
Laboratório — Verificação de manifesto SHA-256
# Synthetic SHA-256 manifest check (FIPS 180-4 via hashlib). Teaching only.
import hashlib
files = {"routes_mon.csv": b"depot,route\nN1,12\nN2,7\n",
"routes_tue.csv": b"depot,route\nN1,13\nN2,7\n"}
manifest = {n: hashlib.sha256(d).hexdigest() for n, d in files.items()}
files["routes_tue.csv"] = b"depot,route\nN1,18\nN2,7\n" # simulated change in transit
for name, data in files.items():
ok = hashlib.sha256(data).hexdigest() == manifest[name]
print(f"{name}: {'OK' if ok else 'CHANGED'} {manifest[name][:16]}...")
Execute com python3 lab_manifest.py. Saída verificada:
routes_mon.csv: OK 71e12cbcb1238386...
routes_tue.csv: CHANGED 03db2f9cd00a57f9...
4.3 Ler arquivos PEM
Certificados e chaves normalmente chegam em PEM: texto em Base64 entre linhas BEGIN e END. Tomás aprende a olhar o cabeçalho antes de qualquer outra coisa. BEGIN CERTIFICATE é público e pode ser compartilhado; BEGIN PRIVATE KEY ou BEGIN RSA PRIVATE KEY é secreto e nunca pode ser colado num chamado, num chat ou num decodificador online. Quando precisa inspecionar um certificado, ele usa ferramentas locais, e não sites. Decodificar o PEM mostra os bytes DER, que ferramentas como openssl x509 -text transformam em campos legíveis, como titular, emissor e datas de validade.
Exemplo resolvido
Tomás executa o laboratório do manifesto, vê um arquivo de parceiro sinalizado como alterado e explica a Priya por que seria necessário um manifesto assinado contra um atacante deliberado.
Caso sintético. Os nomes e os conteúdos dos arquivos no laboratório são sintéticos.
Erros e limites
Manifestos de hash não autenticam o remetente. Manifestos com SHA-1 e MD5 estão obsoletos para fins de segurança; use SHA-256 ou mais forte.
Exercícios
-
EX013 — Senha em Base64. Uma configuração guarda uma cadeia em Base64 rotulada como senha cifrada. O que está errado? Rubrica: 3 = Base64 é uma codificação reversível, sem chave; não é cifração;; 2 = diz que não é cifrada;; 1 = concorda que é cifrada;; 0 = nenhuma.
-
EX014 — Resultado do manifesto. No laboratório, que arquivo foi sinalizado, e por quê? Rubrica: 3 = routes_tue.csv, seu resumo deixou de coincidir depois que um caractere mudou;; 2 = nomeia o arquivo;; 1 = nenhum arquivo;; 0 = nenhuma.
-
EX015 — Limite do manifesto. Que ataque um manifesto não assinado não consegue impedir? Rubrica: 3 = um atacante que substitui tanto o arquivo quanto o manifesto;; 2 = menciona atacante;; 1 = diz que nenhum;; 0 = nenhuma.
-
EX016 — Conferência do cabeçalho PEM. Que cabeçalho PEM nunca pode ser colado num chamado? Rubrica: 3 = qualquer cabeçalho PRIVATE KEY, porque é secreto;; 2 = menciona privada;; 1 = cabeçalho de certificado;; 0 = nenhuma.
Síntese
Saber se os dados estão codificados, passaram por hash ou estão cifrados diz a um técnico o que eles podem provar e quem pode revertê-los.
Continue estudando — aula 04 (capítulo 04 de 18)
← Capítulo 03 · Índice das aulas · Capítulo 05 →
Continue para a próxima aula já escrita.