Criptografia assimétrica

seed

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/id e services/foundation/certs quando o ecossistema browser sinalizar hybrid certs.

Referências canônicas