What does an artifact signature prove if your verification policy never checks who signed it?
answer
- presence is not authorisation
- binds an identity to bytes
- who signed, not whether signed
- an attacker signs with their own identity
- the rule must name the expected signer
basics
~10 sOnly that some identity signed those exact bytes and they were not altered afterwards. It says nothing about whether that identity is yours. Without an expected-signer check, any signature the trust root accepts passes.
solid answer
~40 sA signature binds an identity to a specific set of bytes, and nothing more. If the policy only asks 'is there a valid signature?', it accepts anything signed by any identity the trust root recognises. Under keyless signing backed by a public certificate authority, obtaining a valid identity is self-service, so an attacker can publish their own artifact, sign it with their own perfectly legitimate identity, and sail through a presence-only check. The useful policy names the expected signer instead: this issuer, this repository, this workflow, this ref. Verification then answers a question worth answering — 'was this produced by the build I authorised?' — rather than 'did somebody, somewhere, sign this?'. Presence-only verification is the equivalent of accepting any passport without ever reading the name in it.
go deeper
Be ready to say exactly what a signature binds: one identity to one set of bytes. Know that checking a signature exists is a different question from checking who made it, and that only the second one gates anything.
Explain how a presence-only check happily accepts an attacker-signed artifact, and name the fields an acceptance rule has to specify — issuer and subject — to close that hole.
Show that you scope expected identities per artifact, and be able to answer on the spot what your own gate would accept today if a stranger published a validly signed image into a registry you pull from.
Own the distinction between telemetry and control. You should be able to explain to an auditor or a customer why 'all our artifacts are signed' is a weaker statement than 'we refuse artifacts not signed by these named identities'.
## The one-sentence model A signature is a statement of the form: *this identity vouches for these exact bytes*. That is the whole payload. It is worth holding this next to its two neighbours, because mixing them up is the single most common wrong answer in supply chain interviews: | Artifact | Question it answers | |---|---| | SBOM | What is inside this artifact? | | Provenance | How did this artifact come to be? | | Signature | Who vouches for these bytes? | A signature therefore cannot tell you the artifact is safe, cannot tell you what is in it, and cannot tell you it is the artifact you meant to deploy. It tells you who put their name on it — and only if you actually read the name. ## What a presence-only check accepts A policy that verifies 'a valid signature exists' is checking two things: that the signature is cryptographically well formed over the artifact, and that the signer's credential chains to something in the verifier's trust root. Both can be true for a signature made by a total stranger. That mattered less in the era where signing meant a long-lived private key that a handful of people held, because the trust root was a short list of keys you had personally enrolled. Identity-based (keyless) signing changed the shape of the problem: the trust root becomes a public certificate authority that will issue a short-lived signing certificate to anyone who can authenticate to a supported identity provider. Membership in that trust root is no longer a meaningful authorisation signal, because effectively anyone on the internet is a member. What distinguishes your build from an attacker's build is not *whether* a certificate was issued but *to whom* — the identity recorded in it. So the concrete failure looks like this. An attacker publishes an image to a registry you pull from, signs it with their own valid identity, and your gate accepts it because the signature verifies. Nothing was forged. Nothing was cracked. The policy simply never asked the question that would have failed. ## What an acceptance rule has to name A real rule names the expected signing identity, and an identity in this world is a pair: the issuer that attested it, and the subject it attested. For a build running on a hosted CI platform, the subject is typically a URI identifying the repository, the workflow file, and the ref that ran — something shaped like `https://github.com/acme/checkout/.github/workflows/release.yml@refs/heads/main`. The rule says: accept a signature only when it came from *that* issuer over *that* subject. Scope matters as much as precision. The identity should be scoped to the artifact: the workflow that builds the checkout service should not be able to sign the payments service. A single blanket identity accepted for everything reintroduces the same problem one level up — you have checked *who*, but the *who* covers far more than the thing in front of you. ## Is presence-only verification worthless, then? Not quite, and it is worth being precise about what it is worth. Presence proves the bytes were not modified after the signature was made, and it gives you an identity to look up afterwards when something goes wrong. That makes it useful telemetry. It is not an authorisation decision, because it stops nothing an attacker who can sign for themselves wants to do. Presenting it as a control — to a customer, an auditor, or your own leadership — overstates it. The same reasoning explains why 'we sign all our artifacts' is a weaker claim than it sounds. Signing without verification changes nothing at all; verification without a named expected signer changes very little. The value appears only at the point where a consumer refuses an artifact because the identity that signed it was not the one they expected. ## The misreadings to avoid The first is treating 'signed' as a boolean property of the artifact, like 'compressed'. It is not a property of the artifact; it is a relationship between an artifact and an identity, and the identity is the half that carries the security meaning. The second is assuming that only insiders can obtain a signing identity — self-service issuance makes that false by design. The third is sliding from 'the signature is valid' to 'the build was authorised', which is exactly the inference the missing identity check was supposed to license.
- Does requiring a signature still buy you anything if the policy does not pin an identity?A little, and less than people assume. It proves the bytes were not altered after signing and leaves you an identity to look up during an investigation. But it is not an authorisation decision: it blocks nothing an attacker who can sign for themselves would do. Treat presence-only verification as telemetry, and do not describe it to a customer or auditor as a gate.
- What is the smallest useful expected-signer rule for a service you build yourself?The exact producing identity: your CI provider's issuer, the repository, the release workflow file, and the ref it is allowed to run on. Scope it per artifact so the workflow that builds one service cannot sign another. Anything broader — the whole organisation, or any workflow in the repository — is a convenience you will eventually have to defend.
- Someone says signing is pointless because a signed artifact can still be malicious. What is the correct response?They are right about what a signature proves and wrong about the conclusion. A signature is an attribution mechanism, not a safety check: it tells you who to hold responsible and lets you refuse anything not attributable to your own build. Malicious content is a different control's job. Losing attribution because it does not also solve content safety is a bad trade.
It is like checking that a parcel has a return address written on it, without ever checking whose address it is.
saying these in an interview costs you the question
- Says a valid signature means the artifact is safe to run
- Treats 'signed' as a yes/no property of the artifact
- Assumes only insiders can obtain a valid signing identity
- Slides from signature validity to build authorisation
- Claims signing alone protects the pipeline without any verification