Cifrado ChaCha20
Cifrado de flujo moderno con autenticación opcional
Seguridad del lado del cliente
Todas las operaciones de cifrado/descifrado se realizan localmente en su navegador. No se envían datos a ningún servidor.
Valor inicial del contador (predeterminado: 0)
Acerca de ChaCha20
ChaCha20 es un cifrado de flujo moderno diseñado por Daniel J. Bernstein en 2008, derivado del cifrado Salsa20. Usa una clave de 256 bits y opera en bloques de 512 bits, generando un flujo de claves que se XORea con el texto plano para cifrar. Este cifrado es conocido por su velocidad, seguridad y resistencia a ataques de tiempo.
Este cifrado es conocido por su velocidad, seguridad y resistencia a ataques de tiempo, lo que lo convierte en una excelente opción para implementaciones de software.
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) | Cifrado sin procesar, protocolos personalizados |
| ChaCha20-Poly1305 | AEAD | 256 bits | 96 bits (12 bytes) | TLS 1.3, QUIC, mensajería segura |
| XChaCha20 | Cifrado de flujo | 256 bits | 192 bits (24 bytes) | Escenarios de nonce aleatorio |
| XChaCha20-Poly1305 | AEAD | 256 bits | 192 bits (24 bytes) | La mayoría de aplicaciones (recomendado) |
Cómo funciona ChaCha20
ChaCha20 opera en 20 rondas, aplicando funciones de cuarto de ronda a una matriz 4×4 de palabras de 32 bits. El estado inicial consiste en:
Cada ronda permuta el estado usando sumas, XORs y rotaciones, proporcionando excelente difusión mientras permanece rápido en software.
AEAD: Cifrado autenticado
ChaCha20-Poly1305 es una construcción AEAD estandarizada en RFC 8439. Combina ChaCha20 para cifrado con el MAC Poly1305 para autenticación. Esto asegura confidencialidad e integridad - cualquier manipulación del texto cifrado o AAD será detectada durante el descifrado. La etiqueta de autenticación de 128 bits se añade al texto cifrado.
Esto garantiza tanto la confidencialidad como la integridad: cualquier manipulación del texto cifrado o AAD se detectará durante el descifrado. La etiqueta de autenticación de 128 bits se calcula sobre el texto cifrado y AAD.
Características principales
- Alto rendimiento: Optimizado para implementaciones de software, 3× más rápido que AES sin aceleración de hardware
- Tiempo constante: Resistente a ataques de temporización de caché, a diferencia de implementaciones AES basadas en tablas
- Diseño simple: Solo usa operaciones ARX (suma, rotación, XOR), fácil de implementar correctamente
- Amplia adopción: Usado en TLS 1.3, OpenSSH, WireGuard, Signal Protocol y más
- Nonce extendido: La variante XChaCha20 permite generación segura de nonce aleatorio sin riesgo de colisión
Consideraciones de seguridad
- Nunca reutilizar un nonce con la misma clave - esto compromete completamente la seguridad
- Usar variantes AEAD (Poly1305) para la mayoría de aplicaciones para detectar manipulaciones
- Para nonces aleatorios, usar XChaCha20 (192 bits) para minimizar probabilidad de colisión
- Usar un KDF apropiado (HKDF, Argon2) para derivar claves de contraseñas
Uso en el mundo real
- TLS 1.3: Suite de cifrado predeterminada (TLS_CHACHA20_POLY1305_SHA256)
- WireGuard VPN: Protocolo de cifrado principal
- Signal Protocol: Mensajería cifrada de extremo a extremo
- Cloudflare: Preferido sobre AES-GCM para clientes móviles
- Kernel de Linux: CSPRNG (/dev/urandom)
Referencias
- RFC 7539 - ChaCha20 y Poly1305 para protocolos IETF
- RFC 8439 - ChaCha20 y Poly1305 para protocolos IETF (actualizado)
- Wikipedia - ChaCha20-Poly1305
- Artículo original de ChaCha por D.J. Bernstein
Preguntas frecuentes
¿Cuál es la diferencia entre ChaCha20 y AES?
Ambos son cifrados simétricos seguros. ChaCha20 es 3× más rápido en software sin aceleración de hardware y resistente a ataques de temporización. AES es más rápido con soporte de hardware (AES-NI). ChaCha20 es preferido para dispositivos móviles y embebidos.
¿Por qué usar XChaCha20 en lugar de ChaCha20?
El nonce de 192 bits de XChaCha20 permite generación segura de nonce aleatorio. Con un nonce de 96 bits, necesitarías gestión cuidadosa para evitar colisiones. XChaCha20 se recomienda cuando no puedes garantizar nonces secuenciales únicos.
¿Para qué es el parámetro contador?
El contador permite cifrar mensajes de más de 64 bytes incrementando para cada bloque. Para modos AEAD, comienza en 1 (el bloque 0 genera la clave Poly1305). Normalmente, puedes dejarlo en el valor predeterminado (0).
¿Puedo cifrar archivos con esta herramienta?
Esta herramienta funciona completamente en tu navegador y es adecuada para cifrar texto y datos pequeños. Para archivos grandes, considera usar herramientas nativas como openssl o aplicaciones basadas en libsodium.
¿Es esta herramienta segura para uso en producción?
Esta herramienta es para propósitos educativos y de desarrollo. Aunque la implementación sigue las especificaciones estándar, los sistemas de producción deberían usar bibliotecas criptográficas bien auditadas como libsodium, OpenSSL o APIs de la plataforma.
Herramientas Relacionadas
Cifrado/Descifrado AES
Cifrar y descifrar texto de forma segura usando el algoritmo AES
Familia RC (RC4/RC5/RC6)
Cifrados de flujo y bloque de la familia RC incluyendo RC4, RC4-Drop, RC5 y RC6 (finalista AES)
Cifrado/Descifrado Blowfish
Cifrado de bloques simétrico rápido diseñado por Bruce Schneier, con longitud de clave variable (32-448 bits)