ChaCha20-Poly1305 is an IETF AEAD cipher in TLS 1.2 and 1.3, supported from Chrome 33, Firefox 47, Safari 11.1, Edge 79, and Opera 36 on.

Prince Dewani
May 6, 2026
ChaCha20-Poly1305 is an IETF authenticated encryption algorithm in RFC 8439 that pairs the ChaCha20 stream cipher with the Poly1305 message authentication code into one AEAD construction. Browsers ship it as a TLS cipher suite from Chrome 33, Edge 79, Firefox 47, Safari 11.1, Opera 36, and Samsung Internet 4 on, while Internet Explorer and Opera Mini lack support.
This guide covers what ChaCha20-Poly1305 is, browser support, the TLS cipher suites, the AES-GCM comparison, and known issues.
ChaCha20-Poly1305 is an AEAD cipher the IETF standardized in RFC 8439. It encrypts data with the ChaCha20 stream cipher under a 256-bit key and a 96-bit nonce, then authenticates the ciphertext with a Poly1305 tag. Browsers, OpenSSH, WireGuard, and IPsec all use it.
Every modern browser supports ChaCha20-Poly1305 as a TLS 1.2 and TLS 1.3 cipher suite. Internet Explorer and Opera Mini are the only major exceptions, and the global usage figure on caniuse sits above 96%.
Chrome supports ChaCha20-Poly1305 from Chrome 33 on Windows, macOS, Linux, ChromeOS, and Android. Early Chrome 33 to 48 builds shipped a non-standard draft code point, and Chrome 49 added the final RFC 7905 code points alongside it. Chrome 4 to 32 did not support the cipher. The Chromium client picks ChaCha20 over AES-GCM when the device lacks AES-NI hardware acceleration, which is common on low-end ARM phones.
Microsoft Edge supports ChaCha20-Poly1305 from Edge 79 on Windows, macOS, Linux, Android, and iOS. Chromium-based Edge inherits the BoringSSL TLS stack, which negotiates the cipher on TLS 1.2 and TLS 1.3 by default. Legacy EdgeHTML versions, Edge 12 to 18, did not support the cipher because Schannel on those Windows builds never offered ChaCha20.
Firefox supports ChaCha20-Poly1305 from Firefox 47 on Windows, macOS, Linux, and Android. Firefox 2 to 46 did not support the cipher because Mozilla NSS only added the AEAD construction in NSS 3.24. Firefox ESR shipped the cipher with the 52 ESR branch, and every ESR release since has kept it on by default.
Safari supports ChaCha20-Poly1305 from Safari 11.1 on macOS High Sierra and Safari 11 on iOS 11 and iPadOS. Apple wired the cipher into the SecureTransport TLS stack, and the same code path covers Safari on macOS, iOS, iPadOS, watchOS, and tvOS. Safari 3.2 to 11 did not offer the cipher, since SecureTransport on macOS 10.13 and earlier shipped without it.
Opera supports ChaCha20-Poly1305 from Opera 36 on desktop and Opera Mobile 80 on Android. Opera 15 to 35 inherited Chromium's earlier TLS stack and did not yet have the AEAD construction wired in. Opera Mini renders pages on a server proxy, so the user agent never negotiates the cipher with origin servers and shows the proxy's TLS configuration instead.
Samsung Internet supports ChaCha20-Poly1305 from Samsung Internet 4 on Android. The browser ships the Chromium BoringSSL TLS stack, so the cipher is on by default for TLS 1.2 and TLS 1.3 connections. Samsung Internet on lower-end Galaxy and Tab devices often ranks ChaCha20 above AES-GCM in the client preference list, since many of those chips lack hardware AES.
The legacy Android Browser on Android 2.1 to 4.4 does not support ChaCha20-Poly1305, because the AOSP WebKit build shipped before the cipher existed. Android WebView switched to Chromium in Android 4.4, and recent WebView and Chrome for Android builds negotiate the cipher on every modern Android release. Older AOSP devices stuck on the pre-Chromium WebView never receive the cipher.
Internet Explorer does not support ChaCha20-Poly1305 on any version, from IE 5.5 through IE 11. Microsoft has retired Internet Explorer. Schannel on Windows 7, 8, and 10 never added the cipher to the IE-mode code path, so any service that still has IE clients on the wire has to keep an AES-GCM or AES-CBC cipher suite enabled for them.
Note: ChaCha20-Poly1305 negotiation differs across browsers, OS versions, and CPU hardware. Test your TLS handshake on real browsers and devices with TestMu AI. Try TestMu AI free!
ChaCha20-Poly1305 appears in one TLS 1.3 suite and three TLS 1.2 suites. The TLS 1.3 suite drops the key-exchange and signature names, since TLS 1.3 negotiates those in separate extensions. The TLS 1.2 suites keep the full ECDHE-and-signature naming.
The snippet below uses OpenSSL to force a connection through the TLS 1.3 ChaCha20 suite, then through one of the TLS 1.2 suites. Run it against a server that supports the cipher and the s_client output names the negotiated suite on the New, TLSv1.x line.
# Connect with OpenSSL and force the ChaCha20-Poly1305 TLS 1.3 suite.
openssl s_client -connect example.com:443 \
-tls1_3 -ciphersuites TLS_CHACHA20_POLY1305_SHA256
# TLS 1.2 equivalent: only offer the ChaCha20 cipher suites.
openssl s_client -connect example.com:443 \
-tls1_2 -cipher 'ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-CHACHA20-POLY1305'
# In the handshake output, look for the negotiated line:
# New, TLSv1.3, Cipher is TLS_CHACHA20_POLY1305_SHA256ChaCha20-Poly1305 and AES-256-GCM are the two AEAD ciphers that TLS 1.3 keeps on the standards track. The right choice depends on the CPU, the threat model, and the side-channel posture of the implementation.
| Dimension | ChaCha20-Poly1305 | AES-256-GCM |
|---|---|---|
| Cipher type | Stream cipher with Poly1305 MAC | Block cipher in Galois/Counter Mode |
| Key size | 256-bit key, 96-bit nonce | 256-bit key, 96-bit nonce |
| Specification | RFC 8439, RFC 7905, RFC 8446 | NIST SP 800-38D, RFC 5288, RFC 8446 |
| Hardware acceleration | SIMD on most ARM and x86 CPUs | AES-NI on x86, ARMv8 Crypto Extensions |
| Performance without AES-NI | Faster, lower power on ARM | Slower in software-only mode |
| Performance with AES-NI | Slower than AES-GCM | Up to 2x to 3x faster |
| Side-channel risk | Constant-time by construction | Cache-timing risk in software |
| Typical client preference | Mobile, IoT, low-power devices | Servers and modern desktops |
ChaCha20-Poly1305 shows up wherever a protocol needs a fast, side-channel-resistant AEAD that runs well in software. The cipher is a default in modern web traffic, modern VPNs, and modern SSH.
The construction itself is sound, but the moving parts around it, nonce handling, server preference order, and legacy client coverage, drive most of the field-level pain.
In my experience, the cleanest deployment is to enable both ChaCha20-Poly1305 and AES-256-GCM on the server, set chacha20-equal-preference so the client signal wins, and keep one AES-CBC suite around only for the IE 11 long tail. The mobile clients pick ChaCha20 on their own, the desktop clients land on AES-GCM, and the legacy holdouts still negotiate something the server can audit.
All ChaCha20-Poly1305 version numbers and platform notes in this guide come from these primary sources:
Did you find this page helpful?
More Related Hubs
TestMu AI forEnterprise
Get access to solutions built on Enterprise
grade security, privacy, & compliance