Cada vez que envías un mensaje, realizas un pago en línea o inicias sesión en un servicio seguro, el cifrado trabaja en segundo plano para mantener tus datos privados. Uno de los algoritmos que realiza esta tarea hoy en día es ChaCha20: un cifrado rápido, seguro y ligero en el que confían tanto los gigantes tecnológicos como los expertos en seguridad. Te explicamos qué es y cómo mantiene tus datos a salvo.

Comprender el algoritmo ChaCha20
Para comprender el algoritmo ChaCha20, resulta útil desglosarlo en sus elementos principales: su origen, el proceso que utiliza para producir datos cifrados y el papel de su clave, nonce y contador. Cada una de estas partes trabaja en conjunto para ofrecer velocidad, eficiencia y seguridad, lo que convierte a ChaCha20 en una opción sólida en muchos protocolos de cifrado modernos.
¿Quién desarrolló ChaCha20 y por qué?
ChaCha fue desarrollado en 2008 por Daniel J. Bernstein, un matemático, informático y criptógrafo estadounidense-alemán. Se basa en su diseño anterior, Salsa20.
Una de las principales razones para crear ChaCha20 fue ofrecer una alternativa sólida a cifrados de uso generalizado como Advanced Encryption Standard (AES). Aunque AES es muy seguro, alcanza su mayor velocidad en dispositivos que admiten aceleración por hardware: instrucciones especiales de la CPU, como las Advanced Encryption Standard New Instructions (AES-NI) de Intel, que aceleran sus operaciones. Muchos dispositivos antiguos, móviles o de bajo consumo no cuentan con este soporte de hardware, lo que hace que AES sea más lento y consuma más batería cuando se implementa únicamente por software.
ChaCha20 se diseñó para evitar este problema. Utiliza únicamente operaciones simples que se ejecutan con rapidez en prácticamente cualquier procesador. Este diseño ligero lo hace especialmente adecuado para smartphones, sistemas embebidos y otros entornos con recursos limitados. Hoy en día, ChaCha20 se recomienda en protocolos modernos como Transport Layer Security (TLS) 1.3 como una opción fiable junto a AES.
Cómo funciona ChaCha20
Digamos que quieres cifrar este mensaje usando ChaCha20: “ExpressVPN protege mi privacidad en línea y ayuda a mantener mis datos a salvo.” Así es como se hace, paso a paso.
1. Convierte el mensaje en bytes.
Los ordenadores trabajan con bytes, que son unidades de 8 bits que pueden almacenar un número del 0 al 255. Un texto como nuestra frase se almacena asignando cada carácter («E», «x», espacio, «.», etc.) a 1 byte. Nuestra frase tiene 66 bytes de longitud, así que se necesitará un poco más de un chunk (bloque) de 64 bytes para cifrarla.
2. A continuación, necesitas una clave secreta.
ChaCha20 es un cifrado simétrico, lo que significa que el mismo secreto se usa para cifrar y descifrar. Ese secreto es una clave de 256 bits (32 bytes). Puedes pensarlo como una contraseña larga y aleatoria que solo conocen el emisor y el receptor. ¿Por qué 256 bits? Es lo suficientemente grande como para que adivinarla por prueba y error sea prácticamente imposible.
3. También necesitas un nonce (número usado una sola vez).
Un nonce es un número público y único que se elige para cada mensaje que cifras con una clave determinada.
En la versión de ChaCha20 de Internet Engineering Task Force (IETF), el nonce es de 96 bits (12 bytes). No tiene que ser secreto, pero nunca debe repetirse con la misma clave. Reutilizar un par clave–nonce revelaría tu mensaje.
4. ChaCha20 genera un flujo de clave.
ChaCha20 pertenece a la familia de los «cifrados de flujo». En lugar de mezclar directamente tu mensaje, primero produce un flujo de bytes seudoaleatorios llamado flujo de clave. Luego combinas ese flujo de clave con los bytes de tu mensaje mediante una operación sencilla llamada OR exclusivo (XOR) .
¿Cómo genera ChaCha20 el flujo de clave?
Construir un estado interno
ChaCha20 mantiene una pequeña área de trabajo llamada el estado, dispuesta como una cuadrícula 4×4 de números. Cada número de la cuadrícula es una palabra, que aquí significa un entero sin signo de 32 bits (4 bytes) como, por ejemplo, 00000000 00000000 00000111 01001001.
Las 16 palabras de la cuadrícula se rellenan con:
- 4 constantes fijas (solo identifican el algoritmo),
- 8 palabras de la clave de 256 bits (ya que 8 × 4 bytes = 32 bytes),
- 1 contador de bloques (se explica a continuación),
- 3 palabras del nonce (3 × 4 bytes = 12 bytes).

