Skip to content
Vol. 1 · Ed. 2026
CyberGlossary
Entry № 182

ChaCha20-Poly1305

Reviewed byCybersecurity entrepreneur & security researcher

What is ChaCha20-Poly1305?

ChaCha20-Poly1305An AEAD construction pairing the ChaCha20 stream cipher with the Poly1305 one-time authenticator, standardised in RFC 8439 for TLS 1.3 and WireGuard.


ChaCha20-Poly1305 is the AEAD cipher specified in RFC 8439 (which obsoleted RFC 7539). ChaCha20 is a 256-bit-key ARX stream cipher designed by Daniel J. Bernstein, with a 96-bit nonce and 32-bit counter producing a 512-bit keystream block per invocation; Poly1305 is a 128-bit one-time MAC over the ciphertext and associated data, keyed by the first block of the ChaCha20 keystream. Because it is constant-time and fast in pure software without AES-NI, Google shipped it in Chrome and Android in 2014 (championed by Adam Langley) to protect mobile clients lacking AES hardware, where it sidesteps the cache-timing pitfalls of table-based AES.

It is now ubiquitous: TLS 1.2 suites (RFC 7905), a mandatory TLS 1.3 suite (RFC 8446), QUIC (RFC 9001), chacha20-poly1305@openssh.com in OpenSSH since 6.5, OpenVPN, and every WireGuard data frame. The extended-nonce variant XChaCha20-Poly1305 (192-bit nonce, popularised by libsodium) lets applications choose nonces randomly without birthday-bound concerns.

Like AES-GCM it fails catastrophically on nonce reuse: repeating a nonce under one key both leaks the keystream XOR of two plaintexts and exposes the Poly1305 key, enabling message forgery. Implementations therefore use deterministic counters and rekey before the counter can wrap.

flowchart LR
  K[256-bit key] --> CC[ChaCha20]
  N[96-bit nonce] --> CC
  CC -->|block 0| PK[Poly1305 one-time key]
  CC -->|blocks 1..n| KS[Keystream]
  P[Plaintext] --> X((XOR))
  KS --> X
  X --> CT[Ciphertext]
  AD[Associated data] --> PM[Poly1305 MAC]
  CT --> PM
  PK --> PM
  PM --> TAG[128-bit tag]
  CT --> OUT[Ciphertext + tag]
  TAG --> OUT

Examples

  1. 01

    TLS 1.3 cipher suite TLS_CHACHA20_POLY1305_SHA256.

  2. 02

    WireGuard tunnel data frames are encrypted with ChaCha20-Poly1305.

Frequently asked questions

What is ChaCha20-Poly1305?

An AEAD construction pairing the ChaCha20 stream cipher with the Poly1305 one-time authenticator, standardised in RFC 8439 for TLS 1.3 and WireGuard. It belongs to the Cryptography category of cybersecurity.

What does ChaCha20-Poly1305 mean?

An AEAD construction pairing the ChaCha20 stream cipher with the Poly1305 one-time authenticator, standardised in RFC 8439 for TLS 1.3 and WireGuard.

How do you defend against ChaCha20-Poly1305?

Defences for ChaCha20-Poly1305 typically combine technical controls and operational practices, as detailed in the full definition above.

What are other names for ChaCha20-Poly1305?

Common alternative names include: ChaCha20/Poly1305, RFC 8439, ChaPoly.

Related terms

See also