Aula 05 – Criptografia Assimétrica (RSA e Diffie-Hellman) 🔓
Como duas pessoas que nunca se conheceram podem trocar mensagens secretas por um canal público, sem nunca terem combinado uma chave antes? É exatamente isso que a criptografia assimétrica resolve.
🗝️ O Par de Chaves
Diferente da criptografia simétrica, a assimétrica usa duas chaves matematicamente relacionadas:
| Chave | Quem tem acesso | Função |
|---|---|---|
| Chave Pública | Todo mundo | Cifra mensagens / verifica assinaturas |
| Chave Privada | Só o dono | Decifra mensagens / cria assinaturas |
graph LR
A["Remetente"] -- "Cifra com Chave PÚBLICA do destinatário" --> B["Texto Cifrado"]
B -- "Decifra com Chave PRIVADA do destinatário" --> C["Destinatário lê a mensagem"] A analogia do cadeado aberto
A chave pública é como um cadeado aberto que você distribui livremente. Qualquer um pode fechar (cifrar) uma caixa com ele. Só quem tem a chave privada consegue abrir (decifrar) de novo.
🔢 RSA: a Matemática por Trás
O RSA (Rivest-Shamir-Adleman) baseia sua segurança em um problema matemático simples de enunciar, mas extremamente difícil de resolver: fatorar números primos muito grandes.
- É fácil multiplicar dois primos gigantes:
p × q = n. - É computacionalmente inviável, com a tecnologia atual, descobrir
peqsó a partir den, se ambos forem grandes o suficiente (2048+ bits).
| Tamanho de chave RSA | Status |
|---|---|
| 512 bits | ❌ Quebrado |
| 1024 bits | ⚠️ Considerado fraco |
| 2048 bits | ✅ Padrão mínimo atual |
| 4096 bits | ✅ Alta segurança |
🤝 Diffie-Hellman: Combinando uma Chave em Público
O Diffie-Hellman (DH) resolve um problema diferente: permitir que duas partes cheguem a uma chave secreta compartilhada, mesmo trocando mensagens por um canal totalmente público e observado por um invasor.
graph TD
A["Alice escolhe segredo privado a"] --> C["Troca valores públicos"]
B["Bob escolhe segredo privado b"] --> C
C --> D["Alice calcula chave secreta usando b público + a privado"]
C --> E["Bob calcula chave secreta usando a público + b privado"]
D --> F["Mesma chave secreta compartilhada!"]
E --> F Onde isso é usado?
Diffie-Hellman é a base do "handshake" do TLS (Aula 09) — é assim que seu navegador e um servidor combinam uma chave simétrica temporária a cada nova conexão HTTPS.
⚖️ Simétrica vs. Assimétrica: Por que usar as duas juntas?
| Simétrica (AES) | Assimétrica (RSA) | |
|---|---|---|
| Velocidade | Muito rápida | Muito mais lenta |
| Uso ideal | Cifrar grandes volumes de dados | Trocar chaves, assinar, autenticar |
| Problema | Como compartilhar a chave? | Resolve isso, mas é lenta |
Na prática, sistemas reais (como o HTTPS) usam criptografia híbrida: assimétrica para combinar uma chave secreta, e simétrica (AES) para cifrar o tráfego de verdade, rápido.
💻 Gerando um Par de Chaves RSA
📝 Exercícios de Fixação
- Básico: Explique com suas palavras a diferença entre chave pública e chave privada.
- Básico: Por que 512 bits é considerado inseguro para uma chave RSA hoje?
- Intermediário: Qual problema o Diffie-Hellman resolve que o RSA sozinho não resolve tão bem?
- Intermediário: Por que sistemas reais combinam criptografia simétrica e assimétrica em vez de usar só uma delas?
- Desafio: Pesquise o que é "Perfect Forward Secrecy" e por que ele depende do Diffie-Hellman efêmero (DHE/ECDHE).
🚀 Mini-Projeto: Troca de Mensagem Cifrada
Objetivo: Simular a troca de uma mensagem secreta usando um par de chaves RSA.
- Gere seu par de chaves (privada + pública) com OpenSSL.
- Cifre uma mensagem curta usando a chave pública:
openssl rsautl -encrypt -pubin -inkey publica.pem -in mensagem.txt -out mensagem.enc. - Decifre a mensagem usando a chave privada:
openssl rsautl -decrypt -inkey privada.pem -in mensagem.enc. - Confirme que a mensagem original é recuperada corretamente.