BAD SKY.NET

ecdsa_secp521r1_sha512

ecdsa_secp521r1_sha512 is ECDSA on P-521 with SHA-512. Libraries accept it; the Chrome-like clients we measured do not.

TLS signature algorithmCode 0x0603 (1539)recommended

What it is

ecdsa_secp521r1_sha512 (code 0x0603) is the TLS 1.3 signature scheme for ECDSA on the NIST P-521 curve with SHA-512, defined in RFC 8446. It is the largest of the three NIST-curve ECDSA schemes in TLS.

P-521 signatures are slower to create and verify than P-256 and P-384 ones, and the extra margin is rarely needed. Certificates with P-521 keys are uncommon on the public web, so a client that leaves this scheme out loses very little compatibility.

It pairs with the secp521r1 group in the same way that ecdsa_secp256r1_sha256 pairs with secp256r1.

NIST FIPS 186-5 still approves ECDSA on P-521, so the scheme is not deprecated, only rarely needed. Clients that list it usually place it after the P-256 and P-384 schemes. Unlike the DSA and SHA-1 codes, there is no security reason to remove it, only a size and speed cost.

Who sends it

Chrome 153 (macOS) browserNot recorded
curl_cffi (impersonate chrome) Not sent
curl-impersonate chrome116 Not sent
curl-impersonate ff117 Sent at position 3
curl 8.7 (macOS) Sent at position 3
curl 7.88 (Debian 12) Sent at position 3
Python requests Sent at position 6
Python httpx Sent at position 6
Python httpx (HTTP/2) Sent at position 6
Go net/http Sent at position 10
Node.js fetch Sent at position 6
PHP Guzzle Sent at position 6

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

Why it matters for fingerprinting

Debian curl, macOS curl and the Firefox profile of curl-impersonate send it 3rd, Python requests, httpx, Node.js fetch and Guzzle 6th, and Go net/http 10th. curl_cffi and the Chrome profile of curl-impersonate do not send it, matching their missing secp521r1 group. Our Chrome capture did not record signature algorithms.

Check whether your client sends it

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

Run the TLS fingerprint test

References

Related