Ir para o conteúdo
HexaTransfer
Voltar ao blog
Criptografia e seguranca

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:

  1. Escolher dois grandes primos p e q.
  2. Calcular n = p × q (o módulo) e φ(n) = (p-1)(q-1).
  3. Escolher e coprimo com φ(n), geralmente 65537.
  4. Calcular d tal que e × d ≡ 1 (mod φ(n)).
  5. 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):

  1. Ambas as partes concordam num grande primo p e gerador g.
  2. Alice escolhe o segredo a, envia A = g^a mod p.
  3. Bob escolhe o segredo b, envia B = g^b mod p.
  4. Alice calcula B^a mod p = g^(ab) mod p.
  5. 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:

  1. Calcular h = SHA-256(mensagem).
  2. Assinar h com a chave privada (RSA-PSS, ECDSA, ou Ed25519).
  3. 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