BAD SKY.NET

TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256

A TLS 1.2 cipher suite for ECDSA certificates using ChaCha20-Poly1305, fast on devices without AES hardware.

TLS cipher suiteCode 0xcca9 (52393)recommended

What it is

TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 (code 0xCCA9) is a TLS 1.2 cipher suite defined in RFC 7905. It uses ephemeral elliptic curve Diffie-Hellman for the key exchange, an ECDSA certificate, and the ChaCha20-Poly1305 authenticated cipher instead of AES. SHA-256 is the PRF hash.

ChaCha20-Poly1305 runs fast and in constant time in plain software, so it suits phones and small devices without AES instructions. The same cipher later became one of the TLS 1.3 suites, TLS_CHACHA20_POLY1305_SHA256, where the key exchange and certificate type are no longer part of the suite name.

The suite offers forward secrecy and authenticated encryption, though the list of recommended TLS 1.2 suites in RFC 9325 names only the AES-GCM suites.

A server can only choose it when it holds an ECDSA certificate. With an RSA certificate, the matching choice is TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256, which differs only in the certificate type.

Who sends it

Chrome 153 (macOS) browser Sent at position 8
curl_cffi (impersonate chrome) Sent at position 8
curl-impersonate chrome116 Sent at position 8
curl-impersonate ff117 Sent at position 6
curl 8.7 (macOS) Sent at position 4
curl 7.88 (Debian 12) Sent at position 7
Python requests Sent at position 8
Python httpx Sent at position 8
Python httpx (HTTP/2) Sent at position 8
Go net/http Sent at position 5
Node.js fetch Sent at position 14
PHP Guzzle Sent at position 7

Measured on 2026-10-25 against our own test server: sent by 12 of 12 clients. Position counts from 1 and ignores GREASE values.

Why it matters for fingerprinting

Every measured client offers it. Chrome, curl_cffi and curl-impersonate chrome116 send it 8th, Python requests and httpx 8th as well, Debian curl and Guzzle 7th, Go net/http 5th, macOS curl 4th and Node.js fetch 14th. Node.js places both ChaCha20 suites late in its list, which is a quick way to spot it in a JA3 string.

Check whether your client sends it

Open the test from your browser, or call it from your script, and look for TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 in the TLS details.

Run the TLS fingerprint test

References

Related