Skip to content

The origin study

25.5% of origin servers that answered TLS negotiate hybrid post-quantum key exchange: 1,177 of 4,616. The sample is the highest-ranked sites in the Tranco top 10k that are not served from Cloudflare, Akamai, Fastly or CloudFront. Probes ran on 2026-10-14 from one machine with pqdoctor.

Fixing the top 3 causes would move that from 25.5% to 98.4% (every fixable cause: 99.1%). That’s an upper bound, not a forecast.

Browsers already speak post-quantum to CDNs: about 70% of browser-generated traffic to Cloudflare (Cloudflare, 2026-09-29). The hop that lags is the one behind the CDN. Cloudflare says “just about 15%” of the origins it connects to use hybrid ML-KEM (2026-09-29). This study asks why, for servers we can measure from outside.

Step Hosts
Tranco list N26LW (top 10,000), fetched 2026-10-14 9,999
No address for the domain or www. + domain −1,273
On Cloudflare’s published network −2,147
On CloudFront’s published network −725
On Akamai’s published network −435
On Fastly’s published network −278
Origins (resolve outside all four CDNs) 5,141 (58.9% of resolving domains)
Probed: the first 5,141 origins by Tranco rank (2 had moved onto a CDN by probe time and were skipped) 5,139
No TLS answer on 443 (down, filtered, rate-limited, or not a web host) −523
Answered TLS: the denominator 4,616

CDN networks come from each provider’s published list: Cloudflare’s ips-v4 and ips-v6, Fastly’s public-ip-list, and AWS’s ip-ranges.json (service CLOUDFRONT). Akamai publishes no edge list. For Akamai, the study uses the prefixes RIPEstat sees announced by ten Akamai CDN ASNs, with the holders checked. AS63949 (Linode, Akamai’s compute cloud) is left out because it hosts real origins.

A host counts as “on a CDN” when the IPv4 address pqdoctor would probe (the first A record) is in one of those networks.

  • Handshake-only. Each origin got pqdoctor’s 7 ClientHello probes, one at a time with a 120 ms gap (a silent probe retried once), plus one plain-HTTP HEAD / on port 80 for the Server header. Only the server’s first reply is read. No handshake is completed and no application data is sent.
  • Politely. At most 4 hosts in flight and at most 2 new hosts a second. The User-Agent names the tool, says it’s handshake-only and gives a contact:
pqdoctor/0.1 (post-quantum TLS check; handshake-only; contact: hi@kalyangopalam.com)
  • Opt-out. Email that address. The domain goes into the exclude list that every scan honours, and a domain covers its subdomains.
  • The scan took about 80 minutes.
Terminal window
node build-ranges.mjs # raw/ lists → cdn-ranges.tsv
pqdoctor scan raw/tranco-top10k.csv --skip-ranges cdn-ranges.tsv --exclude exclude.txt \
--www-fallback --resolve-only --json -c 32 --out resolved.jsonl # DNS only
node sample.mjs 5141 > sample-5141.txt
pqdoctor scan sample-5141.txt --skip-ranges cdn-ranges.tsv --exclude exclude.txt --json \
-c 4 --rate 2 --contact you@example.org --out results-all.jsonl
node report.mjs results-all.jsonl

The scripts, the raw results and a per-host appendix for all 5,139 hosts are in the project repository under lab/origin/. The repository is private for now; ask for the data at hi@kalyangopalam.com.