[Spec Change] Suite/result signing for integrity verification #8
Replies: 1 comment
|
One piece of prior art that's directly relevant and already partly adopted in this repo: Discussion #12 mentions the SDK publish pipeline was switched to OIDC Trusted Publishing for PyPI/npm (tracked in #7) specifically to get rid of long-lived tokens. That's the same trust root Sigstore's keyless signing flow ( That mostly answers question 3 in the original post (existing infra vs. inventing one) in favor of Sigstore over PGP — PGP requires the humans/CI publishing suites to actually manage and protect a long-lived private key, which is the exact failure mode Trusted Publishing was adopted to get away from a few weeks ago per #12. On questions 1 and 2 (detached vs. embedded, what gets signed), I'd lean detached and against inventing a canonicalization scheme, for a mechanical reason more than a philosophical one: signing the canonical JSON serialization (JCS/RFC 8785) means the verifier has to canonicalize before checking, which means the verifier needs a correct, spec-compliant JCS implementation in every language EvalPort tooling exists in (Python, TypeScript, and whatever a third-party runner uses) — that's real surface area for the canonicalization step itself to have bugs or cross-implementation disagreements, which would be a uniquely bad place for a bug (a subtly-wrong canonicalizer either rejects valid signed suites or, worse, could be tricked into accepting a tampered one). Signing the raw published bytes sidesteps that entirely — no canonicalization library needed anywhere, at the cost of "two byte-identical-content files with different whitespace have different signatures," which is a real cost but a much easier one to live with (re-sign after any re-serialization, don't hand-edit a signed file) than "every implementation's canonicalizer must agree forever." Detached also matches what On question 4 — agree this should stay optional indefinitely rather than a MUST for 2.0, same treatment as If there's rough agreement on Sigstore + detached + raw-bytes, I'd be glad to sketch what the actual |
Uh oh!
There was an error while loading. Please reload this page.
Flagged in
spec/CRITIQUE.md#9 and deferred out of 1.0 on purpose — this is one of the two open items (along with the conformance suite below) that's explicitly scoped for v1.1/v2.0 rather than guessed at under release pressure.The problem: there's currently no way to verify an EvalPort suite or result set hasn't been tampered with after publication. A benchmark dataset hosted publicly (e.g. anything in
benchmarks/) could be silently modified to favor a specific model, and a consumer has no spec-level way to detect that.What exists today as a stopgap:
metadata.sourcefor provenance tracking, and the assumption that Git/version control provides an audit trail. Neither is a real integrity guarantee — Git history can be rewritten on a fork, andmetadata.sourceis just a string nobody verifies.Open questions for this thread:
.sigfile alongside the suite) vs. an embeddedmetadata.openeval.signaturefield — the former keeps the core document untouched by crypto concerns, the latter is easier to lose track of when suites get copied around.openeval.costis optional?If you've worked on this problem for another data format (SBOM signing, npm provenance, in-toto, etc.) and have opinions on what transfers cleanly, that's exactly the kind of prior art this thread needs.
All reactions