SECOND MEASUREMENT SM-015
Certificate Transparency’s new tiled logs publish in seconds. The old ones take up to an hour, and the browsers’ own log lists are the slowest part
Every certificate a browser trusts has to be written into public logs first, so that anyone can see which certificates exist for a name. The logs come in two generations now. The original design, RFC 6962 from 2013, lets a log promise to include a certificate “soon”, with a maximum merge delay that most logs set at 24 hours. The new design, static-ct-api, serves the log as plain files and hands out a certificate’s position at the moment it is accepted, so there is nothing left to wait for. We tested both the same way: our own certificate, submitted to every log Chrome trusts, each log polled until it served the entry. All 43 tiled logs served it inside six seconds, most in a fifth of one. The 21 older logs took between ten seconds and an hour. Then we read what the two big browsers’ log lists say, because a list is what a certificate authority and a browser actually consult. Apple’s list hasn’t changed since 31 March and still marks twelve logs “usable” whose windows closed three months ago. Chrome’s list admits four shards whose windows run two weeks past Chrome’s own one-year rule, and declares a 24-hour merge delay for 21 logs under a policy that caps it at four. The logs have become fast. The paperwork around them has not.
- Chrome CT policy: logs must “incorporate a certificate for which an SCT has been issued by the log within the MMD”; “static-ct-api logs must not specify a MMD greater than 1 minute and RFC 6962 logs must not specify a MMD greater than 4 hour”; shard windows “must be no longer than one calendar year”; logs are “expected to accept” every Chrome-trusted root.
- 64 logs (43 usable, 21 qualified). 43 tiled: all served our certificate within 5.7 s, median 0.2 s (61 of Chrome’s 64 measured, plus Cloudflare’s three Raio shards from Apple’s list; no eligible certificate for Sycamore2027h2, Gouda2028h1 and Gouda2028h2). 21 RFC 6962: DigiCert’s six in 10 to 11 s, Google’s and Sectigo’s in 1.2 to 1.7 min, TrustAsia’s up to 2.5 min, Cloudflare’s Nimbus2027 46 min and Nimbus2026 61 min. All 64 inside their declared MMD.
- Chrome’s list declares MMD 86,400 s for all 21 RFC 6962 logs; the policy text says 4 hours.
- Shard windows: 60 of 64 at 181 to 365 days; TrustAsia log2026a, log2026b, Luoshu2027 at 380 days and HETU2027 at 379, admitted anyway.
- Accepted roots: 30 logs accept all 101 Chrome roots, 29 miss exactly one (25 of them DigiCert Assured ID Root G2), DigiCert’s three Sphinx shards miss 6, Cloudflare’s two Nimbus shards miss 25. Google’s monitor root is in all 64.
- Apple’s log list, version 511, last modified 31 March, marks 12 shards “usable” whose windows closed 94 to 108 days ago. Chrome has removed all 12 from its list. Apple’s own text: usable means “SCTs from the log can be relied on to meet Apple’s client CT policy”.
Disclosure: Markovian Protocol holds no financial position in any organisation named here, was paid by no one for this work, and showed it to no one before publication except the organisations measured. We operate a witness that cosigns several of these logs. How we work.
Merge delay: we hold a certificate chain for one of our own names and submitted it on 2 October to every usable and qualified log in the union of Chrome’s and Apple’s lists that would take it: 61 of Chrome’s 64 (three shards accept no certificate we hold) and Cloudflare’s three Raio shards, which only Apple lists, through add-chain for RFC 6962 logs and add-pre-chain where a precertificate was needed, then polled each log on its own thread until it served the entry: an inclusion proof by leaf hash for RFC 6962 logs, a checkpoint whose tree size passes the leaf index the SCT carried for tiled logs. The delay is the time from the SCT’s timestamp to the first poll that found the entry, which overstates it by up to one polling interval; the lower bound from the last poll that didn’t is recorded too. Where a log had already seen the chain and returned an old SCT, we detect that from the timestamp and used a fresh chain. Roots: /ct/v1/get-roots from all 64 logs, SHA-256 of each DER certificate, compared with the 101 roots the CCADB marks as included in Chrome and with the 100 trust anchors in Chromium’s root_store.textproto (the CCADB’s extra one is Certum Trusted Network CA 2). Lists: Chrome’s log_list.json v93.2 and Apple’s current_log_list.json v511, with each log’s temporal interval against the calendar and against the other list.
What they said, what we found
| The rule | We found |
|---|---|
| Chrome CT Log Policy: “Incorporate a certificate for which an SCT has been issued by the log within the MMD.”1 | 64 of 64. Tiled logs in 0.1 to 5.7 s against a 60-second MMD; RFC 6962 logs in 10 s to 61 min against 24 hours. |
| Chrome CT Log Policy: “RFC 6962 logs must not specify a MMD greater than 4 hour.”1 | Chrome’s own list specifies 86,400 seconds, 24 hours, for every one of the 21 RFC 6962 logs it trusts. |
| Chrome CT Log Policy: “The certificate expiry ranges for CT logs must be no longer than one calendar year.”1 | Four TrustAsia shards at 379 and 380 days, all usable. The other 60 are at 181 to 365. |
| Chrome CT Log Policy: “CT logs are expected to accept logging submissions from CAs that are trusted by default in Chrome.”1 | 30 logs accept all 101; 29 miss one; Sphinx misses 6; Nimbus misses 25. |
| Apple: “Usable: SCTs from the log can be relied on to meet Apple’s client CT policy.”2 | 12 usable logs on Apple’s list stopped accepting certificates on 17 June, 18 June or 1 July. An SCT from them cannot be obtained today; the list is 186 days old. |
| static-ct-api: the leaf index in the SCT “by design this encourages a null Merge Delay, since entries must be sequenced before an SCT is returned”.3 | It does. Median 0.2 s across 43 logs, the slowest 5.7 s. |
How long each log took
| Operator | Logs | Design | Served our certificate in |
|---|---|---|---|
| Geomys | Tuscolo ×5, Trastevere ×5 | tiled | 0.07 to 0.10 s |
| GoDaddy | Aquamarine ×5 | tiled | 0.09 to 0.12 s |
| Let’s Encrypt | Sycamore ×2, Willow ×3 | tiled | 0.15 to 0.26 s |
| Cloudflare | Raio ×3 (Apple’s list; not in Chrome’s) | tiled | 0.7 to 1.0 s |
| ParcelYard ×3, PlumbersArms ×3 | tiled | 1.0 to 2.2 s | |
| TrustAsia | Luoshu2027 | tiled | 1.2 s |
| Microsec | Eszigno ×5 | tiled | 0.1 to 4.2 s |
| IPng Networks | Halloumi ×5, Gouda ×3 | tiled | up to 5.7 s |
| DigiCert | Wyvern ×3, Sphinx ×3 | RFC 6962 | 10 to 11 s |
| Argon ×2, Xenon ×2 | RFC 6962 | 1.2 to 1.6 min | |
| Sectigo | Elephant ×3, Tiger ×3 | RFC 6962 | 0.7 to 1.7 min |
| TrustAsia | log2026a, log2026b, HETU2027 | RFC 6962 | 0.7 to 2.5 min |
| Cloudflare | Nimbus2027, Nimbus2026 | RFC 6962 | 46.0 and 60.6 min |
Cloudflare’s two Nimbus logs are the only ones in Chrome’s list that took longer than three minutes (its three tiled Raio logs, on Apple’s list, answered in about a second), and the hour they take is also the gap Firefox’s revocation reader waits on (SM-009). Nothing here breaks a rule; 24 hours is the rule. The point is the distance between what the rule allows and what everyone but Cloudflare now does.
The lists
A certificate authority doesn’t read a log’s API to decide where to submit; it reads the browsers’ lists. Apple publishes one JSON file and Chrome another, and both carry a state per log and a window of certificate expiry dates the log accepts. When the window closes the log stops taking submissions. Chrome’s list no longer carries them; Apple’s list has not been touched since 31 March.
| Apple “usable” log | Window closed | Days ago | Chrome’s list |
|---|---|---|---|
| Let’s Encrypt Willow 2026h1 | 2026-06-17 | 108 | removed |
| Let’s Encrypt Sycamore 2026h1 | 2026-06-18 | 107 | removed |
| Google Argon 2026H1, Xenon 2026H1; DigiCert Wyvern 2026h1, Sphinx 2026h1; Sectigo Elephant 2026h1, Tiger 2026h1; Cloudflare Raio2026h1a; Geomys Tuscolo2026h1; IPng Gouda 2026h1, Halloumi2026h1 | 2026-07-01 | 94 | removed |
Apple’s program page, updated 3 September, defines usable as a log whose SCTs “can be relied on to meet Apple’s client CT policy” and says nothing about when a closed shard leaves that state. The list it governs was built on 31 March. Chrome’s list, fetched the day after Apple’s, was version 93.2, stamped 2 October at 13:40 UTC.
The four TrustAsia shards are the other list finding. Chrome’s policy says a window “must be no longer than one calendar year”; log2026a and log2026b run from 24 December 2025 to 8 January 2027, 380 days, and the two 2027 shards the same. The convenience is obvious, a week either side of the year boundary. So is the word “must”. And the policy’s four-hour cap on an RFC 6962 log’s MMD sits beside a list that declares 24 hours for all 21 of them; whichever is current, the other is wrong.
How this ends
Three small acts, each visible on the daily recheck: Apple publishes a new log list and the twelve closed shards leave “usable”; Chrome’s list and its policy say the same merge delay for RFC 6962 logs; the four 380-day shards reach their end and no successor exceeds a year. The logs themselves need nothing; the lists do.
The evidence
Every quote below was copied from the source and checked against a saved copy, fetched 2 or 3 October 2026. Both lists, the policy pages, the per-log measurements and the scripts are published next to this page (SHA256SUMS).
Exhibit 1 · Chrome’s rules
“Insofar as is possible, Chrome’s requirements are equivalent between static-ct-api and RFC 6962 logs, however, static-ct-api logs must not specify a MMD greater than 1 minute and RFC 6962 logs must not specify a MMD greater than 4 hour.” … “The certificate expiry ranges for CT logs must be no longer than one calendar year and should be no shorter than three months.” … “CT logs are expected to accept logging submissions from CAs that are trusted by default in Chrome across all its supported platforms”
googlechrome.github.io/CertificateTransparency/log_policy.html · saved copy log_policy.html
Exhibit 2 · Chrome’s list
log_list.json v93.2, 2026-10-02T13:40:14Z: 64 usable or qualified logs tiled_logs: 43, "mmd": 60 logs (RFC 6962): 21, "mmd": 86400 TrustAsia 'log2026a' temporal_interval 2025-12-24 → 2027-01-08 380 days TrustAsia 'log2026b' 2025-12-24 → 2027-01-08 380 HETU2027 2026-12-25 → 2028-01-08 379 Luoshu2027 2026-12-24 → 2028-01-08 380
log_list.json · lists.json (analyze_lists.py)
Exhibit 3 · Apple’s list
valid.apple.com/ct/log_list/current_log_list.json version 511 Last-Modified: Tue, 31 Mar 2026 16:17:29 GMT Content-Length: 148409 "usable" with temporal_interval.end_exclusive in the past: 12 log.willow.ct.letsencrypt.org/2026h1 end 2026-06-17 Google 'Argon 2026H1' log end 2026-07-01 …
apple_log_list.json, response headers · program page apple_ct_program.html (“Published Date: September 03, 2026”)
Exhibit 4 · The measurements
merge delay (ct_mmd.py, 2026-10-02): 64 logs, our chain, polled until served tiled 43 max 5.7 s median 0.2 s RFC 6962 21 DigiCert 10–11 s · Google 1.2–1.6 min · Sectigo 0.7–1.7 min · TrustAsia 0.7–2.5 min · Cloudflare 46.0 / 60.6 min accepted roots (get_roots.py, 2026-10-03): 64 logs vs 101 Chrome-included roots all 101: 30 logs missing 1: 29 missing 6: Sphinx ×3 missing 25: Nimbus2026, Nimbus2027 Merge Delay Monitor Root: 64/64
merge_delays_merged.json · roots_by_log.json · ccadb_all_included.csv, root_store.textproto
Our questions
Sent on 3 October 2026 to Apple’s Certificate Transparency program and to Chrome’s. Answers will be printed here as written.
- Apple: twelve logs on the current list are marked usable although their windows closed in June and July. When does a closed shard leave the usable state, and is the list’s 31 March build date intended?
- Chrome: the policy caps an RFC 6962 log’s MMD at four hours; the list declares 24 hours for all 21. Which governs, and will the list change?
- Chrome: four TrustAsia shards run 379 and 380 days against “no longer than one calendar year”. Was an exception granted, and is the rule read as inclusive of the boundary weeks?
- Both: Cloudflare’s Nimbus logs accept 76 of the 101 Chrome roots. Is “expected to accept” monitored, and at what shortfall does it matter?
Their reply, scored
Disclosure timeline
| 2 Oct | Merge delays measured. |
| 3 Oct | Roots fetched; Cloudflare and DigiCert told the same day about the roots their logs don’t accept (service notes, no finding claimed). |
| 3 Oct | Published; questions sent to Apple and Chrome. |
Waiting since 3 Oct.
What we can’t be sure of
- One certificate, one day, one vantage point. A log’s merge delay varies with load; our numbers are one sample per log and the polling interval adds up to a few seconds to each. The order of magnitude between the two designs is not within that noise.
- Chrome’s policy page is read as of 3 October. If the four-hour MMD cap was added after the 21 logs were admitted, the list and the policy disagree by history rather than by error; the question above asks which.
- “Expected to accept” is not “must”. We report the shortfall and have told the two operators; we don’t call it a breach.
- Apple’s usable state may carry an internal grace period its page doesn’t state. A CA reading the list today would still try to submit to a log that cannot accept.
- We operate a witness that cosigns some of the tiled logs measured here. The merge-delay measurement does not use it.
Run it yourself
Python 3 standard library plus the cryptography package for the chain. A certificate you control, submitted to 64 logs; a few minutes for the fast ones, an hour for Cloudflare.
python3 ct_mmd.py --chain chain.pem # submit to every usable/qualified log, poll until served python3 get_roots.py # accepted roots per log vs the CCADB's Chrome-included set python3 analyze_lists.py # shard windows and Apple's closed-but-usable shards
Reproduced from the public repository on 3 October 2026 on a clean machine: the root and list results are exact (30 logs accept all 101 roots, four 380-day shards, 12 closed shards usable on Apple's list). The merge-delay measurement needs a publicly trusted certificate chain of your own. Full table on the track record.
What you can do with this
- If you run a CA, submit to a tiled log for the fast SCT and a classic one for breadth; Cloudflare's classic logs take an hour and refuse 25 roots.
- If you read Apple's log list to choose logs, twelve usable entries cannot accept a certificate today; check the window before submitting.
References
- Google. Chrome Certificate Transparency Log Policy. googlechrome.github.io/CertificateTransparency/log_policy.html.
- Apple. Apple’s Certificate Transparency log program, support article 103703. support.apple.com/en-us/103703.
- C2SP. static-ct-api. c2sp.org/static-ct-api.
- B. Laurie, A. Langley, E. Kasper. Certificate Transparency, RFC 6962, 2013. rfc-editor.org/rfc/rfc6962.
- Google. Chrome CT log list v3. gstatic.com/ct/log_list/v3/log_list.json. Apple. Current log list. valid.apple.com.
Cite as
@misc{markovian-sm015,
author = {{Markovian Protocol}},
title = {Merge delay, accepted roots and list hygiene across the 64 Chrome-trusted CT logs, October 2026},
number = {SM-015},
doi = {10.5281/zenodo.23123269},
year = {2026},
month = oct,
url = {https://markovianprotocol.com/measurements/sm-015.html}
}