lean-transparency-log/README.md
mrwulf 4e5c39b93c verify.py fail-closed + full receipt bindings; README drops the 'honesty'/'first' overclaim (review round 10)
GPT-5.6 live-site review + Fable live verification:
- verify.py §4: was fail-OPEN — no openssl ⇒ signatures 'skipped' ⇒
  still 'OK'. Now fail-CLOSED (exit 2 unless --structural-only, which is
  explicitly labelled a reduced check). --receipt was Merkle-path-only;
  now verifies the receipt's STH signature, key fingerprint, log_id,
  tree_size agreement, leaf_hash-vs-entry, and history membership before
  the inclusion proof. --all now also checks latest-sth == final history
  head and size == leaf count, and constant log_id. Adversarially tested:
  fail-closed exit 2; forged unsigned-root receipt REJECTED (was the
  'inclusion VALID' hole); honest receipt + full run still exit 0.
- README §8: I had written 'the first deployed transparency log to carry
  proofs of its own honesty' this session — an overclaim (the corpus
  proves properties of the accumulator MODEL, not operator honesty).
  Now: 'kernel-checked proofs about the accumulator model underlying its
  inclusion/consistency reasoning', 'first' softened to 'unaware of a
  precedent'.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 23:46:28 +02:00

2.4 KiB

Lean Transparency Log — published mirror

This repository is the git-published face of a transparency log of formal-verification attestations: signed statements that the Lean 4 proofs of specific software, at specific git commits, re-check with exactly their documented assumptions. Its first twelve leaves attest four cryptographic Rust libraries (Ed25519 implementations); as of entry 13 (2026-07-16) the log also attests its own accumulator machinery — a kernel-checked mechanization of the log's security analysis, so the log carries kernel-checked proofs about the accumulator model underlying its own inclusion and consistency reasoning, as one of its own entries (subject ltl-accumulator-verified; scoped to the mechanized model — it does not prove operator honesty, signing, or execution provenance). Current head: tree size 13, root 3488a2d0….

Layout:

Path Content
entries/NNNNNN.json one log leaf per file, append-only (git history mirrors log history)
entries/<component>.attestation.json the newest attestation per library, for convenience
receipts/<component>.receipt.json inclusion proof binding that attestation to the latest signed head
sth-history.jsonl every Signed Tree Head ever issued — the witness channel: all cloners see the same heads
latest-sth.json the current head
provider.ed25519.pub the provider's public key (the sole trust anchor)
verify.py standalone verifier, Python standard library only

Verify everything locally, no installation:

python3 verify.py --all
python3 verify.py --receipt receipts/dalek-ed25519-verified.receipt.json

The online service (same data, live endpoints + customer documentation): https://ltl.zkdefi.org

The provider tooling, agent tooling, and course materials: https://github.com/saymrwulf/proof-aware-crypto-tooling-agent

Honesty notes, always in force: attestations cover Rust source at a pinned commit (clone it — the git hash is the content hash — and build it yourself; compilers are declared trusted base). The log deliberately retains early leaves recording a failed audit run: an append-only trust ledger keeps its history. Tree heads are signed by the merkleized, proof-attested Ed25519 library itself, and each signature embeds the provider's own Merkle self-check of that library's leaf.