El contador de bloques
El flujo de clave se produce en bloques de 64 bytes cada vez.
Para que cada bloque de 64 bytes sea distinto, ChaCha20 usa un contador de 32 bits dentro del estado que empieza en 0 para el primer bloque, 1 para el siguiente bloque, y así sucesivamente.
Mezclar el estado (el núcleo ARX)
ChaCha20 mezcla repetidamente las 16 palabras de la cuadrícula usando solo tres operaciones: suma (módulo 2³²), rotación (rotación bit a bit de palabras de 32 bits) y XOR (que compara dos bits y da como resultado 1 si son distintos y 0 si son iguales).
Esta mezcla, basada en operaciones de adición, rotación y XOR (ARX), se realiza en rondas (ChaCha20 hace 20 rondas). Lo esencial es que estas operaciones simples y rápidas revuelven el estado a fondo, de un modo difícil de revertir sin la clave.
Producir 64 bytes de keystream
Tras la mezcla, ChaCha20 suma el estado original al estado mezclado (palabra por palabra) y luego emite el resultado como 64 bytes de keystream. Eso es un bloque de keystream.
5. Genera tantos bloques de keystream como necesites
Tu mensaje puede tener cualquier longitud. ChaCha20 simplemente usa counter = 0 para generar los primeros 64 bytes de keystream, counter = 1 para los siguientes 64 bytes, counter = 2 para los siguientes 64 bytes, y así sucesivamente. Como el contador cambia, cada bloque de keystream es único (incluso con la misma clave y el mismo nonce).
6. Alinea el keystream con tu mensaje
Nuestro mensaje de ejemplo tiene 67 bytes, así que el bloque 0 cubre los bytes 0–63 del mensaje (64 bytes) y el bloque 1 cubre los bytes 64–66 del mensaje (los últimos 3 bytes). Solo usamos los primeros 3 bytes del segundo bloque de keystream e ignoramos el resto.
7. Combina el mensaje con el keystream mediante XOR
XOR es una operación por byte con una propiedad útil: aplicar el mismo XOR dos veces te devuelve al punto de partida:
Cifrado (por byte): texto plano XOR keystream = texto cifrado
Descifrado (por byte, el mismo keystream): texto cifrado XOR keystream = texto plano
Comparación de ChaCha20 con otros cifrados
Aunque ChaCha20 se usa ampliamente en la actualidad, no es el único algoritmo de cifrado en uso. Otros cifrados, como AES y Rivest–Shamir–Adleman (RSA), también son comunes, pero funcionan de formas distintas y se adaptan a tareas diferentes. Compararlos ayuda a ver dónde encaja ChaCha20 y por qué ciertos protocolos lo eligen frente a las alternativas.
ChaCha20 vs. AES
ChaCha20 y AES son algoritmos de cifrado de clave simétrica, es decir, se utiliza la misma clave tanto para el cifrado como para el descifrado. Para comprender mejor diversas técnicas criptográficas, incluidas las diferencias entre el cifrado y el hashing, puedes consultar esta explicación de hashing vs. cifrado.
La principal diferencia entre ChaCha20 y AES radica en cómo procesan los datos. AES es un cifrado por bloques, que cifra los datos en bloques de tamaño fijo, mientras que ChaCha20 es un cifrado de flujo, que genera un flujo de claves continuo que se combina con los datos.
AES suele beneficiarse de la aceleración por hardware en los procesadores modernos, lo que lo hace extremadamente rápido en esos entornos. ChaCha20, por otro lado, está diseñado para ofrecer un rendimiento constante incluso sin soporte de hardware especializado, lo que lo convierte en una excelente opción para dispositivos móviles y sistemas de bajo consumo. Por eso ExpressVPN utiliza tanto AES-256 como ChaCha20 para su protocolo Lightway, y cambia automáticamente al que mejor se adapte a tu dispositivo (también puedes elegir uno u otro de forma manual).
Otra diferencia práctica está en la implementación. AES puede ser más complejo de programar de forma segura, ya que puede ser vulnerable a ataques de temporización si no se implementa con cuidado. ChaCha20 usa operaciones ARX simples que se ejecutan de forma natural en tiempo constante, lo que ayuda a reducir este riesgo.
Ambos cifrados se consideran seguros cuando se implementan correctamente, y protocolos modernos como TLS 1.3 incluyen soporte para cada uno. La elección entre ellos depende del hardware del dispositivo y de los requisitos de rendimiento, más que de cuestiones de seguridad.
| Función | ChaCha20 | AES |
| Tipo de cifrado | Cifrado de flujo | Cifrado de bloques |
| Aceleración por hardware | Rápido en todos los dispositivos | Mejor con AES‑NI (instrucciones de hardware dedicadas) |
| Facilidad de implementación | Operaciones más simples y de tiempo constante | Más complejo, requiere una programación cuidadosa |
| Velocidad sin AES‑NI (instrucciones de hardware dedicadas) | Muy rápido | Más lento |
ChaCha20 vs. RSA
ChaCha20 y RSA no son competidores directos: desempeñan funciones diferentes en la comunicación segura.
RSA es un algoritmo de cifrado asimétrico, lo que significa que utiliza un par de claves: una pública y una privada. Por lo general, se usa al inicio de una conexión segura para intercambiar claves de cifrado o verificar identidades. En TLS, el algoritmo de clave simétrica suele ser AES, y el intercambio de claves queda protegido por RSA.
Como RSA implica matemáticas más complejas y opera con tamaños de clave mayores, es más lento y menos eficiente para el cifrado continuo de datos.
ChaCha20, por otro lado, es un cifrado de flujo simétrico. Utiliza una única clave compartida tanto para el cifrado como para el descifrado, lo que lo hace más rápido y más adecuado para la transferencia continua de datos.
En la práctica, muchos protocolos seguros combinan ambos enfoques: RSA (u otro algoritmo asimétrico) para el handshake inicial y ChaCha20 u otro cifrado simétrico para el resto de la sesión.
Ventajas de ChaCha20
ChaCha20 es popular no solo porque es seguro, sino también porque funciona bien en situaciones del mundo real. Es rápido en todo tipo de dispositivos, incluso teléfonos y gadgets con menos potencia. Su diseño es sencillo, lo que ayuda a evitar errores comunes que pueden debilitar el cifrado.
Velocidad y rendimiento en dispositivos móviles y de bajo consumo
ChaCha20 está diseñado para funcionar de forma eficiente en todo tipo de hardware, no solo en procesadores de gama alta. En dispositivos sin aceleración de hardware AES, como muchos smartphones, tabletas o dispositivos IoT, puede ejecutarse de forma notablemente más rápida.
Simplicidad y resistencia a los ataques de temporización
ChaCha20 se basa en operaciones ARX simples. Estas se ejecutan en tiempo constante, lo que significa que la velocidad de ejecución no cambia en función de los datos que se procesan: todas las operaciones tardan exactamente el mismo tiempo.
Este diseño facilita una implementación segura y ayuda a proteger frente a los ataques de temporización, que intentan extraer información midiendo cuánto tardan los pasos de cifrado.
¿Cuáles son las limitaciones conocidas de ChaCha20?
ChaCha20 se ha estudiado durante años y no se han publicado roturas reales de la versión completa de 20 rondas. En conjunto, es la alternativa a AES más exhaustivamente evaluada que existe hoy. Sin embargo, tiene algunos límites claros que los desarrolladores deben tener en cuenta. Usarlo fuera de estos límites puede debilitar su protección.
- La reutilización de nonce es un riesgo grave: Usar el mismo nonce con la misma clave rompe instantáneamente la confidencialidad. Cada par nonce-clave debe ser único.
- Sin autenticación integrada: ChaCha20 solo cifra los datos. Para comprobar que no se han alterado, debe usarse con Poly1305.
- Límite de datos cifrados por clave/nonce: ChaCha20 puede manejar hasta 2³² bloques de 64 bytes (unos 256 GB) con la misma clave y nonce. Superar este límite provocaría la reutilización del keystream y socavaría por completo la seguridad del cifrado.
ChaCha20-Poly1305 explicado
ChaCha20‑Poly1305 es una combinación de dos componentes criptográficos que trabajan juntos para proteger los datos:
- ChaCha20 cifra la información con una clave secreta compartida y convierte el texto legible en algo que parece datos aleatorios para cualquiera que no tenga la clave. Sin embargo, no detecta alteraciones.
- Poly1305 produce un código de autenticación de mensajes (MAC) que permite al receptor confirmar que los datos no se han alterado y que proceden de la fuente correcta.
Juntos, forman lo que se conoce como cifrado autenticado con datos adicionales (AEAD). Esto significa que el proceso de cifrado no solo oculta el contenido del mensaje, sino que también verifica su integridad.
Poly1305 no es la única opción, pero es la elección más común cuando se usa ChaCha20 en protocolos modernos. Esto se debe a que ChaCha20‑Poly1305 ha sido estandarizado por el IETF (RFC 8439) y está ampliamente soportado en TLS, SSH, WireGuard y otros protocolos, por lo que es el de facto estándar.
ChaCha20 en 2025: Dónde se usa en los sistemas modernos
ChaCha20 se ha convertido en una elección estándar en muchas aplicaciones centradas en la seguridad. En la seguridad de internet, se usa en conexiones TLS, a menudo junto con Poly1305, para proteger el tráfico HTTPS, especialmente en dispositivos que no tienen soporte de hardware para AES. Los principales navegadores como Chrome y Firefox, y servidores web como nginx y Apache, admiten este conjunto de cifrado.

