A criptografia de chave pública (também chamada de criptografia assimetrica) e a base do SSL/TLS. Ela usa um par de chaves matematicamente relacionadas — uma pública, uma privada — para criptografar dados, verificar identidades e estabelecer conexões seguras. Toda conexão HTTPS depende dela.
O conceito do par de chaves
| Chave pública | Chave privada | |
|---|---|---|
| Quem possui | Todos (esta no certificado) | Apenas o proprietario do servidor |
| Pode criptografar | ✅ | ✅ |
| Pode descriptografar | Apenas o que a chave privada criptografou | Apenas o que a chave pública criptografou |
| Compartilhar? | Sim — esse e o objetivo | Nunca |
A magica: dados criptografados com a chave pública só podem ser descriptografados com a chave privada correspondente. E vice-versa. As duas chaves sao matematicamente vinculadas, mas você não pode derivar a chave privada a partir da chave pública.
Como é usado no SSL/TLS
A criptografia de chave pública serve a tres propositos em toda conexão HTTPS:
1. Troca de chaves — estabelecendo um segredo compartilhado
Durante o handshake TLS, o servidor e o navegador precisam concordar em uma chave de sessao compartilhada para criptografar o trafego. Eles não podem enviar essa chave em texto simples — alguem poderia intercepta-la.
Solução: troca de chaves Diffie-Hellman (especificamente ECDHE no TLS moderno). Ambos os lados contribuem com valores aleatorios, e a matematica permite que calculem o mesmo segredo compartilhado sem nunca transmiti-lo. A chave privada do servidor assina sua contribuicao, provando a identidade do servidor.
2. Autenticação — provando identidade
O certificado SSL do servidor contem sua chave pública. O certificado é assinado por uma Autoridade Certificadora. Durante o handshake, o servidor prova que possui a chave privada correspondente. Isso prova que o servidor e quem o certificado diz ser.
Sem essa etapa, qualquer pessoa poderia alegar ser google.com.
3. Assinaturas digitais — provando integridade dos dados
A chave privada pode criar uma assinatura digital — uma prova matematica de que um dado especifico foi assinado pelo detentor da chave e não foi modificado. As mensagens do handshake TLS sao assinadas para evitar adulteracao.
Criptografia simetrica vs assimetrica
| Assimetrica (chave pública) | Simetrica (chave de sessao) | |
|---|---|---|
| Chaves | Duas (pública + privada) | Uma (segredo compartilhado) |
| Velocidade | Lenta (~1000x mais lenta) | Rápida |
| Usada para | Troca de chaves + autenticação | Criptografar dados reais |
| Algoritmos | RSA, ECDSA, ECDHE | AES-GCM, ChaCha20 |
| No TLS | Apenas durante o handshake | Após o handshake (todo o trafego) |
O HTTPS usa ambas: criptografia assimetrica para o handshake (provando identidade, trocando chaves), depois criptografia simetrica para a transferencia real de dados (porque e muito mais rápida).
Os algoritmos por tras do SSL
RSA
O algoritmo de chave pública mais antigo ainda em uso (1977). Baseado na dificuldade de fatorar números primos grandes. Usado tanto para assinaturas quanto para troca de chaves, embora a troca de chaves RSA (sem Diffie-Hellman) não forneca forward secrecy e foi removida do TLS 1.3.
ECDSA (Elliptic Curve Digital Signature Algorithm)
Algoritmo moderno de assinatura usando matematica de curva eliptica. Uma chave ECC de 256 bits fornece segurança equivalente a uma chave RSA de 3072 bits — chaves menores, assinaturas mais rapidas. O GetHTTPS usa ECDSA P-256 como padrão.
ECDHE (Elliptic Curve Diffie-Hellman Ephemeral)
O mecanismo de troca de chaves usado no TLS moderno. “Ephemeral” (efemero) significa que um novo par de chaves é gerado para cada conexão — fornecendo forward secrecy. Usado tanto no TLS 1.2 quanto no 1.3.
AES-GCM
O cifrador simetrico usado após o handshake para criptografar o trafego real. AES (Advanced Encryption Standard) com GCM (Galois/Counter Mode) fornece tanto criptografia quanto autenticação. Acelerado por hardware em CPUs modernas via instruções AES-NI.
Como o GetHTTPS usa criptografia de chave pública
Quando você usa o GetHTTPS:
- Seu navegador gera um par de chaves usando a Web Crypto API — as mesmas primitivas criptograficas que o próprio TLS usa
- A chave pública vai para um CSR enviado ao Let’s Encrypt
- A chave privada permanece na memória do seu navegador — nunca transmitida
- O Let’s Encrypt assina a chave pública e retorna seu certificado
- Você baixa tanto o certificado (público) quanto a chave privada para seu servidor
A chave privada existindo apenas na memória do navegador e o motivo pelo qual o GetHTTPS e mais privado do que ferramentas que geram chaves em um servidor remoto.
Perguntas frequentes
Computadores quanticos podem quebrar a criptografia de chave pública?
Os computadores quanticos atuais não podem. Mas um computador quantico suficientemente poderoso executando o algoritmo de Shor poderia quebrar RSA e ECC. A industria esta se preparando com criptografia pos-quantica — novos algoritmos (ML-KEM, ML-DSA) resistentes a ataques quanticos. O TLS adotara esses em um modo hibrido (clássico + pos-quantico) sem alterar como os certificados funcionam.
Por que não usar apenas criptografia assimetrica para tudo?
Velocidade. Operações assimetricas sao aproximadamente 1000x mais lentas que simetricas. Criptografar uma página web com RSA seria impraticavelmente lento. Em vez disso, o TLS usa criptografia assimetrica apenas para o handshake (~1ms), depois muda para simetrica (AES) para os dados — que roda em velocidade de hardware.
Uma chave ECC de 256 bits e realmente segura o suficiente?
ECC de 256 bits fornece ~128 bits de segurança — significando que um atacante precisaria de aproximadamente 2^128 operações para quebra-la. Isso e mais operações do que atomos no universo observavel. E seguro para o futuro previsivel (excluindo computadores quanticos, que requerem algoritmos completamente diferentes).
Qual a diferenca entre criptografia e assinatura?
Criptografia: Proteger confidencialidade. Criptografe com a chave pública do destinatario → apenas a chave privada dele pode descriptografar. Assinatura: Provar autenticidade. Assine com sua chave privada → qualquer pessoa com sua chave pública pode verificar que veio de você e não foi modificado. Certificados TLS usam assinaturas; a transferencia de dados TLS usa criptografia.