A self-contained test vector and an offline verifier for one property of a transparency log: that its past is preserved as it grows.
An inclusion receipt shows that an entry was in the log at one moment. It does not show that the log kept that history afterwards. A consistency proof covers the gap. It shows that an older head is contained, unchanged, inside a newer one, so no earlier entry was removed, reordered or rewritten.
markovian-consistency-v0.1.json— the vector. It pins an older head of the Markovian log at tree size 4100, a later witnessed head at tree size 4180 with its full signed checkpoint, and the RFC 6962 consistency proof between them. It also lists six refusal cases.verify_consistency.py— the verifier. It checks the vector and every refusal case offline.
pip install cryptography
python3 verify_consistency.py markovian-consistency-v0.1.json
No network access is required and the log is never contacted. Everything needed is in the vector file.
The verifier checks that the later head's checkpoint carries a valid log signature and seven valid witness cosignatures, and that the consistency proof resolves the older root at 4100 and the newer root at 4180. It then derives each refusal case from the clean vector and confirms that all of them fail:
- a stale head presented alone, with no bridge to a newer head
- two valid heads with no consistency proof connecting them
- a consistency proof with one byte altered
- a consistency proof with a node removed
- a fabricated older head
- a checkpoint signed by a key that is not pinned
The checkpoint is a signed note in the C2SP tlog-checkpoint format. Witness cosignatures follow C2SP tlog-cosignature v1. The consistency proof is the Merkle proof defined in RFC 6962, over SHA-256.
The log and two of the witnesses also publish ML-DSA-44 cosignatures on separate key hashes. Those are additive. The verifier ignores unrecognised key hashes and counts only the seven pinned Ed25519 witness keys towards the quorum.
It shows that the history recorded in this log was preserved between two points in time, and that the verifier refuses when the evidence for that is missing or forged.
It does not show that anything recorded in the log is true, correct or authorised. A consistency proof is a statement about a data structure, not about the world. Deciding whether a recorded claim should be believed is a separate question, and this vector does not answer it.
Apache-2.0.