Parte II · 1 — Primitivas simétricas

draft

Uma chave, partilhada pelos dois lados. É o cavalo de trabalho da confidencialidade: rápida, madura e — quando usada com o modo certo — segura. Aqui estão as cifras e, mais importante, como não errar ao usá-las.


1.1 Duas famílias: bloco e fluxo

A criptografia simétrica usa a mesma chave secreta para cifrar e decifrar. Há duas formas de construir a cifra:

  • Cifra de bloco — opera em blocos de tamanho fixo (o AES usa 128 bits).

    Para cifrar dados maiores que um bloco, precisa de um modo de operação (seção 1.3). Exemplos: AES, o veterano DES (hoje inseguro).

  • Cifra de fluxo — gera um keystream pseudoaleatório que é combinado

    (XOR) com o plaintext, bit a bit. Exemplo moderno: ChaCha20.

Na prática a fronteira é fluida: uma cifra de bloco em modo contador (CTR) vira uma cifra de fluxo. O importante não é a família, é a construção completa que se usa.


1.2 Como uma cifra de bloco funciona: SPN e Feistel

Uma cifra de bloco é uma permutação parametrizada pela chave que aplica os princípios de Shannon (confusão e difusão) em várias rodadas. Duas estruturas dominam:

  • Rede de substituição-permutação (SPN) — cada rodada faz substituição

    (S-boxes → confusão) e permutação/mistura (→ difusão). É a estrutura do AES.

  • Rede de Feistel — divide o bloco em duas metades e processa uma com uma

    função da outra, alternando. Permite que cifrar e decifrar usem o mesmo circuito. É a estrutura do DES.

SPN × Feistel: as duas estruturas de cifra de bloco


1.3 O AES e a escolha de cifra

O AES (Advanced Encryption Standard, 2001 — originalmente Rijndael) é a cifra de bloco padrão do mundo: bloco de 128 bits, chaves de 128192256 bits, 101214 rodadas. Tem aceleração em hardware (instruções AES-NI) na maioria das CPUs, o que o torna rápido e constant-time por construção.

Cifra Quando usar
AES-256 (em modo AEAD) Default geral; ideal com AES-NI no hardware.
ChaCha20 (em AEAD, com Poly1305) Quando não há AES-NI (mobile, embarcado) — rápida em software puro e resistente a canais laterais de cache.

Nunca escolha "uma cifra" sozinha. Escolha uma construção AEAD completa (próxima seção) — AES-256-GCM ou ChaCha20-Poly1305.


1.4 Modos de operação — onde mais se erra

Uma cifra de bloco só sabe cifrar um bloco. O modo estende isso para mensagens reais — e é a fonte número um de vulnerabilidades de quem implementa.

Modo Veredito Por quê
ECB ❌ nunca Blocos iguais → ciphertexts iguais. Vaza padrões (o famoso "pinguim ECB").
CBC ⚠️ legado Encadeia blocos; precisa de IV aleatório e, sozinho, não autentica (sujeito a padding-oracle).
CTR ⚠️ só com MAC Vira cifra de fluxo; nunca reutilizar (nonce, chave). Sem autenticação por si.
GCM / Poly1305 AEAD — cifra e autentica de uma vez. O default moderno.

1.5 AEAD: cifrar e autenticar juntos

A lição mais cara da história da criptografia aplicada: cifrar sem autenticar é inseguro. Um adversário que não consegue ler a mensagem muitas vezes consegue alterá-la de forma útil (ataques de maleabilidade, padding-oracle).

AEAD (Authenticated Encryption with Associated Data) resolve isso numa primitiva só. Ela recebe quatro coisas e devolve duas:

AEAD: entradas (chave, nonce, plaintext, dados associados) e saídas (ciphertext, tag)

  • Chave — o segredo simétrico.
  • Noncenumber used once: público, mas jamais repetido com a mesma

    chave. Repetir um nonce em GCM é catastrófico (revela o segredo de autenticação). É o erro fatal mais comum.

  • Plaintext — o que será cifrado.
  • Associated data (AAD) — cabeçalhos que precisam ser

    autenticados mas não cifrados (ex.: o destinatário de um pacote).

Saída: o ciphertext + uma tag de autenticação. Na decifragem, se a tag não confere, a operação falha por inteiro — nada de plaintext parcial.

Regra de ouro da simétrica: use AES-256-GCM ou ChaCha20-Poly1305, com um nonce que nunca se repete por chave (contador ou aleatório de 96+ bits), e deixe a biblioteca gerenciar a tag. Tudo abaixo disso é pedir um CVE.


Referência densa: estruturas, DES/3DES, todos os modos e os parâmetros de GCMCCM estão em [04-simetrica](..08-referencia/04-simetrica.md). A seguir: Hash, MAC e KDF — a outra metade do mundo simétrico, onde mora a integridade.