Criptografia ChaCha20
Cifra de fluxo moderna com autenticação opcional
Segurança do lado do cliente
ChaCha20-Poly1305 (RFC 8439) é o modo AEAD recomendado. ChaCha20 puro não oferece integridade — sempre usar com Poly1305. Nonce 96 bits: unicidade estrita obrigatória. XChaCha20-Poly1305 (192 bits) para geração aleatória segura.
Valor inicial do contador (padrão: 0)
Sobre o ChaCha20
ChaCha20 é uma cifra de fluxo ARX de Bernstein (2008), variante melhorada do Salsa20. Mesma matriz 4×4 mas quarter-round redesenhado com rotações 16-12-8-7: difusão completa em 2 rodadas vs 4 do Salsa20. IETF (RFC 8439): nonce 96 bits + contador 32 bits (máx 256 GB/nonce).
ChaCha20-Poly1305 (RFC 7539→RFC 8439): AEAD padronizado IETF. Chave Poly1305 derivada dos 32 primeiros bytes ChaCha20 (contador=0), cifragem a partir do contador=1. Tag 128 bits. Google 2014 para Android TLS. TLS 1.3 (RFC 8446): TLS_CHACHA20_POLY1305_SHA256 obrigatório.
Comparação de Algoritmos
| Algoritmo | Autenticação | Comprimento da chave | Tamanho do Nonce | Caso de Uso |
|---|---|---|---|---|
| ChaCha20 | Cifra de fluxo | 256 bits | 96 bits (12 bytes) | Pesquisa protocolo; streaming com autenticação em camada superior; benchmarking |
| ChaCha20-Poly1305 | AEAD | 256 bits | 96 bits (12 bytes) | TLS 1.3, WireGuard, SSH, QUIC, Signal; dispositivos sem AES-NI; AEAD resistente a timing |
| XChaCha20 | Cifra de fluxo | 256 bits | 192 bits (24 bytes) | Cifração arquivos/DB sem unicidade nonce garantida; libsodium secretstream; criptografia de backups |
| XChaCha20-Poly1305 | AEAD | 256 bits | 192 bits (24 bytes) | Dados em repouso com nonce aleatório + 128 bits auth; armazenamento libsodium; AEAD padrão sem gestão central de nonce |
Como o ChaCha20 Funciona
Inicialização 4×4: linha 0=constantes “expa nd 32-byte k”, linhas 1-2=chave 256 bits (8×32), linha 3=[contador|nonce₀|nonce₁|nonce₂] (IETF). Quarter-round(a,b,c,d): a+=b; d^=a; d‹‹‹16; c+=d; b^=c; b‹‹‹12; a+=b; d^=a; d‹‹‹8; c+=d; b^=c; b‹‹‹7.
Rodada dupla = quarter-round colunas + diagonais. Rotações 16-12-8-7: difusão completa em 2 rodadas (Salsa20: 4). 10 rodadas duplas; saída = XOR estado transformado com estado inicial.
AEAD: Criptografia Autenticada
ChaCha20-Poly1305 (RFC 8439): chave Poly1305 one-time dos 32 primeiros bytes ChaCha20 (contador=0); cifragem a partir do contador=1; MAC sobre [AAD preenchido||cifrado||len(AAD)||len(cifrado)]; tag 16 bytes.
XChaCha20-Poly1305: HChaCha20 deriva subchave 256 bits dos 128 primeiros bits nonce 192 bits + chave original. 2^32 mensagens → probabilidade colisão 2^(-128). libsodium: crypto_aead_xchacha20poly1305_ietf_encrypt.
Características Principais
- Melhor difusão que Salsa20: rotações 16-12-8-7 → difusão completa em 2 rodadas. ChaCha20/8 ≈ Salsa20/16 em segurança.
- Padronização IETF (RFC 8439, 2018): TLS 1.3, WireGuard, SSH, QUIC, Signal, Noise Protocol, Android TLS.
- Desempenho sem AES-NI: 25-40% mais rápido que AES-GCM em ARM, RISC-V, MIPS. Ideal IoT/móvel/embarcado.
- Nonce 96 bits IETF: contador 32 bits (máx 256 GB/nonce). XChaCha20: 192 bits para geração aleatória segura.
- Sem ataques conhecidos a ChaCha20/20 (2025). Melhor análise reduzida: Shi et al. (2012) sobre ChaCha20/6.
Considerações de Segurança
- Reutilização nonce catastrófica em ChaCha20-Poly1305: XOR plaintexts exposto + chave Poly1305 revelada. TLS 1.3: nonce XOR número de sequência.
- Limite contador 32 bits: máx 256 GB por (chave, nonce). TLS 1.3 re-keying via key_update.
- Chave Poly1305 one-time: reutilização nonce → reutilização chave Poly1305 → ataque forgery (Bernstein 2005). RFC 8439 §2.8.
- Tag truncado proibido: RFC 8439 exige 16 bytes. Truncação a 64 bits → 2^(-64), não conforme TLS 1.3.
Uso no Mundo Real
- TLS 1.3 (RFC 8446): TLS_CHACHA20_POLY1305_SHA256 obrigatório. OpenSSL, BoringSSL, NSS, WolfSSL, mbedTLS.
- WireGuard VPN: único cifrado simétrico (Donenfeld 2017, Linux 5.6). Com Curve25519, Poly1305, BLAKE2, SipHash.
- Signal Protocol/Double Ratchet: ChaCha20-Poly1305 após X3DH. WhatsApp, Messenger secreto, Matrix, Keybase.
- OpenSSH chacha20-poly1305@openssh.com (6.5, 2014): duas instâncias ChaCha20 para eliminar vazamentos de temporização.
- Google Mobile TLS (2014): Langley+Duong. 3x mais rápido que AES-128-GCM no Nexus 5 Cortex-A15. Influência IETF.
Referências
Ferramentas Relacionadas
Criptografia/Descriptografia AES
Criptografe e descriptografe texto com segurança usando o algoritmo AES
Família RC (RC4/RC5/RC6)
Cifras de fluxo e bloco da família RC incluindo RC4, RC4-Drop, RC5 e RC6 (finalista AES)
Criptografia/Descriptografia Blowfish
Cifra de bloco simétrica rápida projetada por Bruce Schneier, com comprimento de chave variável (32-448 bits)