ChaCha20-Poly1305 és un algorisme de xifratge autenticat amb dades addicionals (AEAD), que combina el xifratge de flux ChaCha20 amb el codi d'autenticació de missatges Poly1305. El seu ús en protocols IETF està estandarditzat en RFC 8439. Té un rendiment de programari ràpid i, sense acceleració de maquinari, sol ser més ràpid que AES-GCM.
Els dos blocs de construcció de la construcció, els algorismes Poly1305 i ChaCha20, van ser tots dos dissenyats independentment, el 2005 i el 2008, per Daniel J. Bernstein.
El 2013-2014, una variant de l'algorisme ChaCha20 original (utilitzant un comptador de 32 bits i un nonce de 96 bits) i una variant del Poly1305 original (autenticació de 2 cadenes) es van combinar en un esborrany de l'IETF per ser utilitzat en TLS i DTLS, i escollit per Google, per raons de seguretat i rendiment, com a xifrat recentment admès.[1] Poc després de l'adopció de Google per a TLS, ChaCha20, Poly1305 i el mode AEAD combinat s'afegeixen a OpenSSH mitjançant el xifratge autenticat chacha20-poly1305@openssh.com
,[2][3] però es va mantenir el comptador original de 64 bits i el noce de 64 bits. per a l'algorisme ChaCha20.
El 2015, l'algoritme AEAD està estandarditzat en RFC 7539 i RFC 7905 per utilitzar-lo en TLS 1.2 i DTLS 1.2 i en RFC 7634 per utilitzar-lo en IPsec. El mateix any, Cloudflare la va integrar com a suite de xifrat alternativa.[4]
L'algorisme ChaCha20-Poly1305 tal com es descriu a RFC 8439 pren com a entrada una clau de 256 bits i un nonce de 96 bits per xifrar un text pla, amb una expansió de text xifrat de 128 bits (la mida de l'etiqueta). A la construcció ChaCha20-Poly1305, ChaCha20 s'utilitza en mode de comptador per derivar un flux de claus que és XOR amb el text pla. A continuació, el text xifrat i les dades associades s'autentiquen mitjançant una variant de Poly1305 que primer codifica les dues cadenes en una sola. La manera com es combinen un xifrat i un autenticador d'un sol cop és precisament idèntica a la construcció AES-GCM en com s'utilitza el primer bloc per sembrar l'autenticador i com s'autentica el text xifrat amb una etiqueta de 16 bytes.
La principal diferència externa amb ChaCha20 és la seva mida de bloc de 64 bytes (512 bits), en comparació amb els 16 bytes (128 bits) tant amb AES-128 com amb AES-256. La mida de bloc més gran permet un major rendiment a les CPU modernes i permet fluxos més grans abans que el comptador de 32 bits es desbordi.
ChaCha20-Poly1305 s'utilitza a IPsec, SSH, TLS 1.2, DTLS 1.2, TLS 1.3, WireGuard, [5] S/MIME 4.0, OTR v4 i diversos altres protocols. S'utilitza en programari com Borg com a xifratge de dades estàndard. Entre d'altres, està implementat en OpenSSL i libsodium.