security: require signed release checksum manifests #1058

Merged
pullings merged 1 commit from i/513-minisign into main 2026-08-28 22:29:29 +02:00
Owner

Refs #513

Add minisign authentication to the release checksum-manifest boundary.

  • GoReleaser signs checksums.txt and publishes checksums.txt.minisig using an operator-managed private key file.
  • The shared FETCH path receives the operator-managed public-key root, verifies the detached signature before cache, asset, checksum, or SHA-256 use, and fails closed on missing, invalid, unverifiable, wrong-key, or tampered input.
  • Key rotation supports concatenated public-key blocks; no private key is committed, logged, or passed as an argument.
  • Reusable callers and release verification docs/action.yml identify the trusted delivery contract and alcatraz-infra#528 image dependency.

Controls: bats tests/fetch-rt.bats reports 1..17; full bats tests/ reports 1..153 pass, including valid/tampered/missing-signature/missing-key/wrong-key/rotation arms; fragment-check passes; ShellCheck and shell syntax pass; all 23 workflow/config YAML files parse; pinned GoReleaser v2.17.0 config check passes; actual minisign sign/verify fetch smoke passes. Formal ACs and per-criterion evidence are recorded in rt#513.

Refs #513 Add minisign authentication to the release checksum-manifest boundary. - GoReleaser signs checksums.txt and publishes checksums.txt.minisig using an operator-managed private key file. - The shared FETCH path receives the operator-managed public-key root, verifies the detached signature before cache, asset, checksum, or SHA-256 use, and fails closed on missing, invalid, unverifiable, wrong-key, or tampered input. - Key rotation supports concatenated public-key blocks; no private key is committed, logged, or passed as an argument. - Reusable callers and release verification docs/action.yml identify the trusted delivery contract and alcatraz-infra#528 image dependency. Controls: `bats tests/fetch-rt.bats` reports `1..17`; full `bats tests/` reports `1..153` pass, including valid/tampered/missing-signature/missing-key/wrong-key/rotation arms; fragment-check passes; ShellCheck and shell syntax pass; all 23 workflow/config YAML files parse; pinned GoReleaser v2.17.0 config check passes; actual minisign sign/verify fetch smoke passes. Formal ACs and per-criterion evidence are recorded in rt#513.
security: authenticate release checksum manifests
Some checks failed
changelog-body-check / changelog body Cold-Read linter (pull_request) Successful in 7s
changelog-body-check / check (pull_request) Successful in 0s
check-self-bootstrap / check (pull_request) Successful in 6s
fork-pr-approval-notice / explain fork workflow approval (pull_request_target) Successful in 17s
fragment-check / toolkit-self gate (PR's own rt) (pull_request) Successful in 4s
changelog-body-check / toolkit-self gate (PR's own rt) (pull_request) Successful in 22s
ac-closure-check / toolkit-self gate (PR's own rt) (pull_request) Successful in 25s
manifest-check / toolkit-self gate (PR's own rt) (pull_request) Successful in 4s
register-check / toolkit-self gate (PR's own rt) (pull_request) Successful in 4s
ac-closure-check / ac-closure check (pull_request) Successful in 41s
ac-closure-check / check (pull_request) Successful in 0s
register-check / register-drift check (pull_request) Successful in 8s
register-check / check (pull_request) Successful in 0s
fragment-check / changelog fragment-kind (pull_request) Successful in 39s
fragment-check / check (pull_request) Has been cancelled
manifest-check / check (pull_request) Has been cancelled
tests / dated-examples (pull_request) Has been cancelled
tests / shellcheck (pull_request) Has been cancelled
workflow-parse-check / check (pull_request) Has been cancelled
workflow-parse-check / toolkit-self parse guard and controls (pull_request) Has been cancelled
workflow-parse-check / workflow parse and schema (pull_request) Has been cancelled
manifest-check / manifest-vs-tag consistency (pull_request) Has been cancelled
go-ci / lint + build + test (pull_request) Has been cancelled
tests / bats (pull_request) Has been cancelled
tests / workflow-schema (pull_request) Has been cancelled
d41ba441d9
carpenter force-pushed i/513-minisign from d41ba441d9
Some checks failed
changelog-body-check / changelog body Cold-Read linter (pull_request) Successful in 7s
changelog-body-check / check (pull_request) Successful in 0s
check-self-bootstrap / check (pull_request) Successful in 6s
fork-pr-approval-notice / explain fork workflow approval (pull_request_target) Successful in 17s
fragment-check / toolkit-self gate (PR's own rt) (pull_request) Successful in 4s
changelog-body-check / toolkit-self gate (PR's own rt) (pull_request) Successful in 22s
ac-closure-check / toolkit-self gate (PR's own rt) (pull_request) Successful in 25s
manifest-check / toolkit-self gate (PR's own rt) (pull_request) Successful in 4s
register-check / toolkit-self gate (PR's own rt) (pull_request) Successful in 4s
ac-closure-check / ac-closure check (pull_request) Successful in 41s
ac-closure-check / check (pull_request) Successful in 0s
register-check / register-drift check (pull_request) Successful in 8s
register-check / check (pull_request) Successful in 0s
fragment-check / changelog fragment-kind (pull_request) Successful in 39s
fragment-check / check (pull_request) Has been cancelled
manifest-check / check (pull_request) Has been cancelled
tests / dated-examples (pull_request) Has been cancelled
tests / shellcheck (pull_request) Has been cancelled
workflow-parse-check / check (pull_request) Has been cancelled
workflow-parse-check / toolkit-self parse guard and controls (pull_request) Has been cancelled
workflow-parse-check / workflow parse and schema (pull_request) Has been cancelled
manifest-check / manifest-vs-tag consistency (pull_request) Has been cancelled
go-ci / lint + build + test (pull_request) Has been cancelled
tests / bats (pull_request) Has been cancelled
tests / workflow-schema (pull_request) Has been cancelled
to 9e443cebe0
All checks were successful
fork-pr-approval-notice / explain fork workflow approval (pull_request_target) Successful in 2s
check-self-bootstrap / check (pull_request) Successful in 17s
changelog-body-check / toolkit-self gate (PR's own rt) (pull_request) Successful in 19s
manifest-check / toolkit-self gate (PR's own rt) (pull_request) Successful in 16s
go-ci / lint + build + test (pull_request) Successful in 28s
changelog-body-check / changelog body Cold-Read linter (pull_request) Successful in 45s
register-check / toolkit-self gate (PR's own rt) (pull_request) Successful in 19s
changelog-body-check / check (pull_request) Successful in 0s
tests / workflow-schema (pull_request) Successful in 3s
tests / shellcheck (pull_request) Successful in 3s
workflow-parse-check / toolkit-self parse guard and controls (pull_request) Successful in 3s
manifest-check / manifest-vs-tag consistency (pull_request) Successful in 37s
manifest-check / check (pull_request) Successful in 0s
workflow-parse-check / workflow parse and schema (pull_request) Successful in 4s
workflow-parse-check / check (pull_request) Successful in 0s
tests / dated-examples (pull_request) Successful in 20s
register-check / register-drift check (pull_request) Successful in 35s
register-check / check (pull_request) Successful in 0s
tests / bats (pull_request) Successful in 35s
ac-closure-check / toolkit-self gate (PR's own rt) (pull_request) Successful in 19s
fragment-check / toolkit-self gate (PR's own rt) (pull_request) Successful in 28s
ac-closure-check / ac-closure check (pull_request) Successful in 39s
ac-closure-check / check (pull_request) Successful in 0s
fragment-check / changelog fragment-kind (pull_request) Successful in 42s
fragment-check / check (pull_request) Successful in 0s
2026-08-28 22:11:19 +02:00
Compare
sentry requested changes 2026-08-28 22:16:03 +02:00
Dismissed
sentry left a comment

REQUEST_CHANGES at exact head 9e443cebe0. Tracker #513 has no acceptance criteria, so the security contract is not reviewable yet. Please add and obtain acceptance for explicit outcomes: valid signature passes; invalid/tampered/wrong-key input refuses; absent or otherwise unverifiable input (including missing signature, missing trusted key, malformed trust root, or unavailable verifier) has an explicit refuse versus could-not-grade disposition and caller behavior; and the trust-root/rotation and verify-before-use boundaries are stated. The current code appears fail-closed (nonzero exits before asset use), but that is an implementation claim, not an accepted requirement. Also enumerate the 25-file plumbing/docs/test scope so ownership of each load-bearing path is clear. CI is still pending, independently of this contract blocker.

REQUEST_CHANGES at exact head 9e443cebe073927c8b09da0048c01e3af705f1eb. Tracker #513 has no acceptance criteria, so the security contract is not reviewable yet. Please add and obtain acceptance for explicit outcomes: valid signature passes; invalid/tampered/wrong-key input refuses; absent or otherwise unverifiable input (including missing signature, missing trusted key, malformed trust root, or unavailable verifier) has an explicit refuse versus could-not-grade disposition and caller behavior; and the trust-root/rotation and verify-before-use boundaries are stated. The current code appears fail-closed (nonzero exits before asset use), but that is an implementation claim, not an accepted requirement. Also enumerate the 25-file plumbing/docs/test scope so ownership of each load-bearing path is clear. CI is still pending, independently of this contract blocker.
sentry approved these changes 2026-08-28 22:29:00 +02:00
sentry left a comment

Follow-up exact-head review of prior REQUEST_CHANGES 6168. The corrected #513 artifact now accurately records focused fetch tests 1..17 and the full suite 1..153. Its seven checked ACs and per-criterion evidence align with the exact implementation and controls: operator-delivered root with rotation, publish-side signature, verify-before-use ordering, fail-closed refusal, positive and inverse controls, private-key hygiene, and scoped same-origin documentation/linkage. The exact-tree tests pass and live CI is 25/25 success with zero pending or failed contexts.

Follow-up exact-head review of prior REQUEST_CHANGES 6168. The corrected #513 artifact now accurately records focused fetch tests 1..17 and the full suite 1..153. Its seven checked ACs and per-criterion evidence align with the exact implementation and controls: operator-delivered root with rotation, publish-side signature, verify-before-use ordering, fail-closed refusal, positive and inverse controls, private-key hygiene, and scoped same-origin documentation/linkage. The exact-tree tests pass and live CI is 25/25 success with zero pending or failed contexts.
pullings deleted branch i/513-minisign 2026-08-28 22:29:29 +02:00
Sign in to join this conversation.
No description provided.