Pular para conteúdo

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 p e q só a partir de n, 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

$ # Gerando uma chave privada RSA de 2048 bits $ openssl genrsa -out privada.pem 2048 $ $ # Extraindo a chave publica correspondente $ openssl rsa -in privada.pem -pubout -out publica.pem $ cat publica.pem

📝 Exercícios de Fixação

  1. Básico: Explique com suas palavras a diferença entre chave pública e chave privada.
  2. Básico: Por que 512 bits é considerado inseguro para uma chave RSA hoje?
  3. Intermediário: Qual problema o Diffie-Hellman resolve que o RSA sozinho não resolve tão bem?
  4. Intermediário: Por que sistemas reais combinam criptografia simétrica e assimétrica em vez de usar só uma delas?
  5. 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.

  1. Gere seu par de chaves (privada + pública) com OpenSSL.
  2. Cifre uma mensagem curta usando a chave pública: openssl rsautl -encrypt -pubin -inkey publica.pem -in mensagem.txt -out mensagem.enc.
  3. Decifre a mensagem usando a chave privada: openssl rsautl -decrypt -inkey privada.pem -in mensagem.enc.
  4. Confirme que a mensagem original é recuperada corretamente.

Ir para Aula 06