Loading
Verify release files offline against one trusted root file
Standard
provenance
Change type
- Add new standard
- Modify existing standard (prose only)
- Modify existing standard's check.sh (add, remove, or change an assertion)
- Modify existing standard's templates
- Status transition: introduced -> enforcing
- Status transition: enforcing -> archived
- Retire / archive
What does this MR do and why?
I want the Airgap section to verify against one trusted_root.json, because the copied ~/.sigstore/root/ it documents stops working offline, and the producer input it names does not exist.
sequenceDiagram
participant C as Connected host
participant T as Sigstore TUF repository
participant E as Enclave
C->>T: cosign initialize
T-->>C: trusted_root.json
C->>C: verify-blob on binary.bundle, exact tag identity
C->>E: binary, binary.sigstore.json, trusted_root.json
E->>E: verify-blob-attestation with --trusted-root- One file.
cosign initializefetchestrusted_root.jsonthrough The Update Framework (TUF) repository Sigstore publishes. A copied cache refreshes once its metadata expires (sigstore-go options.go:49-54), and that metadata is re-signed at least every three days. - The attestation crosses.
--trusted-rootneeds the new bundle format (verify_blob.go:206-207).binary@6writes the legacy.bundle;attest@6writes the new one, checked against the binary's digest (verify_blob_attestation.go:239-243). - cosign 2.6.5, or 3.1.3 on v3. Earlier releases ignore the identity flags on a crafted legacy bundle (GitHub security advisory GHSA-fx35-mq7g-6g98).
- Exact identity,
//.gitlab-ci.yml@refs/tags/vX.Y.Z(format), not a regular expression that accepts any tag.
Failure mode this addresses
The documented offline path fails once the copied metadata expires, and extra-assets@6 has no include_sigstore_trust_bundle input. A signed bash utility, gitlab-com/public-sector/utilities/periscope, needs this path for its first release.
Assertion deltas
None. check.sh is unchanged.
Consumer impact
None fail. Consumers following the old section move to the commands above.
Status transition
None.
Test plan
-
just guardpasses (assertions use only closed primitives) -
just check-one STANDARD=provenancepasses against this repo (SKIP, no*.lock.toml);just shipgreen,TOTAL: 21 standard(s) passed, 0 exempt, 0 failed - Ran check.sh against at least one consumer repo of each applicable shape (binary-shipping, lab); results match expectations: not applicable, prose only
- CHANGELOG updated
An AI tool wrote this change and ran the checks above.
Reviewer checklist
- SKILL.md frontmatter is valid YAML (name, description, status, [enforced_since])
- check.sh sources
../../_lib.shcorrectly - check.sh calls
reportat the end - Templates/ directory present where applicable
- Standard appears in README's contracts table
- Standard appears in the rendered site's
/standards/index