05 - Criptografia em Trânsito
video: https://youtu.be/... no frontmatter da nota.Criptografia em Trânsito
A Criptografia em Trânsito garante que os dados trocados entre um cliente e um servidor não possam ser lidos nem modificados enquanto atravessam a rede (Internet, LAN ou nuvem). Diferente da VPN (que protege a rede inteira), a criptografia em trânsito protege a conexão individual da aplicação.
1. Tríade de Estados dos Dados
| Estado | Definição | Mecanismos típicos |
|---|---|---|
| Em trânsito (in transit) | Atravessando rede | TLS, IPSec, WireGuard, SSH |
| Em repouso (at rest) | Armazenado em disco/Bucket | AES-256, LUKS, BitLocker |
| Em uso (in use) | Sendo processado em RAM/CPU | TEE (SGX, SEV-SNP), confidential computing |
A criptografia em trânsito é a primeira camada obrigatória — qualquer dado que sai de um host deve ser protegido contra escuta e adulteração.
2. TLS/SSL (Transport Layer Security)
O TLS (sucessor do SSL) é o protocolo padrão para a criptografia em trânsito na Internet.
- Ele reside entre a camada de Transporte (TCP) e a camada de Aplicação (RFC 8446 para TLS 1.3, RFC 5246 para TLS 1.2).
- O TLS provê as três bases da Segurança da Informação:
- Confidencialidade: Dados cifrados com cifras simétricas (AES, ChaCha20).
- Integridade: Mensagens protegidas com AEAD (AES-GCM, ChaCha20-Poly1305) — cipher e MAC combinados.
- Autenticação: O servidor prova que é ele mesmo através de um Certificado Digital assinado por uma CA.
Evolução SSL → TLS
| Versão | Ano | Status | RFC | Vulnerabilidades |
|---|---|---|---|---|
| SSL 2.0 | 1995 | Obsoleto | draft-murray-... | DROWN, BEAST parcial |
| SSL 3.0 | 1996 | Obsoleto | RFC 6101 | POODLE (2014) |
| TLS 1.0 | 1999 | Obsoleto (2020) | RFC 2246 | BEAST, CRIME |
| TLS 1.1 | 2006 | Obsoleto (2020) | RFC 4346 | ataques de padding |
| TLS 1.2 | 2008 | Aceitável | RFC 5246 | Lucky 13 mitigado |
| TLS 1.3 | 2018 | Recomendado | RFC 8446 | Nenhum conhecido |
3. O Processo de Handshake TLS
Antes de qualquer dado ser enviado, ocorre uma negociação complexa:
TLS 1.2 (handshake clássico, 2 RTT)
- Client Hello: O navegador envia versões do TLS e cifras que suporta, além de extensions (SNI, ALPN, supported_groups).
- Server Hello: O servidor escolhe a cifra e envia seu Certificado Digital.
- Validação: O navegador verifica se o certificado foi emitido por uma Autoridade Certificadora (CA) confiável (Let's Encrypt, DigiCert, Sectigo).
- Troca de Chaves: Cliente e servidor usam criptografia assimétrica (RSA, DHE, ECDHE) para concordar sobre uma chave de sessão simétrica.
- Criptografia: O trânsito de dados começa usando a chave simétrica (AES-GCM).
TLS 1.3 (handshake otimizado, 1 RTT)
O TLS 1.3 reduz para um único RTT e remove algoritmos fracos (RSA key exchange, CBC mode, SHA-1, MD5). Suporta 0-RTT para conexões repetidas (com risco de replay attack).
Cliente Servidor
|---- ClientHello + KeyShare -->|
| |
|<--- ServerHello + KeyShare ---|
|<--- EncryptedExtensions ------|
|<--- Certificate --------------|
|<--- CertificateVerify --------|
|<--- Finished -----------------|
|---- Finished ---------------->|
|---- Application Data -------->| (já cifrado)
4. Cipher Suites
A cipher suite é a combinação de algoritmos usados em uma conexão TLS. Formato TLS 1.2: TLS_Kx_Au_WITH_CIPHER_HASH. Exemplo: TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384.
| Componente | Opções recomendadas (2024) | Opções obsoletas |
|---|---|---|
| Key exchange | ECDHE (X25519, P-256) | RSA estático, DH |
| Autenticação | RSA-PSS, ECDSA, Ed25519 | RSA-PKCS1v1.5 |
| Cipher simétrica | AES-256-GCM, ChaCha20-Poly1305 | RC4, 3DES, CBC |
| Hash / MAC | SHA-384, SHA-256 | MD5, SHA-1 |
5. Perfect Forward Secrecy (PFS)
A PFS garante que, mesmo se a chave privada do servidor for comprometida no futuro, sessões gravadas no passado não podem ser decifradas. Isso é obtido usando DHE ou ECDHE (Ephemeral Diffie-Hellman), onde a chave de sessão é gerada com parâmetros efêmeros descartados ao fim da conexão. O TLS 1.3 exige PFS em todas as conexões — sem ECDHE/DHE não há TLS 1.3.
6. Implementações Comuns
- HTTPS: HTTP sobre TLS (Porta 443, RFC 9110/9112).
- SMTPS / IMAPS / POP3S: Protocolos de e-mail sobre TLS (STARTTLS ou implícito).
- MQTTS: Protocolo IoT sobre TLS (porta 8883).
- LDAPS: Acesso a diretórios (Active Directory) sobre TLS (porta 636).
- FTPS: FTP sobre TLS (RFC 4217).
- DNS over TLS (DoT): porta 853, RFC 7858.
- DNS over HTTPS (DoH): RFC 8484.
7. IPSec (IP Security)
Para cifrar tráfego IP inteiro (não só aplicação), usa-se o IPSec (RFC 4301), composto por:
- AH (Authentication Header, RFC 4302): garante integridade e autenticidade; não cifra.
- ESP (Encapsulating Security Payload, RFC 4303): garante confidencialidade + integridade.
- IKE (Internet Key Exchange, RFC 7296): negocia chaves (IKEv2 é o padrão moderno).
Modos: Transport (cifra payload, mantém IP original — host-to-host) ou Tunnel (cifra pacote inteiro dentro de novo IP — VPN site-to-site).
8. SSH (Secure Shell)
O SSH (RFC 4251-4254) substituiu Telnet, RSH e FTP. Oferece:
- Autenticação por senha, chave pública (Ed25519 recomendada), ou certificado.
- Túneis port forward (local, remote, dynamic/SOCKS).
- SFTP e SCP para transferência segura de arquivos.
- Multiplexação de canais numa única sessão TCP.
# Geração de chave Ed25519 (recomendada)
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -C "user@host"
# Desabilitar algoritmos fracos no sshd_config
KexAlgorithms curve25519-sha256@libssh.org,ecdh-sha2-nistp521
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com
9. VPN Moderna
| Protocolo | Camada | Uso | Velocidade | Segurança |
|---|---|---|---|---|
| IPSec | L3 | Site-to-site | Alta | Alta |
| OpenVPN | L3/L4 (UDP/TCP) | Acesso remoto | Média | Alta |
| WireGuard | L3 (UDP) | Site-to-site e remoto | Muito alta | Alta (modern crypto) |
| SSL VPN | L7 | Web VPN (Cisco AnyConnect) | Média | Alta |
WireGuard (RFC draft, atual em 2024) é o estado-da-arte: código 4.000 linhas (vs 600.000 do OpenVPN+IPSec), uses apenas ChaCha20-Poly1305, Curve25519, BLAKE2s e HKDF.
10. Ataques contra Criptografia em Trânsito
| Ataque | Mecanismo | Mitigação |
|---|---|---|
| MITM (Man-in-the-Middle) | Interceptação ativa | PKI, Certificate Transparency |
| Downgrade | Forçar TLS 1.0/SSL 3 | Desabilitar versões antigas |
| POODLE | SSL 3.0 padding | Desabilitar SSL 3.0 |
| BEAST | TLS 1.0 CBC | RC4 (obsoleto) ou TLS 1.2+ |
| CRIME/BREACH | Compressão + CBC | Desabilitar compressão TLS |
| Heartbleed | Bug OpenSSL | Patch, ECC rand extended |
| ROBOT | Bleichenbacher RSA | Desabilitar RSA estático |
| Lucky 13 | CBC timing | Usar AEAD (GCM) |
11. Defesas Adicionais
- HSTS (HTTP Strict Transport Security, RFC 6797): Header HTTP que força o navegador a usar apenas HTTPS.
Strict-Transport-Security: max-age=63072000; includeSubDomains; preload. - Certificate Pinning: Aplicativos mobile embarcam hash da chave pública esperada, rejeitando certificados CA fraudulentos (até mesmo emitidos por CA legítima comprometida).
- Certificate Transparency (RFC 6962): Logs públicos de todos os certificados emitidos, permitindo detecção de emissões fraudulentas.
- OCSP Stapling: Servidor traz o status de revogação do certificado no handshake, evitando atraso e privacidade do OCSP lookup.
- Let's Encrypt / ACME (RFC 8555): CA gratuita e automatizada — responsável por mais de 50% dos certificados ativos na web.
Exemplo Nginx com TLS 1.3 e HSTS
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
ssl_session_tickets off;
ssl_session_timeout 1d;
ssl_session_cache shared:Moz:50m;
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
add_header X-Frame-Options "SAMEORIGIN" always;
}
12. Ferramentas de Diagnóstico
# Verificar cipher suites suportados por um servidor
nmap --script ssl-enum-ciphers -p 443 example.com
# Verificar conformidade TLS (qualidade nota A+)
openssl s_client -connect example.com:443 -tls1_3
testssl.sh https://example.com
sslyze --regular example.com
# Verificar certificado remotamente
echo | openssl s_client -showcerts -servername example.com -connect example.com:443 2>/dev/null | openssl x509 -noout -text
13. Conclusão
A criptografia em trânsito deixou de ser opcional — é obrigatória em qualquer arquitetura moderna. O TLS 1.3 é o estado-da-arte, mas a cadeia de confiança (PKI, CA, Certificate Transparency) e os mecanismos complementares (HSTS, Pinning, OCSP Stapling) são igualmente críticos. Em ambientes corporativos, deve-se configurar os servidores para aceitar apenas TLS 1.2 e TLS 1.3, desabilitar cipher suites com CBC, RSA estático e SHA-1, e monitorar ativamente a expiração de certificados (Let's Encrypt + renovação automática elimina a maior parte dos incidentes operacionais). Em ambientes cloud e microserviços, o padrão é mTLS (mutual TLS) automatizado por service mesh (Istio, Linkerd), garantindo que cada conexão East-West seja autenticada bilateralmente.