Aula 17 - Criptografia Assimétrica Avançada (RSA, ECC e DH) 🔑
Objetivo Pedagógico
Objetivo: Compreender os fundamentos matemáticos e a implementação prática dos esquemas de chave pública: o problema da fatoração de inteiros (RSA), o problema do logaritmo discreto em curvas elípticas (ECDSA/Ed25519) e o protocolo de troca de chaves Diffie-Hellman.
📑 1. Fundamentos Teóricos & Análise Técnica
A criptografia de chave pública (assimétrica) resolveu o dilema clássico da distribuição segura de chaves entre partes que nunca interagiram previamente.
Os sistemas de chave pública contemporâneos apoiam-se em funções de sentido único com alçapão (Trapdoor One-Way Functions): 1. RSA (Rivest-Shamir-Adleman): - Baseia-se na assimetria computacional da fatoração de inteiros: multiplicar dois primos gigantescos (\(p\) e \(q\)) para obter \(n = pq\) é trivial, mas deduzir \(p\) e \(q\) a partir de \(n\) é computacionalmente inviável com algoritmos clássicos. - Para manter margem segura contra ataques contemporâneos, chaves RSA exigem comprimentos mínimos de 2048 a 4096 bits, resultando em alto consumo de CPU e tráfego de rede. 2. Criptografia de Curvas Elípticas (ECC - Elliptic Curve Cryptography): - Fundamenta-se no Problema do Logaritmo Discreto de Curvas Elípticas (ECDLP) sobre corpos finitos: \(P + P + \dots + P = kP = Q\). Dado o ponto base \(P\) e o produto escalar \(Q\), é computacionalmente intratável determinar o escalar escalar privado \(k\). - Eficiência Superior: Uma chave de curva elíptica de 256 bits (ex: Curve25519 / secp256r1) provê nível de segurança equivalente a uma chave RSA de 3072 bits, com assinaturas muito mais compactas e computação ordens de magnitude mais rápida. 3. Esquema de Assinatura Ed25519 (EdDSA): - Curva de Edwards torcida imune a vazamentos por temporização (Side-Channel Timing Attacks) e imune a falhas de geradores de números pseudoaleatórios que comprometeram esquemas ECDSA no passado.
📐 Arquitetura Conceitual & Diagrama de Fluxo
graph TD
Alice["Alice (Chave Privada a)"] --> PubAlice["Chave Pública A = a * G"]
Bob["Bob (Chave Privada b)"] --> PubBob["Chave Pública B = b * G"]
PubAlice --> Canal["Canal Público Inseguro da Internet"]
PubBob --> Canal
Canal --> AliceCalc["Alice calcula: S = a * B = a * (b * G)"]
Canal --> BobCalc["Bob calcula: S = b * A = b * (a * G)"]
AliceCalc & BobCalc --> Secret["Segredo Compartilhado Idêntico S = abG!"]
style Alice fill:#e1f5fe,stroke:#01579b
style Bob fill:#fff3e0,stroke:#e65100
style Canal fill:#ffebee,stroke:#c62828
style Secret fill:#e8f5e9,stroke:#2e7d32 🔍 Pilares e Diretrizes Técnicas
Nesta unidade, aprofundamos os seguintes conceitos fundamentais: - Princípio de Kerckhoffs: A segurança de um sistema criptográfico deve residir unicamente no sigilo da chave, e não no segredo do algoritmo. - Curva Ed25519 e Determinação: Assinaturas determinísticas que eliminam a dependência de entropia em runtime durante o processo de assinatura. - Resistência a Ataques de Canal Lateral: Algoritmos concebidos para executar em tempo constante (Constant-Time Execution), impedindo espionagem por medição de clock. - Transição para Criptografia Pós-Quântica (PQC): Preparação para esquemas baseados em reticulados (ex: ML-KEM / Kyber) frente à ameaça do algoritmo de Shor.
🛠️ 2. Implementação Prática em Criptografia de Chave Pública e Matemática Computacional
Abaixo está a implementação técnica de referência, estruturada com padrões de engenharia de software e foco em robustez:
// asymmetric_crypto.py (Troca de Chaves ECDH e Assinatura Ed25519 em Python)
from cryptography.hazmat.primitives.asymmetric import x25519, ed25519
from cryptography.hazmat.primitives import serialization
# 1. Geração de Chaves de Troca Diffie-Hellman Efêmero (X25519)
alice_private = x25519.X25519PrivateKey.generate()
alice_public = alice_private.public_key()
bob_private = x25519.X25519PrivateKey.generate()
bob_public = bob_private.public_key()
# 2. Computação do Segredo Compartilhado Simétrico em Ambos os Lados
alice_shared = alice_private.exchange(bob_public)
bob_shared = bob_private.exchange(alice_public)
assert alice_shared == bob_shared
print(f"Segredo Compartilhado ECDH estabelecido com sucesso ({len(alice_shared)} bytes)!")
# 3. Assinatura Digital Moderna com Ed25519
signer_private = ed25519.Ed25519PrivateKey.generate()
signer_public = signer_private.public_key()
mensagem = b"Instrucao de transferencia financeira auditada e inviolavel"
assinatura = signer_private.sign(mensagem)
# Verificação pelo destinatário
try:
signer_public.verify(assinatura, mensagem)
print("Assinatura Ed25519 verificada com autenticidade matemática absoluta!")
except Exception as e:
print(f"Falha na verificação da assinatura: {e}")
💡 Análise Passo a Passo do Código
- Uso da Curva X25519: Troca de chaves Diffie-Hellman de alta performance concebida por Daniel J. Bernstein.
- Cálculo Atômico
exchange(): Gera o mesmo segredo compartilhado em ambas as extremidades sem expor a chave privada. - Assinatura Ed25519: Cria assinaturas compactas de 64 bytes que atestam a autoria inequívoca da mensagem.
🎯 3. Próximos Passos & Sequência Didática
-
Slides da Aula
-
Quiz de Fixação
-
Exercícios Práticos
-
Desafio de Projeto