ChaCha20 solo usa sumas, rotaciones y XOR, así que se ejecuta en tiempo constante en cualquier CPU, y Poly1305 es un MAC de un solo uso cuya clave se deriva para cada mensaje del primer bloque del cifrado. El RFC 8439 (que sustituyó al RFC 7539) usa un contador de bloques de 32 bits, lo que limita un mensaje a 256 GiB. XChaCha20-Poly1305 amplía el nonce a 192 bits para que los nonces aleatorios sean seguros; se describe en un Internet-Draft y lo implementan libsodium y otras bibliotecas.
Repetir un par de clave y nonce rompe la confidencialidad y permite a un atacante falsificar mensajes, exactamente igual que con AES-GCM. En CPU con instrucciones AES, AES-GCM suele ser más rápido con grandes volúmenes de datos (en un núcleo de un Apple M4 Max: unos 2,1 GB/s con ChaCha20-Poly1305 frente a 8,8 GB/s con AES-256-GCM en OpenSSL 3.6.5), pero ChaCha20-Poly1305 gana con mensajes pequeños y en dispositivos sin hardware de AES.
Aparece como TLS_CHACHA20_POLY1305_SHA256 (0x1303) en TLS 1.3, chacha20-poly1305@openssh.com en OpenSSH, el cifrado de transporte de WireGuard, el cifrado de la carga útil en age y los tokens locales de PASETO v2.