Fundamentos de criptografia de chave pública: partilha segura explicada
Aprenda os fundamentos da criptografia de chave pública e como permite a partilha segura entre desconhecidos. RSA, Diffie-Hellman e troca de chaves moderna explicados.
A criptografia de chave pública — também chamada criptografia assimétrica — usa duas chaves matematicamente ligadas: uma pública que pode distribuir livremente e uma privada que guarda. Encripte algo com a minha chave pública, e apenas a minha chave privada consegue lê-la. Isto resolve o problema mais antigo da criptografia: como dois desconhecidos que nunca se encontraram podem partilhar um segredo através de um canal aberto. Inventada por Diffie e Hellman em 1976 e tornada prática pelo RSA um ano depois, é hoje a base do TLS 1.3, do Signal, do SSH, da assinatura Ed25519, e de todos os serviços de transferência de ficheiros que autenticam utilizadores. Eis como funciona de facto.
A armadilha matemática
Toda a criptografia de chave pública assenta em funções de "armadilha" — computações fáceis de fazer para a frente mas efetivamente impossíveis de inverter sem informação extra. Duas famílias dominam:
- Fatorização de inteiros (RSA): multiplicar dois grandes primos é trivial; fatorizar o seu produto é exponencialmente difícil. Uma chave RSA de 2048 bits usa dois primos de ~1024 bits. O melhor ataque conhecido, o General Number Field Sieve, exige aproximadamente 2^112 operações — fora de alcance.
- Logaritmos discretos sobre curvas elípticas (ECDH, ECDSA, Ed25519): calcular a multiplicação de pontos numa curva é rápido; invertê-la para encontrar o multiplicador é difícil. Curvas de 256 bits como a Curve25519 oferecem segurança equivalente a RSA-3072.
Ambos os problemas são fáceis para computadores quânticos através do algoritmo de Shor, razão pela qual o NIST padronizou alternativas pós-quânticas (ML-KEM e ML-DSA) em FIPS 203–205 em 2024.
RSA na prática
Ron Rivest, Adi Shamir e Leonard Adleman publicaram o RSA em 1977. O esquema é elegante:
- Escolher dois grandes primos
peq. - Calcular
n = p × q(o módulo) eφ(n) = (p-1)(q-1). - Escolher
ecoprimo comφ(n), geralmente 65537. - Calcular
dtal quee × d ≡ 1 (mod φ(n)). - Chave pública:
(n, e). Chave privada:(n, d).
Encriptação: texto_cifrado = mensagem^e mod n. Desencriptação: mensagem = texto_cifrado^d mod n. A matemática funciona por causa do teorema de Euler.
O RSA real usa padding OAEP (RFC 8017) para prevenir ataques de texto cifrado escolhido. O RSA de livro didático é catastroficamente inseguro. RSA-2048 é o mínimo atual para novos sistemas; RSA-3072 ou 4096 para qualquer coisa de longa duração.
Diffie-Hellman: segredos partilhados sem enviar chaves
O RSA permite encriptar para um destinatário conhecido. O Diffie-Hellman faz algo subtilmente diferente: permite que duas partes derivem um segredo partilhado através de um canal público, sem nenhuma enviar o segredo.
A versão clássica (DH sobre inteiros módulo um grande primo):
- Ambas as partes concordam num grande primo
pe geradorg. - Alice escolhe o segredo
a, enviaA = g^a mod p. - Bob escolhe o segredo
b, enviaB = g^b mod p. - Alice calcula
B^a mod p = g^(ab) mod p. - Bob calcula
A^b mod p = g^(ab) mod p.
Ambos chegam a g^ab mod p sem nunca enviar a ou b. Um espião vê g, p, A, B mas calcular g^ab a partir de A e B exige resolver o problema do logaritmo discreto.
O DH moderno usa curvas elípticas (ECDH). O X25519 é a escolha padrão: chaves de 32 bytes, segredos partilhados de 32 bytes, implementação resistente a ataques de temporização.
Curvas elípticas e porque venceram
O RSA parece antigo porque na maioria dos casos está. A criptografia de curva elíptica substituiu-o por três razões práticas:
- Chaves menores. Uma chave EC de 256 bits oferece a segurança de uma chave RSA de 3072 bits. São 32 bytes versus 384 bytes.
- Operações mais rápidas. O ECDH em Curve25519 demora cerca de 70 microssegundos num CPU moderno. A geração de chaves RSA-3072 demora segundos.
- Melhor resiliência à aleatoriedade. O Ed25519 é determinístico — as assinaturas não requerem nonces aleatórios por mensagem, evitando o desastre ECDSA da Sony PS3 em 2010, onde um nonce constante revelou a chave mestra.
As curvas NIST (P-256, P-384, P-521) são amplamente suportadas mas historicamente desconfiadas por alguns criptógrafos devido a constantes inexplicadas. A Curve25519 e o Ed25519, concebidos por Daniel Bernstein, são os padrões modernos usados em TLS 1.3, WireGuard, Signal, e SSH.
Assinaturas: provar quem enviou o quê
A criptografia de chave pública faz algo que a simétrica não consegue: provar autoria. A assinatura inverte os papéis de encriptação — "encripta" (assina) com a sua chave privada, e qualquer pessoa com a sua chave pública consegue "desencriptar" (verificar). Se verificar, tinha de ter a chave privada.
As assinaturas reais usam funções de hash para lidar com mensagens de tamanho arbitrário:
- Calcular
h = SHA-256(mensagem). - Assinar
hcom a chave privada (RSA-PSS, ECDSA, ou Ed25519). - O verificador faz o hash da mensagem recebida e compara com a assinatura usando a chave pública.
Aplicações: certificados TLS (a CA assina a chave pública do site), assinatura de código (notarização da Apple, Microsoft Authenticode), assinatura de commits Git, gestores de pacotes de software (apt, Homebrew, npm).
Onde a transferência de ficheiros usa criptografia de chave pública
Para transferências anónimas baseadas em links (SwissTransfer, HexaTransfer), a criptografia de chave pública muitas vezes não aparece diretamente — uma chave simétrica aleatória no fragmento do URL trata de tudo. Mas para serviços baseados em conta, as chaves públicas são importantes:
- Autenticação de servidor TLS 1.3. Cada ligação HTTPS começa com o certificado do servidor, verificado contra uma cadeia de CA. A troca de chaves ECDHE efémera deriva então a chave de sessão.
- Encriptação conta a conta. O Tresorit, o Proton Drive, e o Mega dão a cada utilizador um par de chaves no registo. Os ficheiros partilhados entre contas são envolvidos com a chave pública do destinatário.
- Clientes e atualizações assinados. As aplicações de ambiente de trabalho verificam as atualizações com assinaturas Ed25519 ou RSA para prevenir ataques à cadeia de fornecimento.
- Autenticação sem palavra-passe. O WebAuthn e as Passkeys usam chaves EC guardadas em hardware seguro (Touch ID, Windows Hello, YubiKey).
Distribuição de chaves: o problema difícil que resta
A criptografia de chave pública resolve um problema de distribuição de chaves mas cria outro: como sabe que uma chave pública realmente pertence a quem afirma? Três modelos:
- PKI (Infraestrutura de Chave Pública). As autoridades de certificação assinam chaves públicas. Usado pelo TLS com raízes no Chrome, Firefox, Safari.
- Teia de confiança. A abordagem do PGP — os utilizadores assinam as chaves uns dos outros. Flexível mas os problemas de escalabilidade mantiveram a adoção em nicho.
- TOFU (Trust On First Use). A abordagem do SSH — aceitar a chave na primeira vez, alertar se mudar. Simples mas vulnerável à interceção inicial.
- Transparência de chaves. Registos em árvore de Merkle onde todas as chaves públicas são auditáveis publicamente. Usado pelo WhatsApp, iMessage Contact Key Verification, e sistemas modernos de passkeys.
Para transferência de ficheiros com destinatários desconhecidos, a partilha via fragmento de URL contorna tudo isto — o remetente entrega a chave ao destinatário diretamente através do link, e a autenticidade depende do canal usado para partilhar o link.
O que a computação quântica muda
Um computador quântico de grande escala a correr o algoritmo de Shor quebra tanto o RSA como a criptografia de curva elíptica. As estimativas atuais colocam o prazo em 10–20 anos, mas o risco é imediato para dados com longos prazos de conservação: ataques de "recolher agora, desencriptar mais tarde" registam tráfego encriptado hoje e desencriptam-no em 2040.
Os padrões pós-quânticos do NIST de 2024:
- FIPS 203 (ML-KEM) — substitui Diffie-Hellman / ECDH para troca de chaves. Baseado em problemas de reticulados.
- FIPS 204 (ML-DSA) — substitui RSA/ECDSA para assinaturas.
- FIPS 205 (SLH-DSA) — assinatura baseada em hash como alternativa.
A Cloudflare e a Google suportam já ML-KEM na troca de chaves TLS 1.3. Os serviços de transferência de ficheiros seguirão ao longo dos próximos anos. A encriptação simétrica (AES-256-GCM) é largamente não afetada — o algoritmo de Grover apenas reduz a sua força efetiva para metade.
Juntar tudo
Para partilhas sensíveis hoje: o TLS 1.3 com troca de chaves X25519 protege a ligação, o AES-256-GCM trata da encriptação em massa, e para serviços baseados em conta, o ECDH com Curve25519 envolve as chaves por ficheiro. Os serviços baseados em links dispensam a camada de conta mas ganham em simplicidade. Ambos os modelos oferecem segurança robusta quando implementados corretamente.
Experimente em hexatransfer.com — gratuito, sem conta, até 10 GB.
Envie arquivos grandes com segurança e criptografia de ponta a ponta
Transfira arquivos de até 10 GB gratuitamente com criptografia de ponta a ponta. Sem necessidade de conta. Seus arquivos são criptografados no navegador antes do envio — ninguém mais pode lê-los.
Enviar um arquivo