Capítulo 3 — Programação I
Mapa da aula
Aula 03 publicada. Mapa, exemplo, EX007.
flowchart TD
N0["3.1 Bytes e codificações"]
N1["3.2 Hash com o hashlib"]
N2["3.3 Uma ferramenta de integridade de arquivos"]
N3["Síntese"]
N0 --> N1 --> N2 --> N3
N3 --> EX["Exemplo resolvido"]
EX --> Q["Exercício EX007"]
Desenho lógico
flowchart LR
N0["3.1 Bytes e codificações"]
N1["3.2 Hash com o hashlib"]
N2["3.3 Uma ferramenta de integridade de arquivos"]
N3["Síntese"]
N0 --> N1 --> N2 --> N3 --> Q["EX007"]
[3.1 Bytes e codificações]
|
v
[3.2 Hash com o hashlib]
|
v
[3.3 Uma ferramenta de integridade de arquivos]
|
v
[Síntese]
|
v
[Exemplo resolvido] --> [Exercício EX007]
Objetivos de aprendizagem
Você vai (1) lidar com bytes, codificações e hexadecimal em Python; (2) calcular digests SHA-256 com o hashlib; (3) conferir os resultados contra vetores de teste publicados.
3.1 Bytes e codificações
Os primeiros programas de Priya mostram que os computadores armazenam texto como bytes, segundo uma codificação. A string "café" vira cinco bytes em UTF-8, porque o é precisa de dois. As funções criptográficas recebem bytes, então ela sempre escreve text.encode("utf-8") antes de calcular o hash. O hexadecimal exibe os bytes de forma legível, dois caracteres por byte. Ela pratica as conversões com bytes.hex() e bytes.fromhex(). Pequenos erros aqui, como calcular o hash de uma string lida de um arquivo com uma quebra de linha no final, produzem digests totalmente diferentes, o que a ensinou a imprimir os tamanhos e as formas hexadecimais ao depurar.
3.2 Hash com o hashlib
O hashlib do Python implementa o SHA-256 do FIPS 180-4. Priya calcula o digest da string vazia e de "abc" e os compara com os exemplos publicados com a norma: o digest de "abc" começa com ba7816bf. Coincidir com um vetor publicado prova que ela está chamando a função corretamente. Ela observa o efeito avalanche: trocar "abc" por "abd" muda cerca de metade dos 256 bits da saída. Ela aprende que os hashes são funções públicas, que qualquer pessoa pode calcular; um hash só prova a integridade quando o digest esperado vem de uma fonte confiável.
3.3 Uma ferramenta de integridade de arquivos
Priya escreve um pequeno programa que calcula o digest SHA-256 de cada arquivo de uma pasta e salva uma lista e, mais tarde, recalcula e relata as mudanças. Ela usa para os testes os arquivos sintéticos de exportação do catálogo da Tidewell. Os arquivos grandes são lidos em blocos e passados ao método update do objeto de hash, de modo que o uso de memória fica pequeno. Ela documenta um limite: um atacante que consiga modificar tanto os arquivos quanto a lista salva pode esconder as mudanças, então a lista precisa ficar guardada num lugar protegido ou ser assinada. Isso antecipa as assinaturas digitais, que aparecem mais adiante no curso.
Exemplo resolvido
Priya confirma suas chamadas ao SHA-256 contra o exemplo "abc" do FIPS 180-4, constrói um verificador de integridade de arquivos que lê em blocos e registra que a própria lista de digests precisa de proteção.
Caso sintético. Os arquivos do catálogo são inventados; o FIPS 180-4 é real.
Erros e limites
Hashes não escondem dados e não autenticam por si sós. Erros de codificação são a causa mais comum de digests que não coincidem.
Exercícios
-
EX007 — Tamanho em UTF-8. Por que "café" tem cinco bytes em UTF-8? Rubrica: 3 = o é ocupa dois bytes;; 2 = codificação;; 1 = quatro;; 0 = nenhuma.
-
EX008 — Conferência do vetor de teste. Como Priya confirmou que usou o SHA-256 corretamente? Rubrica: 3 = coincidiu com o digest do exemplo "abc" do FIPS 180-4, que começa com ba7816bf;; 2 = vetor coincidiu;; 1 = adivinhou;; 0 = nenhuma.
-
EX009 — Limite da ferramenta de integridade. Que limite o verificador de integridade tem? Rubrica: 3 = um atacante que modifica os arquivos e a lista de digests esconde as mudanças; a lista precisa ser protegida ou assinada;; 2 = proteger a lista;; 1 = vago;; 0 = nenhuma.
Síntese
O manuseio cuidadoso de bytes, o hash verificado e a consciência do que um resumo prova são as primeiras competências criptográficas de quem programa.
Continue estudando — aula 03 (capítulo 03 de 40)
← Capítulo 02 · Índice das aulas · Capítulo 04 →
Continue para a próxima aula já escrita.