02 — Fundamentos da Criptografia

Conceitos, vocabulário, modelos de adversário, princípios e definições de segurança. Pré-requisito para entender todos os outros arquivos do compendium.


1. Vocabulário básico

Termo Definição
Plaintext (P, M) Mensagem em claro.
Ciphertext (C) Mensagem cifrada.
Key (k) Segredo compartilhado (simétrico) ou par público/privado (assimétrico).
Encryption (\(E_k\)) Função que transforma P em C usando k.
Decryption (\(D_k\)) Função inversa.
Cipher Algoritmo de encryption/decryption (ex.: AES, ChaCha20).
Mode of operation Modo de aplicação de um block cipher a mensagens maiores que um bloco (ex.: CBC, GCM).
Cryptosystem Conjunto cipher + mode + protocolo de key management.
Scheme Mesmo que cryptosystem; mais usado em literatura acadêmica.
Primitive Bloco básico (AES, SHA-256, RSA).
Construction Combinação de primitivas para alcançar um objetivo (ex.: HMAC, AES-GCM).
MAC Message Authentication Code — tag que prova autenticidade.
AEAD Authenticated Encryption with Associated Data — encryption + MAC + dados extras autenticados sem cifrar.
KDF Key Derivation Function — deriva chaves de segredossenhasmaterial chave.
PRF / PRP Pseudorandom Function / Pseudorandom Permutation.
CSPRNG Cryptographically Secure Pseudorandom Number Generator.
Entropy Medida de imprevisibilidade. Em bits: \(H(X) = -sum p_i log_2 p_i\).
Nonce Number used once — não precisa ser secreto, não pode repetir com mesma chave.
IV Initialization Vector — semelhante a nonce, requisitos variam por modo.
Salt Valor público aleatório anexado para tornar mesma senha gerar hashes diferentes.
Pepper Segredo fixo aplicado a todos os hashes de um sistema; não armazenado com hash.
Tag (T) Output de MAC ou AEAD.
Forward secrecy Comprometer chave atual não revela tráfego passado.
Post-compromise security (PCS) Após compromisso de estado, segurança se recupera com nova troca de chaves.
Deniability Receptor não pode provar a terceiros que mensagem veio do remetente.

2. Princípios de Kerckhoffs (1883)

Auguste Kerckhoffs, La Cryptographie Militaire (Journal des Sciences Militaires, vol. IX, 1883):

  1. O sistema deve ser praticamente, senão matematicamente, indecifrável.
  2. Não deve exigir que seja secreto; pode cair em mãos do inimigo sem inconveniente. ⭐ — princípio canônico.
  3. Sua chave deve ser comunicável e memorizável sem notas, e mudável à vontade.
  4. Deve ser aplicável à correspondência telegráfica.
  5. Deve ser portátil, e seu uso não deve requerer mais de uma pessoa.
  6. O sistema deve ser fácil de usar, sem demanda mental ou conhecimento de longa lista de regras.

Reformulação moderna de Bruce Schneier: "Security through obscurity is no security". Reformulação de Shannon: "The enemy knows the system".


3. Princípios de Shannon (1949)

Claude Shannon, Communication Theory of Secrecy Systems (Bell System Technical Journal 28, 1949):

Secrecy perfeita

Um cifra tem perfect secrecy se para todo P, P' e C: $\(\Pr[E_k(P) = C] = \Pr[E_k(P') = C]\)$

Ciphertext não dá nenhuma informação sobre plaintext. Teorema de Shannon: secrecy perfeita exige \(|K| \geq |M|\) — chave pelo menos tão longa quanto a mensagem. One-Time Pad é a única realização prática, com chave verdadeiramente aleatória, do mesmo tamanho, usada uma vez.

Confusão e difusão

  • Confusão: relação entre chave e ciphertext deve ser complexa e não-linear. Cada bit do ciphertext depende de muitos bits da chave.
  • Difusão: relação entre plaintext e ciphertext deve ser espalhada. Um bit do plaintext afeta muitos bits do ciphertext (avalanche).

Block ciphers modernos alternam camadas de substituição (S-boxes — confusão) e permutação/mixing (P-boxes ou multiplicação matricial — difusão). Estrutura SPN (Substitution-Permutation Network — AES) ou Feistel (DES).


4. Modelos de adversário

Em ordem crescente de poder:

