OpenChainGraph · Explainer Five steps

One verifier reads three logs

In 2025 the transparency-log world converged on a single family of specifications: Sigsum's checkpoints are C2SP signed notes, and both Google's Tessera and Sigstore's Rekor v2 build on C2SP tiled logs. This page tells what happened before that convergence reached this estate: the same verification logic was written twice by hand, the two copies drifted apart, and the drift produced a real bug. It then walks the fix, one code path written directly to the C2SP spec family, which reads Sigsum, Rekor v2 and Tessera logs alike, and which you can run in your browser today.

Presenter mode shows one step per screen. Arrow keys move, A toggles autoplay, Esc exits.
A checkpoint is a log's signed promise about its own contents. Verifying that promise is parsing plus cryptography plus a trust policy, and the C2SP specs pin all three. Write the verifier once, to the specs, and one implementation reads every log in the family.
1
Step 1

What a checkpoint promises

A transparency log publishes a checkpoint: a short signed note that states how many leaves the log holds and which Merkle tree root they commit to.

origin.example.org 1462 a3f9c1e2…d0f (root) timestamp line signature line (see the note below) one signature over the whole note

The C2SP signed-note format defines the framing: an origin line, a size, a root hash, optional extra lines, then one or more signature lines, each starting with an em dash and a key name. Everything below the root is framing; the promise is the root.

origin.example.org
1462
a3f9c1e25b7d0846ac9e2f1d3b5a7c9e0f2b4d6f8c1a3e5b7d9f0a2c4e6b8d0f
— origin.example.org bb19f0…

The bytes above are illustrative and visibly truncated. Verifying the promise takes three things: the note is parsed correctly, the signature is checked against a key you already trust, and the root is the one your leaf really hashes to.

Who asks at this stepread the note
Here is a checkpoint from my log. Tell me what it claims and which bytes the signature covers.
2
Step 2

How two verifiers drifted apart

This estate read Sigsum records and Rekor records through two checkpoint parsers written independently, and the copies drifted. The drift produced a real bug.

one signed notesame wire format Sigsum pathparses cosigs off the line text Rekor pathre-invented the same parsing the drift bug:a key id read from a fieldthat is not on the wire,so matches read 0 of N

The recorded bug: one path read a witness cosignature key id from a parallel field that does not exist in the note format, instead of from the signature line itself. Verification kept running and every witness match silently read zero out of N, even against valid cosignatures. Nothing crashed; the answer was just quietly wrong.

scripts/register-sigsum.mjsscripts/register-rekor.mjs
Who asks at this stepaudit the parsers
Do both record verifiers parse the checkpoint signature line the same way? Show me where they differ.
3
Step 3

One code path written to the C2SP specs

The fix ends the pattern: one verifier written directly to the C2SP transparency-log spec family, with the trust policy as data.

tlog-checkpoint signed-note tlog-cosignature tlog-tiles tlog-witness tlog-policy one verifierverify(record, policy) pinned keysas data

The verifier takes every byte and every trust key as arguments and makes zero network calls; keys are pinned in a tlog-policy file, never fetched at verify time. That is what stops a compromised log directory from swapping the trust anchor under an old record. What stays per log, by design, is everything C2SP does not standardize: each log's leaf serialization and its submission path. Verification is the common ground; writing it once is the fix.

Who asks at this stepverify offline
Verify this checkpoint against this tlog-policy text. Use only the bytes I pasted.
4
Step 4

Where the spec family came from

The transparency-log ecosystem runs on a small set of shared specifications, and the C2SP family is the layer the newest logs converged on.

CertificateTransparency RFC 6962 RFC 9162 Sigsum Tessera Rekor v2 C2SP tlog familycheckpoints, notes, cosignatures,tiles, witnesses, policy

Certificate Transparency seeded the design; RFC 6962 and RFC 9162 pinned its tree math. Sigsum stripped the idea to a minimal log, Google's Tessera succeeded Trillian, and Sigstore's Rekor v2 rebuilt on tiled logs. Sigsum's checkpoints already are C2SP signed notes, and Tessera and Rekor v2 both build on C2SP tlog-tiles, so one spec-conformant verifier reads all three.

Who asks at this stepplace a log
My log publishes Tessera tiles and a Sigsum-style checkpoint. Which specs in the family does it speak?
5
Step 5

In the AINumbers estate

The estate runs its own transparency anchoring on Sigsum, and the single code path from step 3 is what reads its checkpoints.

anchor.ainumbers.coSigsum checkpoints onanchored records one C2SP verifiercheckpoints, cosignatures,inclusion, offline tool T625runs it in yourbrowser

What the estate does today: Sigsum checkpoints for anchored records are verified by the single C2SP code path described on this page, and tool T625 is that code path running offline in a browser. The page's working claim: T625 verifies Sigsum, Rekor v2 and Tessera checkpoints, because all three publish in the C2SP family. What could plug in later: the same verifier reading tiled proofs from a log this estate does not anchor to yet.

Try the one verifier: tool 625, the C2SP transparency-log verifier

tools/625-c2sp-tlog-verifier.htmlanchor.ainumbers.co
Who asks at this steptry it
Take this checkpoint from anchor.ainumbers.co and verify it offline in tool T625.
🔒 All inputs are processed locally in your browser. No data is transmitted. Do not enter real personal data — use synthetic or anonymised inputs only.