◇ OpenCyber Academy
Graduação · Capítulo 3 · Português

Capítulo 3 — Programaçã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 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

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.