Skip to content

scoreboard: r3–r6 Seals under the founder's run authorization, anchored in Rekor, with Sigstore TSA tokens - #1438

Merged
abrichr merged 3 commits into
mainfrom
seal/r3-r6-anchored-evidence
Oct 20, 2026
Merged

abrichr merged 3 commits into
mainfrom
seal/r3-r6-anchored-evidence

Conversation

@abrichr

@abrichr abrichr commented Oct 20, 2026

Copy link
Copy Markdown
Member

These are the landing demo's referral receipts. Four Seals were re-signed under the founder's signed run authorization. Each Seal, and the authorization itself, is anchored in the public Sigstore Rekor log and timestamped by the Sigstore TSA. The receipts sit next to #1409's redacted evidence in packages/flow/benchmark/scoreboard/raw/openemr_referral/certified/2026-10-20/.

What's in it

  • run-authorization/ holds run-authorization.json, .sig, .allowed_signers, .anchor.json, .tsr and .tsa.json. The statement is openadapt.run-authorization/v1, sha256 bdfda160…04d3. It names bundle ec096afa…60b6, items r3–r6 with one run each, the standard profile, Seal key seal-ed25519-ca08dd7f42a4be01, and signer key SHA256:x+1MwCSAsNNHpc+UcIdbktY/Z+/FByyqfhuwiRzeO9A. The founder signed it with ssh-keygen -Y sign and the key published at github.com/abrichr.keys.
  • Each N-rX-…/engine/ gets a new seal.json over the same redacted report.json bytes from scoreboard: OpenEMR referrals r3–r6 on the certified bundle, reports redacted and under an offline Seal #1409, plus seal.anchor.json, seal.tsr and seal.tsa.json.
  • operator-profile.json covers the Seal key: 4 anchored runs, 3 verified and 1 stopped before effect, with the identity github:abrichr checked live against GitHub.
  • README.md gets a table of log indexes and times, the verify command, and what the authorization does and doesn't show.
Record Rekor log index
run authorization 3339630782
r3 3339635766
r4 3339636256
r5 3339636914
r6 3339637492

These are the first live submissions with the #1394 anchoring code. Public Rekor accepted the Ed25519ph hashedrekord entries.

Verification

Run on main's code, after the #1421 batch:

openadapt-flow local-seal verify 1-r3-…/engine 2-r4-…/engine 3-r5-…/engine 4-r6-…/engine \
  --keys seal-key.json --strict --require-anchor --require-timestamp --authorization run-authorization --live

All four pass. For each run, the output says the Seal is valid over report.json, and that its anchor checks out live and offline. It also prints this line: "authorized by github:abrichr (… identity checked against https://github.com/abrichr.keys now)". The timing is after_run: the runs ran at about 03:03 UTC and the authorization was logged at 15:53 UTC. So the card reads "Authorization signed by @abrichr on 2026-10-20, after this run". The re-seal doesn't change that.

Fixture test

tests/test_rekor_real_fixture.py adds 7 tests; offline, they verify:

  • r3's real Rekor entry and the authorization's, against the Rekor key built into OpenAdapt;
  • both real Sigstore TSA tokens, against the shipped TSA root;
  • the authorization with a pinned key;
  • refusal of a changed inclusion hash, integrated time or nonce.

The fixtures (32 KB of public records) are in tests/fixtures/rekor_real/.

Timestamp token files

Each RFC 3161 token is stored in its standard binary form, <name>.tsr (DER, as returned by the TSA). openssl ts -reply -in seal.tsr -token_in -text reads it. <name>.tsa.json names the file in tsr_file and its SHA-256 in tsr_sha256 instead of embedding base64. The verifier reads the .tsr and checks its SHA-256, then the token. A tsr_file that is anything but a bare .tsr name beside the JSON is refused, as are a missing or changed .tsr, each with a test. The real tokens were converted to this layout as-is, with no new TSA requests.

Hygiene

🤖 Generated with Claude Code

…ed in Rekor, with Sigstore TSA tokens

The founder signed run-authorization.json (github:abrichr, SSH key
SHA256:x+1M…eO9A, items r3–r6, standard profile, one run per item) after
the runs. The four redacted reports are re-sealed under it with the demo
Seal key. Each Seal and the authorization is anchored in Sigstore Rekor
(log indexes 3339630782, 3339635766, 3339636256, 3339636914, 3339637492)
and carries an RFC 3161 token from the Sigstore TSA. All four verify with
--strict --require-anchor --require-timestamp --live; timing after_run.
operator-profile.json counts them (3 verified, 1 stopped before effect)
with the identity checked live against GitHub.

RFC 3161 tokens are stored in their standard binary form, <name>.tsr
(DER), next to <name>.tsa.json, which names the file (tsr_file) and its
SHA-256 (tsr_sha256) instead of embedding base64. The verifier reads the
.tsr, checks its SHA-256, then the token; a path in tsr_file is refused.

tests/test_rekor_real_fixture.py verifies r3's real Rekor entry, the
authorization's, and both TSA tokens offline against the shipped roots.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@abrichr
abrichr enabled auto-merge October 20, 2026 16:45
@abrichr
abrichr added this pull request to the merge queue Oct 20, 2026
Merged via the queue into main with commit ed64f19 Oct 20, 2026
39 checks passed
@abrichr
abrichr deleted the seal/r3-r6-anchored-evidence branch October 20, 2026 23:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant