mirror of
https://github.com/saymrwulf/proof-aware-crypto-tooling-agent.git
synced 2026-09-03 19:53:43 +00:00
webdocs homepage: dynamic proven/total pill + 6 scope corrections (round-10 GPT §2/§3/§5/§6/§9/§10)
- §5/N1: the '16/16 proven' pill was hardcoded — false for the accumulator (61 certs). Now computed proven/total from each component's newest leaf (forks show 16/16, accumulator 61/61). - §2: 'the only thing you take on trust' → 'sole cryptographic identity anchor; truth rests on each leaf's stated assumptions' (both the top card and the download table). - §3: 'the signature vouches for the code that produced it' → the signed tree CONTAINS an attestation of the reported signing source; execution provenance is reported, not proven; provenance fields are unsigned metadata. - §9: 'irrevocably part of the log every other customer sees' → this signed head commits it to THIS view; comparison exposes split views. - §4.4: witness 'never equivocated' → a retained view that can EXPOSE a conflicting head; one clone cannot prove no split view. - §10: 'the git hash is the content hash' → the commit identifies the committed git tree, not deps/toolchain/artifacts. - §6: live-site 'twelve-leaf deployment' blurb → 'live deployment'. Suite 115 green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
b03ebdd773
commit
172472af41
1 changed files with 40 additions and 21 deletions
|
|
@ -115,8 +115,11 @@ def _trust_anchor_html(log: TransparencyLog, metadata: dict[str, Any], base: str
|
||||||
)
|
)
|
||||||
pem = escape(key_path.read_text(encoding="utf-8").strip())
|
pem = escape(key_path.read_text(encoding="utf-8").strip())
|
||||||
return f"""<div class="card">
|
return f"""<div class="card">
|
||||||
<p style="margin-top:0">This key is <strong>the only thing you take on trust, once</strong>.
|
<p style="margin-top:0">This key is the <strong>sole cryptographic identity anchor</strong>: it
|
||||||
Everything else on this page - every attestation, every tree head - is verified against it.
|
authenticates that these statements were made by the operator. It does not, by itself, make
|
||||||
|
those statements true — each attestation's truth additionally rests on the replay, theorem,
|
||||||
|
extraction and toolchain assumptions stated in that leaf. Every tree head and attestation is
|
||||||
|
signature-checked against this key.
|
||||||
Pin it, and compare this copy byte-for-byte with the independently hosted
|
Pin it, and compare this copy byte-for-byte with the independently hosted
|
||||||
<a href="{mirror}/blob/main/provider.ed25519.pub">mirror copy</a>; they must be identical.</p>
|
<a href="{mirror}/blob/main/provider.ed25519.pub">mirror copy</a>; they must be identical.</p>
|
||||||
<pre style="margin-bottom:.4rem">{pem}</pre>
|
<pre style="margin-bottom:.4rem">{pem}</pre>
|
||||||
|
|
@ -135,18 +138,27 @@ def render_docs(log: TransparencyLog, base_path: str) -> str:
|
||||||
ed = (latest.get("signatures") or {}).get("ed25519") or {}
|
ed = (latest.get("signatures") or {}).get("ed25519") or {}
|
||||||
provenance = ed.get("signing_provenance") or {}
|
provenance = ed.get("signing_provenance") or {}
|
||||||
signing_backend = str(ed.get("signing_backend", "openssl"))
|
signing_backend = str(ed.get("signing_backend", "openssl"))
|
||||||
components = sorted({
|
# newest entry per component, with its real proven/total from the leaf
|
||||||
component
|
newest: dict[str, Any] = {}
|
||||||
for entry in entries
|
for entry in entries:
|
||||||
if _leaf_ok(entry)
|
if not _leaf_ok(entry):
|
||||||
and (component := ((entry.leaf.get("attestation") or {}).get("subject") or {}).get("component"))
|
continue
|
||||||
})
|
comp = ((entry.leaf.get("attestation") or {}).get("subject") or {}).get("component")
|
||||||
|
if comp:
|
||||||
|
newest[comp] = entry
|
||||||
|
def _counts(entry) -> str:
|
||||||
|
certs = ((entry.leaf.get("attestation") or {}).get("certificates")) or []
|
||||||
|
total = len(certs)
|
||||||
|
proven = sum(1 for c in certs
|
||||||
|
if c.get("status") == "proven" and c.get("axiom_status") == "clean")
|
||||||
|
return f"{proven}/{total} proven"
|
||||||
|
components = sorted(newest)
|
||||||
mirror = "https://github.com/saymrwulf/lean-transparency-log"
|
mirror = "https://github.com/saymrwulf/lean-transparency-log"
|
||||||
rows = "".join(
|
rows = "".join(
|
||||||
f"<tr><td><code>{escape(c)}</code></td>"
|
f"<tr><td><code>{escape(c)}</code></td>"
|
||||||
f"<td><a href='{base}/v1/attestation?component={escape(c)}'>attestation</a></td>"
|
f"<td><a href='{base}/v1/attestation?component={escape(c)}'>attestation</a></td>"
|
||||||
f"<td><a href='{base}/v1/proof?component={escape(c)}'>inclusion proof</a></td>"
|
f"<td><a href='{base}/v1/proof?component={escape(c)}'>inclusion proof</a></td>"
|
||||||
f"<td><span class='pill ok'>16/16 proven</span></td></tr>"
|
f"<td><span class='pill ok'>{escape(_counts(newest[c]))}</span></td></tr>"
|
||||||
for c in components
|
for c in components
|
||||||
)
|
)
|
||||||
tree_svg = _svg_tree(entries, str(latest.get("root_hash", "")), signing_backend)
|
tree_svg = _svg_tree(entries, str(latest.get("root_hash", "")), signing_backend)
|
||||||
|
|
@ -181,8 +193,10 @@ internal nodes, the root, and the signature are the real ones. Before signing th
|
||||||
root, the provider Merkle-verified its own signing library's leaf
|
root, the provider Merkle-verified its own signing library's leaf
|
||||||
(index {provenance.get('signing_library_leaf_index','?')},
|
(index {provenance.get('signing_library_leaf_index','?')},
|
||||||
certificates {escape(str(provenance.get('signing_library_certificates_proven','?')))})
|
certificates {escape(str(provenance.get('signing_library_certificates_proven','?')))})
|
||||||
against this very tree — the signature vouches for the code that produced it, and
|
against this very tree — so the signed tree <em>contains</em> an attestation of the source the
|
||||||
the tree vouches for the signature's code. Tree size {latest.get('tree_size',0)},
|
operator reports its signing binary was built from. (An Ed25519 signature cannot by itself prove
|
||||||
|
which binary generated it; execution provenance is reported, not proven, and the provenance
|
||||||
|
fields live in the unsigned signature metadata.) Tree size {latest.get('tree_size',0)},
|
||||||
log id <code>{escape(str(metadata.get('log_id',''))[:16])}…</code>.</p>
|
log id <code>{escape(str(metadata.get('log_id',''))[:16])}…</code>.</p>
|
||||||
|
|
||||||
<h2>What do I download? — the three artifacts, unambiguously</h2>
|
<h2>What do I download? — the three artifacts, unambiguously</h2>
|
||||||
|
|
@ -191,9 +205,10 @@ library, plus optionally the whole mirror. Nothing else.</p>
|
||||||
<table>
|
<table>
|
||||||
<tr><th>#</th><th>Artifact</th><th>What it is</th><th>Where</th></tr>
|
<tr><th>#</th><th>Artifact</th><th>What it is</th><th>Where</th></tr>
|
||||||
<tr><td><b>1</b></td><td><code>provider.ed25519.pub</code></td>
|
<tr><td><b>1</b></td><td><code>provider.ed25519.pub</code></td>
|
||||||
<td><strong>The trust anchor.</strong> The provider's public key — the only thing you
|
<td><strong>The identity anchor.</strong> The provider's public key — the sole cryptographic
|
||||||
take on trust, once. Fetch it from BOTH independent locations and compare; the copies
|
identity you pin. It authenticates the operator's statements; their truth rests on each leaf's
|
||||||
must be identical.</td>
|
stated assumptions. Fetch it from BOTH independent locations and compare; the copies must be
|
||||||
|
identical.</td>
|
||||||
<td><a href="{base}/log-public-key">this site</a> · <a href="{mirror}/blob/main/provider.ed25519.pub">mirror</a></td></tr>
|
<td><a href="{base}/log-public-key">this site</a> · <a href="{mirror}/blob/main/provider.ed25519.pub">mirror</a></td></tr>
|
||||||
<tr><td><b>2</b></td><td><code><library>.attestation.json</code></td>
|
<tr><td><b>2</b></td><td><code><library>.attestation.json</code></td>
|
||||||
<td><strong>The claim.</strong> Which repo, which exact git commit, which theorems,
|
<td><strong>The claim.</strong> Which repo, which exact git commit, which theorems,
|
||||||
|
|
@ -206,8 +221,10 @@ leaf index, sibling hashes, the Signed Tree Head. ~25 lines of stdlib Python ver
|
||||||
<tr><td>+</td><td>the full mirror clone</td>
|
<tr><td>+</td><td>the full mirror clone</td>
|
||||||
<td><strong>Maximal benefit: become a witness.</strong> Every leaf + every signed head
|
<td><strong>Maximal benefit: become a witness.</strong> Every leaf + every signed head
|
||||||
ever issued + <code>verify.py</code> (stdlib-only). <code>python3 verify.py --all</code>
|
ever issued + <code>verify.py</code> (stdlib-only). <code>python3 verify.py --all</code>
|
||||||
recomputes the entire tree and every historical head — you then hold proof the log
|
recomputes the entire tree and every historical head — you then hold a retained view that can
|
||||||
never equivocated within your clone.</td>
|
later EXPOSE a conflicting head shown to someone else. (A single clone cannot by itself prove the
|
||||||
|
log never split its view toward another consumer; that requires comparing heads across
|
||||||
|
consumers.)</td>
|
||||||
<td><code>git clone {mirror}</code></td></tr>
|
<td><code>git clone {mirror}</code></td></tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
|
@ -241,11 +258,13 @@ GET {base}/healthz</pre>
|
||||||
<h2>What a verified inclusion means — and what it does not</h2>
|
<h2>What a verified inclusion means — and what it does not</h2>
|
||||||
<div class="card"><span class="pill ok">means</span> The provider whose key you hold
|
<div class="card"><span class="pill ok">means</span> The provider whose key you hold
|
||||||
attests: the Lean proofs of the named repository at the named git commit re-check with
|
attests: the Lean proofs of the named repository at the named git commit re-check with
|
||||||
exactly the documented assumptions — and that statement is irrevocably part of the log
|
exactly the documented assumptions — and this signed head irrevocably commits that statement to
|
||||||
every other customer and witness sees.</div>
|
this view. Consumers who compare heads, or retain the public mirror, can expose any conflicting
|
||||||
|
view.</div>
|
||||||
<div class="card"><span class="pill warn">does not mean</span> A verified binary. The
|
<div class="card"><span class="pill warn">does not mean</span> A verified binary. The
|
||||||
proofs cover Rust <em>source</em>; clone the attested commit (the git hash <em>is</em>
|
proofs cover Rust <em>source</em>; clone the attested commit (the commit id identifies the
|
||||||
the content hash) and build it yourself — compiler and build are declared trusted base
|
committed git tree — not external dependencies, toolchain downloads, or generated artifacts) and
|
||||||
|
build it yourself — compiler and build are declared trusted base
|
||||||
until the reproducible-builds program (R5) lands. Every attestation carries its full
|
until the reproducible-builds program (R5) lands. Every attestation carries its full
|
||||||
residual-risk list. Honesty about the boundary is the product.</div>
|
residual-risk list. Honesty about the boundary is the product.</div>
|
||||||
|
|
||||||
|
|
@ -276,7 +295,7 @@ Kernel-Checked Correctness Evidence for Deployed Ed25519 Implementations</strong
|
||||||
(PDF, 19 pages, revised) — the trust model with an explicit malicious-operator adversary,
|
(PDF, 19 pages, revised) — the trust model with an explicit malicious-operator adversary,
|
||||||
security proofs for every consumer-facing claim (inclusion soundness as an explicit
|
security proofs for every consumer-facing claim (inclusion soundness as an explicit
|
||||||
SHA-256-collision extractor, pin-store safety with transferable equivocation evidence,
|
SHA-256-collision extractor, pin-store safety with transferable equivocation evidence,
|
||||||
verdict integrity), the self-referential signing loop, the twelve-leaf deployment with
|
verdict integrity), the self-referential signing loop, the live deployment with
|
||||||
its retained failure leaves, and appendices with the leaf schema, the full ~25-line
|
its retained failure leaves, and appendices with the leaf schema, the full ~25-line
|
||||||
consumer verifier, and the verbatim per-fork axiom boundaries.
|
consumer verifier, and the verbatim per-fork axiom boundaries.
|
||||||
<span class="muted">Previous version: <a href="{base}/paper/v0.1">v0.1</a> (4 pages).</span></div>
|
<span class="muted">Previous version: <a href="{base}/paper/v0.1">v0.1</a> (4 pages).</span></div>
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue