CoderTools

Cifrado ChaCha20

Cifrado de flujo moderno con autenticación opcional

Seguridad del lado del cliente

ChaCha20-Poly1305 (RFC 8439) es el modo AEAD recomendado. ChaCha20 solo no ofrece integridad — siempre usar con Poly1305. Nonce 96 bits: unicidad estricta obligatoria. XChaCha20-Poly1305 (192 bits) para generación aleatoria segura.

ChaCha20 (flujo solo): 256 bits, nonce 96 bits, contador 32 bits, 20 rondas; sin autenticación.

Valor inicial del contador (predeterminado: 0)

Opciones de formato
🔒 100% Procesamiento localLos datos que introduce se procesan completamente en su navegador. No se envían a ningún servidor.

Acerca de ChaCha20

ChaCha20 es un cifrado de flujo ARX de Bernstein (2008), variante mejorada de Salsa20. Misma matriz 4×4 pero quarter-round rediseñado con rotaciones 16-12-8-7: difusión completa en 2 rondas vs 4 de Salsa20. IETF (RFC 8439): nonce 96 bits + contador 32 bits (máx 256 GB/nonce).

ChaCha20-Poly1305 (RFC 7539→RFC 8439): AEAD estandarizado IETF. Clave Poly1305 derivada de los 32 primeros bytes ChaCha20 (contador=0), cifrado desde contador=1. Tag 128 bits. Google 2014 para Android TLS. TLS 1.3 (RFC 8446): TLS_CHACHA20_POLY1305_SHA256 obligatorio.

Comparación de algoritmos

Algoritmo Autenticación Longitud de clave Tamaño del nonce Caso de uso
ChaCha20 Cifrado de flujo 256 bits 96 bits (12 bytes) Investigación protocolo; streaming con autenticación en capa superior; benchmarking
ChaCha20-Poly1305 AEAD 256 bits 96 bits (12 bytes) TLS 1.3, WireGuard, SSH, QUIC, Signal; dispositivos sin AES-NI; AEAD resistente a timing
XChaCha20 Cifrado de flujo 256 bits 192 bits (24 bytes) Cifrado archivos/DB sin unicidad nonce garantizada; libsodium secretstream; cifrado copias de seguridad
XChaCha20-Poly1305 AEAD 256 bits 192 bits (24 bytes) Datos en reposo con nonce aleatorio + 128 bits auth; almacenamiento libsodium; AEAD por defecto sin gestión central de nonce

Cómo funciona ChaCha20

Inicialización 4×4: fila 0=constantes “expa nd 32-byte k”, filas 1-2=clave 256 bits (8×32), fila 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.

Ronda doble = quarter-round columnas + diagonales. Rotaciones 16-12-8-7: difusión completa en 2 rondas (Salsa20: 4 rondas). 10 rondas dobles; salida = XOR estado transformado con estado inicial.

AEAD: Cifrado autenticado

ChaCha20-Poly1305 (RFC 8439): clave Poly1305 one-time de los 32 primeros bytes ChaCha20 (contador=0); cifrado desde contador=1; MAC sobre [AAD relleno||cifrado relleno||len(AAD)||len(cifrado)]; tag 16 bytes.

XChaCha20-Poly1305: HChaCha20 deriva subclave 256 bits de los 128 primeros bits nonce 192 bits + clave original. 2^32 mensajes → probabilidad colisión 2^(-128). libsodium: crypto_aead_xchacha20poly1305_ietf_encrypt.

Características principales

  • Mejor difusión que Salsa20: rotaciones 16-12-8-7 → difusión completa en 2 rondas. ChaCha20/8 ≈ Salsa20/16 en seguridad.
  • Estandarización IETF (RFC 8439, 2018): TLS 1.3, WireGuard, SSH, QUIC, Signal, Noise Protocol, Android TLS.
  • Rendimiento sin AES-NI: 25-40% más rápido que AES-GCM en ARM, RISC-V, MIPS. Ideal IoT/móvil/embebido.
  • Nonce 96 bits IETF: contador 32 bits (máx 256 GB/nonce). XChaCha20: 192 bits para generación aleatoria segura.
  • Sin ataques conocidos a ChaCha20/20 (2025). Mejor análisis reducido: Shi et al. (2012) sobre ChaCha20/6.

Consideraciones de seguridad

  • Reutilización nonce catastrófica en ChaCha20-Poly1305: XOR plaintexts expuesto + clave Poly1305 revelada. TLS 1.3: nonce XOR número de secuencia.
  • Límite contador 32 bits: máx 256 GB por (clave, nonce). TLS 1.3 re-keying via key_update.
  • Clave Poly1305 one-time: reutilización nonce → reutilización clave Poly1305 → ataque forgery (Bernstein 2005). RFC 8439 §2.8.
  • Tag truncado prohibido: RFC 8439 exige 16 bytes. Truncación a 64 bits → 2^(-64), no conforme TLS 1.3.

Uso en el mundo real

  • TLS 1.3 (RFC 8446): TLS_CHACHA20_POLY1305_SHA256 obligatorio. OpenSSL, BoringSSL, NSS, WolfSSL, mbedTLS.
  • WireGuard VPN: único cifrado simétrico (Donenfeld 2017, Linux 5.6). Con Curve25519, Poly1305, BLAKE2, SipHash.
  • Signal Protocol/Double Ratchet: ChaCha20-Poly1305 tras X3DH. WhatsApp, Messenger secreto, Matrix, Keybase.
  • OpenSSH chacha20-poly1305@openssh.com (6.5, 2014): dos instancias ChaCha20 para eliminar fugas de temporización.
  • Google Mobile TLS (2014): Langley+Duong. 3x más rápido que AES-128-GCM en Nexus 5 Cortex-A15. Influencia IETF.

Referencias

Menú Rápido

Sin herramientas recientes