Criptografia assimétrica
Par de chaves (pública + privada) onde uma desfaz o que a outra fez. Base de toda assinatura digital, troca de chave TLS, e certificados X.509.
Famílias em uso
| Família | Tamanho típico | Velocidade | Tamanho de assinatura | Notas |
|---|---|---|---|---|
| RSA | 2048, 3072, 4096 bits | Verify rápido, sign lento | 256384512 bytes | Ainda dominante em CAs públicos. NIST recomenda 3072+ a partir de 2030 |
| ECDSA P-256 | 256 bits | Rápido | 64-72 bytes | Padrão de fato em TLS moderno. Curva NIST. |
| ECDSA P-384 | 384 bits | Médio | 96 bytes | Suite B; comum em governo. |
| Ed25519 | 256 bits | Mais rápido que ECDSA | 64 bytes | Curva RFC 8032. Determinístico — sem PRNG no sign. Sem nonce reuse vulnerability. |
| Ed448 | 448 bits | Rápido | 114 bytes | Curva Goldilocks; mais paranoica que Ed25519. |
| ML-KEM / ML-DSA (post-quantum) | KEM/DSA | Maduros | grandes (kB) | FIPS 203/204, ratificados 2024. Migração ainda em PoC nos CAs. |
RSA — visão prática
- Operações:
sign(msg, sk) = msg^d mod n,verify(msg, sig, pk) = sig^e mod n == hash(msg)(esquema simplificado; usar RSA-PSS na prática, não PKCS#1 v1.5). - Geração de chave: 2 primos grandes p,q; npq; phi(p-1)(q-1); e=65537; d = e⁻¹ mod phi.
- Pitfalls:
- Padding PKCS#1 v1.5 tem oráculos de padding (Bleichenbacher); usar RSA-PSS em código novo.
- Chaves < 2048 bits são consideradas quebradas hoje.
- Geração de primo precisa de entropia forte; falhas reais (Debian OpenSSL 2008).
ECDSA — visão prática
- Operações sobre curva elíptica (ponto-multiplicação). Espaço de chave 2× o bit-size em segurança comparável a RSA (256 bits ECC ≈ 3072 bits RSA).
- Pitfalls catastróficos:
- Reuso de nonce k vaza a chave privada com 2 assinaturas. PS3 da Sony foi quebrado assim em 2010. Mitigar com nonce determinístico RFC 6979.
- Curvas NIST têm constantes não-explicáveis ("nothing-up-my-sleeve" fraco). Daí o apelo do Ed25519 (curva 25519, constantes derivadas explicitamente).
Ed25519 — por que está virando default
- Determinístico por design — sem PRNG no momento do sign, sem nonce reuse possível.
- 32 bytes de chave pública, 64 bytes de assinatura, ~50× mais rápido que RSA-2048 em assinatura.
- Suportado em SSH (OpenSSH ≥ 6.5), TLS 1.3, JWT (
EdDSA), CMS, certificados X.509 (RFC 8410). - Caveat: alguns programas de root historicamente exigiam RSA/ECDSA por compatibilidade.
Troca de chave
Diferente de assinatura. Estabelece segredo compartilhado entre 2 partes sem revelar nada num canal público.
- (EC)DHE (Ephemeral Diffie-Hellman) — usado em todo handshake TLS moderno; gera segredo de sessão descartável → perfect forward secrecy.
- X25519 — variante Curve25519 pra DH. Default em TLS 1.3 (RFC 7748).
- X-Wing / hybrid PQ — combinações ML-KEM + X25519 já deployadas em Chrome e Cloudflare.
Resumo operacional pra a Stack
- Chaves de servidor (TLS, gateway interno): ECDSA P-256 ou Ed25519 quando o stack inteiro suportar.
- Chaves de assinatura de código / artefatos Koder: Ed25519.
- Chaves de CA interno (step-ca pra rede Koder): ECDSA P-384 ou Ed25519 raiz, ECDSA P-256 intermediário.
- Migração PQ: monitorar
services/foundation/ideservices/foundation/certsquando o ecossistema browser sinalizar hybrid certs.