CoderTools

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.

ChaCha20 (fluxo): 256 bits, nonce 96 bits, contador 32 bits, 20 rodadas; sem autenticação.

Valor inicial do contador (padrão: 0)

Opções de formato
🔒 100% Processamento localOs dados inseridos são processados inteiramente em seu navegador. Nenhum dado é enviado para qualquer servidor.

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

Menu Rápido

Nenhuma ferramenta recente