Parte I · 2 — Objetivos e modelos de adversário
Segurança não é uma propriedade absoluta — é sempre contra um adversário definido. Esta seção torna precisos os objetivos do capítulo anterior e apresenta a régua com que se mede um esquema: o modelo de ameaça.
2.1 O princípio de Kerckhoffs
Auguste Kerckhoffs, em La Cryptographie Militaire (1883), estabeleceu o princípio que sustenta toda a criptografia moderna:
A segurança de um sistema deve depender apenas do segredo da chave — nunca do segredo do algoritmo.
O algoritmo deve poder cair nas mãos do inimigo sem comprometer nada. As reformulações modernas são célebres: "the enemy knows the system" (Shannon) e "security through obscurity is no security" (Schneier).
A consequência é direta e contra-intuitiva para iniciantes: algoritmos criptográficos devem ser públicos e escrutinados. A confiança vem de décadas de ataques fracassados sob luz pública — não de esconder o desenho. É também o porquê de "inventei minha própria cifra" ser sempre uma má ideia.
2.2 Os objetivos, formalmente
O capítulo anterior listou os objetivos pela pergunta do usuário. Aqui está o que cada um significa para o criptógrafo:
| Objetivo | Significado formal (informal) |
|---|---|
| Confidencialidade | O ciphertext não revela nenhuma informação útil sobre o plaintext a um adversário limitado. |
| Integridade | Qualquer alteração no dado é detectável com probabilidade esmagadora. |
| Autenticidade | Só quem tem a chave pode produzir um dado que verifica — prova a origem. |
| Não-repúdio | A prova de origem é verificável por terceiros (só assinaturas, não MACs). |
Duas propriedades avançadas, exigidas de protocolos modernos:
- Forward secrecy (FS): comprometer a chave de hoje não revela o tráfego
de ontem. Obtida descartando chaves de sessão efêmeras.
- Post-compromise security (PCS): após um comprometimento, o sistema *e
recupera*com uma nova troca de chaves. É o que o double ratchet do Signal garante.
MAC × assinatura — a diferença que mais confunde: ambos provam autenticidade. Mas um MAC usa uma chave compartilhada — quem verifica também poderia ter forjado, então não serve como prova a terceiros. Uma assinatura usa a chave privada do autor — só ele pôde produzi-la, logo dá não-repúdio. Precisa provar a um juiz quem assinou? Assinatura. Só precisa que você confie que veio do seu par? MAC (mais rápido).
2.3 O modelo de adversário
Provar segurança exige dizer o que o adversário pode fazer. Os modelos formam uma escada de poder crescente — um esquema seguro contra um modelo forte é seguro contra todos os mais fracos.
| Modelo | O adversário pode… | Padrão exigido hoje |
|---|---|---|
| COA (ciphertext-only) | Ver apenas ciphertexts. | Mínimo histórico. |
| KPA (known-plaintext) | Ver pares (plaintext, ciphertext). | — |
| CPA (chosen-plaintext) | Escolher plaintexts e ver os ciphertexts. | Base da confidencialidade moderna. |
| CCA (chosen-ciphertext) | Escolher também ciphertexts e ver as decifragens. | Exigido de qualquer cifra séria. |
O alvo de segurança moderno para cifras é IND-CCA2 (indistinguibilidade sob ataque adaptativo de ciphertext escolhido): o adversário não distingue a cifra de duas mensagens à sua escolha, mesmo podendo pedir decifragens de outros ciphertexts. É por isso que AEAD (cifra + autenticação juntas, como AES-GCM) é o default — cifrar sem autenticar deixa brechas de CCA reais.
Além do modelo lógico, há o adversário físico: ataques de canal lateral (side-channel) — tempo de execução, consumo de energia, emanação eletromagnética, cache. Uma cifra matematicamente perfeita vaza a chave se a implementação levar tempo diferente conforme os bits do segredo. Daí a exigência de código constant-time.
2.4 Segurança perfeita × segurança computacional
Há dois níveis de garantia, e quase tudo na prática é o segundo:
- Segurança perfeita (incondicional): o ciphertext não dá nenhuma
informação sobre o plaintext, nem a um adversário com poder de computação infinito. O One-Time Pad alcança isso — mas o teorema de Shannon prova o preço: a chave precisa ser tão longa quanto a mensagem, aleatória e usada uma só vez. Impraticável em escala.
- Segurança computacional: quebrar o esquema é possível em teoria, mas
exige recursos inviáveis (ex.: \(2^{128}\) operações). É o que todo sistema real usa. A segurança repousa em problemas que acreditamos serem difíceis (fatoração, logaritmo discreto) — não em impossibilidade provada.
Essa distinção é o calcanhar de Aquiles da era pós-quântica: os problemas difíceis que sustentam RSA e curvas elípticas deixam de ser difíceis para um computador quântico (algoritmo de Shor) — daí a Parte IV deste compêndio.
2.5 Confusão e difusão
Como uma cifra concreta consegue parecer aleatória? Shannon (1949) deu os dois princípios de desenho que toda cifra de bloco moderna segue:
- Confusão: a relação entre a chave e o ciphertext deve ser *omplexa e
não-linear — cada bit da saída depende de muitos bits da chave. Implementada por S-boxes*(substituição).
- Difusão: a relação entre plaintext e ciphertext deve ser espalhada —
mudar um bit da entrada muda metade dos bits da saída (efeito avalanche). Implementada por permutação/mistura.
Cifras alternam camadas de confusão e difusão por várias rodadas. As duas estruturas dominantes são a rede de substituição-permutação (SPN — usada pelo AES) e a rede de Feistel (usada pelo DES). A Parte II detalha cada uma.
Onde aprofundar: as definições formais, o teorema de Shannon completo e o catálogo de modelos estão na referência —
02-fundamentos. A Parte I termina aqui; a Parte II — Primitivas (em construção) abre as caixas-pretas: cifras de bloco e fluxo, funções de hash, e o salto para a assimetria.