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.
Why origins
Section titled “Why origins”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.
How the sample was built
Section titled “How the sample was built”| 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.
How it was probed
Section titled “How it was probed”- 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 theServerheader. 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.
Reproduce
Section titled “Reproduce”node build-ranges.mjs # raw/ lists → cdn-ranges.tsvpqdoctor scan raw/tranco-top10k.csv --skip-ranges cdn-ranges.tsv --exclude exclude.txt \ --www-fallback --resolve-only --json -c 32 --out resolved.jsonl # DNS onlynode sample.mjs 5141 > sample-5141.txtpqdoctor scan sample-5141.txt --skip-ranges cdn-ranges.tsv --exclude exclude.txt --json \ -c 4 --rate 2 --contact you@example.org --out results-all.jsonlnode report.mjs results-all.jsonlThe 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.