También se usa ampliamente en redes privadas virtuales (VPN). El protocolo VPN WireGuard, por ejemplo, establece ChaCha20‑Poly1305 como su opción predeterminada para proteger los datos y mantener un alto rendimiento en dispositivos móviles y embebidos. El soporte también está integrado en los principales sistemas operativos, incluidos Linux, Android, iOS y Windows.
Resumen
ChaCha20 es un cifrado de flujo moderno y apto para software, creado por Daniel J. Bernstein como una alternativa rápida y segura a AES, especialmente en dispositivos móviles y de bajo consumo sin aceleración por hardware. Cifra los datos usando una clave de 256 bits, un nonce único de 96 bits y un contador de bloques para generar un flujo de claves seudoaleatorio, que se combina con el texto plano mediante XOR. Su diseño ARX (Addition‑Rotation‑XOR) es simple, eficiente y naturalmente resistente a los ataques de temporización. ChaCha20 es simétrico (la misma clave para cifrado y descifrado) y se diferencia de los cifrados de bloque como AES y de los algoritmos asimétricos como RSA, que suelen usarse solo para el intercambio de claves o la autenticación. Aunque se considera altamente seguro y está ampliamente implementado en TLS, VPN y las principales plataformas, ChaCha20 debe usarse con una unicidad estricta del nonce y un límite de datos por par clave/nonce, y no ofrece autenticación integrada, por lo que suele combinarse con Poly1305 en la construcción AEAD estandarizada ChaCha20‑Poly1305 para proporcionar tanto confidencialidad como integridad.
FAQ: Preguntas frecuentes sobre ChaCha20
¿Google usa ChaCha20?
Sí. Google adoptó ChaCha20 con Poly1305 en 2014 como parte de sus protocolos Transport Layer Security (TLS) / Secure Sockets Layer (SSL). El objetivo era mejorar el rendimiento y la seguridad de los dispositivos móviles y servidores que carecen de aceleración por hardware de Advanced Encryption Standard (AES), haciendo que las conexiones seguras sean más rápidas y eficientes en esos entornos.
¿Es ChaCha20 resistente a la computación cuántica?
Sí. Los cifrados simétricos, como ChaCha20, se consideran generalmente seguros frente a la computación cuántica, siempre que usen claves suficientemente largas (p. ej., 256 bits).
¿Se puede usar ChaCha20 para el cifrado de archivos?
Sí. ChaCha20 se puede usar en herramientas de cifrado de archivos para proteger datos sensibles almacenados en dispositivos. Su velocidad y eficiencia lo hacen adecuado tanto para archivos grandes como para dispositivos con una capacidad de procesamiento limitada.
¿Se puede romper ChaCha20?
No hay ataques publicados en el mundo real que rompan el cifrado ChaCha20 completo de 20 rondas. Los expertos en seguridad siguen estudiándolo y, cuando se usa correctamente dentro de sus límites, se considera seguro para las necesidades de cifrado modernas.