ChaCha20 n’utilise que des additions, des rotations et des XOR, si bien qu’il s’exécute en temps constant sur n’importe quel processeur, et Poly1305 est un MAC à usage unique dont la clé, propre à chaque message, est tirée du premier bloc produit par l’algorithme de chiffrement. La RFC 8439 (qui a remplacé la RFC 7539) utilise un compteur de blocs de 32 bits, ce qui limite un message à 256 Gio. XChaCha20-Poly1305 étend le nonce à 192 bits pour que des nonces aléatoires soient sûrs ; il est décrit dans un Internet-Draft et implémenté notamment par libsodium.
Une paire clé-nonce répétée compromet la confidentialité et permet à un attaquant de falsifier des messages, exactement comme avec AES-GCM. Sur les processeurs dotés d’instructions AES, AES-GCM est généralement plus rapide pour les gros volumes de données (sur un cœur d’Apple M4 Max : environ 2,1 Go/s pour ChaCha20-Poly1305 contre 8,8 Go/s pour AES-256-GCM avec OpenSSL 3.6.5), mais ChaCha20-Poly1305 l’emporte sur les petits messages et sur les appareils sans matériel AES.
On le retrouve dans la suite TLS 1.3 TLS_CHACHA20_POLY1305_SHA256 (0x1303), dans chacha20-poly1305@openssh.com d’OpenSSH, dans le chiffrement de transport de WireGuard, dans le chiffrement de la charge utile d’age et dans les jetons locaux de PASETO v2.