Sigla Nome O que o adversário pode fazer
COA Ciphertext-Only Attack Vê apenas ciphertexts. Modelo mais fraco.
KPA Known-Plaintext Attack Vê pares (P, C) coletados passivamente.
CPA Chosen-Plaintext Attack Pode pedir encryption de plaintexts à sua escolha.
CCA1 Non-adaptive Chosen-Ciphertext (lunchtime) Pode pedir decryption antes de ver o desafio.
CCA2 Adaptive Chosen-Ciphertext Pode pedir decryption a qualquer momento, exceto do ciphertext-desafio.
Authenticated CCA CCA com integridade Modelo moderno: oracle só responde se MAC verifica.

Hierarquia: COA ⊂ KPA ⊂ CPA ⊂ CCA1 ⊂ CCA2.

Definições de segurança IND-* / SUF-* / EUF-*

Acrônimo Significado Aplicável a
IND-CPA Indistinguishability under CPA Cifras
IND-CCA2 Indistinguishability under adaptive CCA Cifras (padrão moderno)
NM-CCA2 Non-malleability under adaptive CCA Equivalente a IND-CCA2
EUF-CMA Existential Unforgeability under Chosen-Message Attack Assinaturas e MACs
SUF-CMA Strong Unforgeability (não pode forjar nova tag mesmo p/ msg já assinada) Assinaturas modernas

IND-CPA game (intuição):

  1. Adversário escolhe duas mensagens \(m_0\), \(m_1\) de mesmo tamanho.
  2. Challenger sorteia \(b \in \{0,1\}\) aleatório, envia \(C = E_k(m_b)\).
  3. Adversário tenta adivinhar \(b\).
  4. Cifra é IND-CPA segura se \(\Pr[\text{adv adivinha}] - 1/2\) é negligível em \(\lambda\).

5. Funções one-way e trapdoor

Tipo Definição
One-way function (OWF) \(f: X to Y\) fácil de calcular, difícil de inverter. Não se sabe se existem; existência implicaria \(P neq NP\).
Trapdoor one-way function OWF que tem inverso fácil dado um segredo (trapdoor). Base de RSA, ECC, lattice-based.
PRP Pseudorandom permutation indistinguível de permutação aleatória. AES é assumido PRP.
PRF Pseudorandom function. Block cipher = PRP; PRP é PRF (com gap negligível pelo PRP/PRF switching lemma).
Collision-resistant hash Difícil achar \(x neq y\) com \(H(x) = H(y)\).

6. Modelos teóricos

Random Oracle Model (ROM)

