Criptografia Moderna e Infraestrutura de Chaves Públicas (PKI)¶
Esta seção aborda técnicas criptográficas modernas que formam a base da segurança na internet, incluindo criptografia assimétrica, assinaturas digitais, protocolos de troca de chaves e infraestrutura de chaves públicas. Estes conceitos são essenciais para entender como as comunicações seguras funcionam na web.
Visão Geral¶
A criptografia moderna aborda limitações dos métodos clássicos resolvendo o problema fundamental: como comunicar-se com segurança quando não há um segredo pré-compartilhado. Isso é alcançado através de problemas matemáticos que são fáceis de calcular em uma direção, mas computacionalmente inviáveis de reverter.
Conceitos Principais Abordados¶
- Criptografia Assimétrica: Uso de pares de chaves (pública/privada) para comunicação segura
- Assinaturas Digitais: Garantia de autenticidade e não-repúdio
- Protocolos de Troca de Chaves: Estabelecimento seguro de segredos compartilhados em canais inseguros
- Infraestrutura de Chaves Públicas (PKI): Gerenciamento de certificados digitais e confiança
Fundamentos Matemáticos¶
O Problema do Logaritmo Discreto¶
Dado um primo $p$, um gerador $g$ e o valor $y = g^x \mod p$, encontrar $x$ dado $(p, g, y)$ é computacionalmente difícil. Isso forma a base de: - Troca de Chaves Diffie-Hellman - Criptografia ElGamal
O Problema da Fatoração de Inteiros¶
Dado um número composto grande $n = p \times q$ (onde $p, q$ são primos), encontrar $p$ e $q$ é difícil. Isso forma a base de: - Criptografia RSA
O Problema do Logaritmo Discreto em Curvas Elípticas¶
Encontrar $k$ dado os pontos $P$ e $Q = kP$ em uma curva elíptica é computacionalmente difícil, mesmo para tamanhos de chave relativamente pequenos. Isso permite: - ECC (Criptografia de Curva Elíptica) - chaves menores com segurança equivalente ao RSA
Criptografia Assimétrica (RSA, ECC)¶
A criptografia assimétrica usa um par de chaves matematicamente relacionadas: - Chave Pública: Pode ser compartilhada abertamente, usada para criptografia ou verificação de assinaturas - Chave Privada: Deve permanecer secreta, usada para descriptografia ou assinatura
RSA (Rivest-Shamir-Adleman)¶
O RSA é baseado na dificuldade de fatorar inteiros grandes.
Fundamento Matemático¶
Dado: 1. Dois números primos grandes $p$ e $q$ (tipicamente 1024 bits cada para uma chave de 2048 bits) 2. Módulo $n = p \times q$ 3. Função totiente de Euler $\phi(n) = (p-1)(q-1)$ 4. Expoente público $e$ (tipicamente 65537, coprimo com $\phi(n)$) 5. Expoente privado $d$ tal que $ed \equiv 1 \mod \phi(n)$
Criptografia: $C = M^e \mod n$
Descriptografia: $M = C^d \mod n$
Criptografia de Curva Elíptica (ECC)¶
A ECC fornece segurança equivalente ao RSA com chaves muito menores, tornando-a ideal para ambientes com limitação de largura de banda.
| Nível de Segurança | Tamanho da Chave RSA | Tamanho da Chave ECC |
|---|---|---|
| 128-bit | 3072 bits | 256 bits |
| 192-bit | 7680 bits | 384 bits |
| 256-bit | 15360 bits | 512 bits |
Assinaturas Digitais (ECDSA, RSA-PSS)¶
Assinaturas digitais fornecem três garantias de segurança: 1. Autenticidade: A mensagem foi assinada pelo remetente alegado 2. Integridade: A mensagem não foi modificada 3. Não-repúdio: O signatário não pode negar ter assinado
Protocolos de Troca de Chaves (Diffie-Hellman, ECDH)¶
Protocolos de troca de chaves permitem que duas partes estabeleçam um segredo compartilhado em um canal inseguro sem terem trocado nenhuma informação secreta anteriormente.
Diffie-Hellman Key Exchange¶
O Diffie-Hellman permite que duas partes estabeleçam um segredo compartilhado através de um canal inseguro: - Alice: Escolhe chave privada $a$, calcula pública $A = g^a \mod p$ - Bob: Escolhe chave privada $b$, calcula pública $B = g^b \mod p$ - Segredo Compartilhado: Ambos calculam $s = B^a \mod p = A^b \mod p$
Secreto Efêmero (Forward Secrecy)¶
Implementações modernas usam chaves efêmeras para sigilo futuro: - DHE: Usa chaves temporárias Diffie-Hellman descartadas após a troca - ECDHE: Usa variantes de curva elíptica, fornecendo melhor desempenho
Infraestrutura de Chaves Públicas (PKI)¶
Certificados Digitais¶
Um certificado digital vincula uma chave pública a uma identidade e é assinado por uma Autoridade Certificadora (CA).
Estrutura do Certificado (X.509)¶
Certificate ::= SEQUENCE {
tbsCertificate TBSCertificate,
signatureAlgorithm AlgorithmIdentifier,
signatureValue BIT STRING
}
Java PKI Implementation¶
import java.security.*;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManagerFactory;
public class SSLClient {
public static void main(String[] args) throws Exception {
// Carrega o truststore (contém certificados de CAs confiáveis)
KeyStore trustStore = KeyStore.getInstance("JKS");
// Inicializa TrustManagerFactory
TrustManagerFactory tmf = TrustManagerFactory.getInstance(
TrustManagerFactory.getDefaultAlgorithm());
tmf.init(trustStore);
// Cria SSLContext
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, tmf.getTrustManagers(), null);
}
}
Hierarquia de Autoridades Certificadoras (CA)¶
A PKI usa um modelo de confiança hierárquica:
Root CA (Auto-assinada, confiável por navegadores/SO)
└── Intermediate CA 1 (Assinada pela Root CA)
├── Intermediate CA 2 (Assinada pelo IC1)
│ └── Certificado do Servidor (Assinado pelo IC2)
└── Certificado do Servidor (Assinado pelo IC1)
└── Certificado do Servidor (Assinado pela Root CA)
Protocolo TLS/SSL¶
TLS (Transport Layer Security) é o protocolo que segura comunicações web. Ele combina:
- Troca de Chaves: ECDHE para sigilo futuro
- Autenticação: Verificação do certificado do servidor
- Criptografia: AES-GCM ou ChaCha20-Poly1305
- Integridade: AEAD (Authenticated Encryption with Associated Data)
Handshake TLS Resumido¶
Client Hello: Cliente propõe suites de criptografia, métodos de compressão
Server Hello: Servidor seleciona suite de criptografia, envia certificado
Certificate Verify: Cliente verifica certificado do servidor
Key Exchange: Ambas as partes calculam segredo compartilhado usando ECDHE
Finished Messages: Ambas as partes verificam que o handshake foi bem-sucedido
Application Data: Comunicação criptografada começa
Considerações de Segurança¶
Melhores Práticas¶
- Use algoritmos fortes: AES-256-GCM, RSA 4096+, ECC P-384 ou superior
- Evite algoritmos obsoletos: MD5, SHA-1, RC4, DES, 3DES
- Ative sigilo futuro: Use ECDHE em vez de troca RSA
- Use TLS 1.3: Fornece melhor segurança e desempenho que TLS 1.2
- Implemente pinning de certificados para aplicações móveis
Vulnerabilidades Comuns¶
| Vulnerabilidade | Descrição | Mitigação |
|---|---|---|
| Heartbleed | Divulgação de memória no OpenSSL | Atualizar bibliotecas, regenerar chaves |
| POODLE | Padding oracle attack em SSL 3.0 | Desabilitar SSL 3.0, usar TLS |
| BEAST | Browser security update attack | Usar AES-GCM ou ChaCha20 |
Referências¶
- RFC 6478: Elliptic Curve Diffie-Hellman (ECDH) Key Agreement Protocol
- RFC 5280: Internet X.509 Public Key Infrastructure Certificate Profile
- RFC 8446: The Transport Layer Security (TLS) Protocol Version 1.3
- Menezes, A. J., van Oorschot, P. C., & Vanstone, S. A. (1996). Handbook of Applied Cryptography. CRC Press.
- Bernstein, D. J., Lange, T., & Schwabe, P. (2017). "Post-Quantum Cryptography".