Pular para conteúdo

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

  1. Uso da Curva X25519: Troca de chaves Diffie-Hellman de alta performance concebida por Daniel J. Bernstein.
  2. Cálculo Atômico exchange(): Gera o mesmo segredo compartilhado em ambas as extremidades sem expor a chave privada.
  3. Assinatura Ed25519: Cria assinaturas compactas de 64 bytes que atestam a autoria inequívoca da mensagem.

🎯 3. Próximos Passos & Sequência Didática