Skip to content

docs(adr): 0020 — supply-chain trust is signature continuity, not prefix-gated single-identity#133

Merged
thejefflarson merged 1 commit into
mainfrom
docs/adr-0020-signature-continuity
Jun 30, 2026
Merged

docs(adr): 0020 — supply-chain trust is signature continuity, not prefix-gated single-identity#133
thejefflarson merged 1 commit into
mainfrom
docs/adr-0020-signature-continuity

Conversation

@thejefflarson

Copy link
Copy Markdown
Owner

Records the decision to reshape the admission signature model, per the design discussion.

Problem with the current SignaturePolicy (prefix-gated + one trusted identity):

  1. No visibility — everything outside the gated prefix is n/a, so the operator can't see the cluster's signing posture at all.
  2. Single-identity trust can't vouch for upstream dependencies (distroless, linkerd, …) — they all fall to n/a.
  3. Structurally blind to the real attack: a repo that was serving signed images now serving an unsigned (or differently-signed) one — an attacker with push access.

Decision: model supply-chain trust as signature continuity — the same observe-baseline-detect-deviation thesis as ADR-0016:

  1. Observe every image's signing posture (signer identity + issuer read from the Fulcio cert, no pre-config needed).
  2. Learn a per-repo TOFU baseline, persisted durably.
  3. Detect drift — signed→unsigned or signer-identity-change on an established repo is the breach-relevant signal; enforce opt-in per scope; pins/acks manage benign exceptions.

The old prefix + single-identity gate becomes one pinned special case. Audit-first (shadow invariant). Honestly records the TOFU cold-start and false-positive limits.

A sprint plan implementing this (staged: inventory → continuity baseline → enforce) follows.

🤖 Generated with Claude Code

…fix-gated single-identity

The current SignaturePolicy (gated_prefixes + one identity_regexp) answers only
"are my images signed by me": no visibility into the rest of the cluster, single-
identity trust that can't vouch for upstreams, and structurally blind to the actual
attack — a previously-signed repo serving an unsigned (or differently-signed) image
after a push-access compromise.

ADR-0020 reshapes supply-chain trust as signature CONTINUITY, the same
observe-baseline-detect-deviation thesis as ADR-0016: observe every image's signing
posture (signer identity read from the Fulcio cert, no pre-config), learn a per-repo
TOFU baseline, and treat a signed→unsigned / identity-change regression as the
breach-relevant signal. Audit-first; the old prefix+single-identity gate becomes one
pinned special case. Honestly records TOFU cold-start and false-positive limits.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VtjoJttCvBY4dzCoE4f9vP
@thejefflarson thejefflarson merged commit fffedaf into main Jun 30, 2026
3 checks passed
@thejefflarson thejefflarson deleted the docs/adr-0020-signature-continuity branch June 30, 2026 03:41
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