Bellare + Rogaway (CCS '93). Tratamos hash como função aleatória ideal: cada query nova retorna valor uniformemente aleatório. Provas em ROM dão garantia heurística — esquema seguro em ROM pode ser seguro com hash real, mas não é garantido (Canetti-Goldreich-Halevi 1998 mostraram contraexemplos artificiais).

Standard Model

Sem oracles idealizados. Provas mais difíceis mas mais convincentes. Esquemas como RSA-OAEP, Cramer-Shoup, Boneh-Boyen têm versões standard model.

Generic Group Model

Adversário só pode usar operações de grupo (multiplicação, exponenciação) sem explorar representação. Usado para provar lower bounds (Shoup 1997, Maurer 2005).

Universal Composability (UC)

Canetti 2001. Framework para provar segurança composicional: se F é UC-seguro, é seguro em qualquer protocolo maior. Ideal para protocolos multi-party.


7. Hierarquia de criptografia

Simétrica vs assimétrica

Aspecto Simétrica Assimétrica
Chave Mesma para encrypt e decrypt Par público/privado
Velocidade ~1000× mais rápida Mais lenta
Distribuição Problema (precisa canal seguro) Resolvido (publica chave pública)
Uso prático Bulk encryption Key exchange + assinatura
Hybrid TLS faz: assimétrica troca chave simétrica, simétrica cifra dados

Por finalidade

  • Confidencialidade: encryption (AES, ChaCha20, RSA-OAEP, ECIES).
  • Integridade: hash, MAC (HMAC, KMAC, Poly1305, CMAC).
  • Autenticidade: MAC, assinatura digital.
  • Não-repúdio: assinatura digital (não MAC — qualquer um com a chave MAC pode forjar).
  • Frescor: nonces, timestamps, sequence numbers.
  • Anonimato: ring signatures, group signatures, mix-nets.
  • Privacidade computacional: FHE, MPC, ZKP.

8. Níveis de segurança

Convencionalmente medidos em bits — significam: melhor ataque conhecido leva \(2^n\) operações.

Algoritmo Nível de segurança Notas
3DES (chave 168 bit) 112 bit Deprecated NIST após 2023
AES-128 128 bit Padrão; resistência clássica forte
AES-256 256 bit (clássico) / 128 bit (Grover) Pós-quântico viável
RSA-2048 ~112 bit Mínimo aceitável; recomenda 3072+
RSA-3072 128 bit Equivalente AES-128 clássico
RSA-15360 256 bit Inviável na prática; use ECC
ECC P-256 128 bit Padrão TLS atual
ECC P-384 192 bit CNSA suite
ECC P-521 256 bit
Curve25519 128 bit Bernstein 2006
Curve448 224 bit
Ed25519 128 bit EdDSA
SHA-256 128 bit collision / 256 bit preimage
SHA-512 256 bit collision / 512 bit preimage
SHA-3-256 idem SHA-256

Regra de equivalência (clássica, NIST SP 800-57):

Symmetric RSA DH ECC
80 1024 1024 160
112 2048 2048 224
128 3072 3072 256
192 7680 7680 384
256 15360 15360 521

9. Geração de aleatoriedade

Entropy sources

  • Hardware: ring oscillators, thermal noise, shot noise, Intel RDRAND, ARM TRNG.
  • OS pooling: Linux getrandom(2), /dev/urandom, /dev/random; macOS SecRandomCopyBytes; Windows BCryptGenRandom.
  • User input: timing de teclado, mouse — relevante em boot inicial e VMs.

CSPRNGs

  • AES-CTR DRBG (NIST SP 800-90A) — saída de AES em CTR mode.
  • HMAC-DRBG (NIST SP 800-90A) — popular.
  • Hash-DRBG (NIST SP 800-90A).
  • Fortuna (Schneier, 2003) — usado em FreeBSD.
  • ChaCha20-based — Linux desde 4.8 (2016).
  • DualECDRBG ❌ — NIST SP 800-90A original incluía. Backdoor NSA suspeitada e depois confirmada (Snowden); removido 2014.

Regras

  • Nunca use Math.random(), rand(), random(), srand(time()).
  • Sempre use API criptográfica do OS (getrandom, BCryptGenRandom).
  • Seed cuidadosamente após boot — VMs clonadas, embedded, IoT são vulneráveis (Mining Your Ps and Qs, Heninger et al. 2012; ROCA).

10. Princípios de design moderno

"Don't roll your own crypto"

Implementar primitivas é fácil; implementar com segurança (sem side-channel, sem bugs sutis) é extremamente difícil. Use bibliotecas auditadas:

  • libsodium (alta-nível, design seguro por default).
  • NaCl (predecessor de libsodium, DJB).
  • BoringSSL (Google fork de OpenSSL).
  • OpenSSL 3.x (com FIPS provider quando exigido).
  • Tink (Google, high-level).
  • Ring (Rust, fork de BoringSSL).
  • age (file encryption, Filippo Valsorda).

Constant-time

Todo código que toca segredo deve executar em tempo independente do segredo: sem branches sobre segredo, sem table lookups indexados por segredo, sem multiplicações variáveis em CPUs antigas. Bernstein é o evangelista. AES-NI ajuda (instruções dedicadas).

Misuse-resistance

APIs devem dificultar uso errado:

  • NaCl/libsodium — apenas crypto_secretbox (autenticada), sem ECB cru.
  • AES-GCM-SIV (Gueron-Lindell) — degrada gracilmente em nonce reuse.
  • Tink — keysets versionados, rotação built-in.

Defense in depth

Camadas redundantes. Ex.: TLS + HSTS + HPKP (legacy) / CT (Certificate Transparency); LUKS + dm-verity; signed binaries + boot guard.

Hybrid (clássico + PQC)

Combine algoritmo clássico estabelecido + PQC novo. Ataque precisa quebrar ambos. Padrão em transição (X25519MLKEM768 = X25519 ⊕ ML-KEM-768).


11. Métodos de prova

Método Como funciona
Reduction proof Mostra que quebrar esquema implica quebrar problema duro (factoring, DLP, LWE). Padrão moderno.
Hybrid argument Sequência de games quase-indistinguíveis; diferença total ≤ soma.
Game-based proof Define security game; prova vantagem do adversário negligível.
Simulation-based proof Simulator gera distribuição indistinguível sem segredo. Usado em ZKP, MPC, UC.

12. Quem confia em quê (chain of trust)

Camada Confia em
Aplicação TLS library
TLS library CA root store
CA Procedimentos de validação + HSM + auditoria
HSM Hardware vendor + certificação FIPS 140-3 / CC EAL
Certificação NIST, CSE-CST, BSI, ANSSI
OS RNG Kernel + hardware (IntelAMDARM)
Kernel Boot chain (UEFI Secure Boot → shim → grub → kernel)
UEFI OEM signing keys + Boot Guard fuses
Fuses Fabricante de chip

Cada elo é um possível ponto de comprometimento. Confidential Computing tenta encurtar a chain isolando workload do host.


13. Diferenças culturais: criptografia "americana" vs "europeia"

Tradição Características
NIST/NSA (US) Padrões formais (FIPS), competições abertas (AES, SHA-3, PQC), DSA, P-256384521 (curvas Brainpool/NIST), influência state-actor histórica (Dual_EC).
ECRYPT/ENISA (EU) eSTREAM, NESSIE, recomendações ENISA; Brainpool curves; preferência por algoritmos europeus (Serpent, Twofish, Camellia em algumas suites).
GOST (RU) GOST 28147-89 (block cipher 64-bit), Kuznyechik (GOST R 34.12-2015), Streebog (hash).
SM (CN) SM2 (curva chinesa), SM3 (hash), SM4 (block cipher). Obrigatório em algumas aplicações governamentais chinesas.
Bernstein school Curve25519, Ed25519, ChaCha20, Poly1305, SipHash, BLAKE; design constant-time, sem patentes, simples de implementar.

14. Padronizações relevantes

Órgão Padrão Escopo
NIST FIPS 140-3 Requisitos de módulos criptográficos
NIST FIPS 186-5 Digital signatures (DSA, RSA, ECDSA, EdDSA)
NIST FIPS 197 AES
NIST FIPS 198-1 HMAC
NIST FIPS 202 SHA-3
NIST FIPS 203 ML-KEM
NIST FIPS 204 ML-DSA
NIST FIPS 205 SLH-DSA
NIST SP 800-38A–G Modes (ECB, CBC, CFB, OFB, CTR, CCM, GCM, KW, XTS)
NIST SP 800-56ABC Key establishment
NIST SP 800-90ABC RNG
NIST SP 800-131A Algorithm transitions
NIST SP 800-208 Stateful hash signatures (XMSS, LMS)
IETF RFC 8446 TLS 1.3
IETF RFC 7748 X25519/X448
IETF RFC 8032 EdDSA
IETF RFC 9180 HPKE
IETF RFC 9420 MLS
IETF RFC 7539 → 8439 ChaCha20-Poly1305
IETF RFC 2104 HMAC
IETF RFC 5869 HKDF
IETF RFC 9106 Argon2
ISO/IEC 18033-3 Block ciphers
ISO/IEC 9797-1/2 MACs
ISO/IEC 10118 Hash functions
ISO/IEC 11770 Key management

15. Bibliografia essencial

  • Katz + Lindell, Introduction to Modern Cryptography, CRC Press, 3ª ed. 2020 — texto-padrão de graduação/mestrado.
  • Boneh + Shoup, A Graduate Course in Applied Cryptography — gratuito em toc.cryptobook.us.
  • Menezes, van Oorschot, Vanstone, Handbook of Applied Cryptography (CRC) — clássico técnico, gratuito em cacr.uwaterloo.ca/hac/.
  • Schneier, Applied Cryptography, 1996 (datado mas referência cultural).
  • Aumasson, Serious Cryptography, No Starch Press 2017 — referência prática moderna.
  • Ferguson + Schneier + Kohno, Cryptography Engineering, Wiley 2010.
  • Bernstein, Lange, et al., Post-Quantum Cryptography, Springer 2009 (handbook).
  • Goldreich, Foundations of Cryptography, 2 volumes Cambridge — teórico, denso.

Online

  • IACR ePrint Archive: eprint.iacr.org
  • Real World Crypto Symposium proceedings
  • CFRG (Crypto Forum Research Group) IETF
  • Cryptography Stack Exchange (community Q&A)
  • David Wong, Real-World Cryptography (Manning 2021)
  • Filippo Valsorda blog filippo.io
  • Trail of Bits blog, NCC Group Cryptography Services