skip to content

Keyless Identity Chain

cosign signs, Fulcio issues a short-lived certificate bound to an OIDC identity, and Rekor logs the entry. This chain separates people who ran a command once from people who can trace the trust.

on this pageshow

explore

questions

12

In Sigstore's keyless flow, what does a Fulcio certificate bind, and how long is it valid?

level: juniorimportance: must knowfreq 55%

answer

  1. keyless is not key-free
  2. the key is made and thrown away
  3. identity comes from a login token
  4. issuer recorded next to the subject
  5. minutes, not months

basics

~20 s

A Fulcio certificate binds a one-time public key, generated locally at signing time, to the OIDC identity and issuer in the token you presented. It stays valid for roughly ten minutes, so no signing key is ever stored.

solid answer

~50 s

Keyless signing is not key-free; it is key-ephemeral. The client generates a fresh keypair in memory, gets an OIDC token proving who or what it is, and sends the public key plus proof of possession to Fulcio. Fulcio validates the token against an issuer it trusts and mints a short-lived X.509 certificate — on the order of ten minutes — whose subject alternative name carries the identity from the token and whose extensions record the issuer that asserted it. The client signs the artifact digest with the private key and then discards it. The certificate answers exactly one question: **who vouched for this signature**. It says nothing about what is inside the artifact or how it was built — those are an SBOM's and a provenance attestation's jobs. And because any account at a supported issuer can obtain one, holding a Fulcio certificate is not itself an authorisation.

go deeper

for a junior

Be ready to say plainly what keyless means: a throwaway keypair, an identity token, a certificate that lasts minutes, and no key left on disk afterwards.

for a middle

Expect to walk the exchange step by step, including proof of possession and why the issuer is stored alongside the identity rather than assumed.

for a senior

Show you can place the certificate correctly among the other artifacts — who signed, versus what is inside, versus how it was built — and resist claiming it proves more than it does.

for a principal

Own the argument for why removing key custody is worth adopting an external identity dependency, and what that dependency means for teams that must sign during an identity-provider outage.

## The problem keyless signing is solving Classic artifact signing gives a team a long-lived private key. That key has to be generated, stored somewhere a build can reach, backed up, rotated, and revoked when it leaks — and a key a CI job can read is a key an attacker who reaches that CI job can read. Worse, a signature made with it proves only that *the key* was used, not who used it, so a leaked key is indistinguishable from a legitimate release for as long as nobody notices. Sigstore's keyless flow removes the stored key entirely, and Fulcio is the piece that makes that possible: it is a certificate authority that issues **short-lived code-signing certificates bound to an OIDC identity**. ## What actually happens at signing time 1. The signing client generates a brand-new keypair **in memory**. It has never existed before and will not exist afterwards. 2. The client obtains an OpenID Connect (OIDC) identity token. For a person this is an interactive browser login against an identity provider; for a CI job it is the token the platform mints for the running job. 3. The client sends Fulcio the ephemeral **public** key together with a proof of possession — it signs a value derived from the token's subject with the matching private key — so Fulcio knows the requester actually holds the private half. 4. Fulcio validates the token: is it signed by an issuer this Fulcio trusts, is it unexpired, is the audience right. It does **not** decide whether this identity *should* be signing anything; that judgement belongs to whoever verifies later. 5. Fulcio issues an X.509 certificate valid for roughly ten minutes, containing: - the **identity** from the token, in a subject alternative name — an email address for a human, a URI describing the pipeline for a workload; - the **OIDC issuer** that asserted that identity, in a dedicated Sigstore-defined certificate extension; - for workload identities, further extensions recording context the CI platform supplied, such as the source repository, the ref, and the build configuration. 6. The client signs the artifact's digest, records the signing event in the transparency log, and throws the private key away. The whole exchange takes seconds. The certificate outliving it by a few minutes is slack, not a design goal. ## Why the issuer is part of the identity An email address on its own is not an identity — it is a string that several identity providers might assert about different humans. `[email protected]` asserted by a corporate identity provider and the same string asserted by some consumer login are two different subjects. That is why the issuer is recorded in the certificate as a first-class field: an identity in Sigstore is always the **pair** (subject, issuer), and any verification worth the name pins both. ## What the certificate does and does not say Get the direction of the three supply-chain artifacts right, because mixing them up is the canonical wrong answer in this domain: | Artifact | Question it answers | | --- | --- | | SBOM | What is **inside** this artifact | | Provenance attestation | **How** this artifact came to be | | Signature + Fulcio certificate | **Who** vouches for it | A Fulcio certificate is purely the third column. It carries no claim about dependencies, no claim about build hardening, no claim about quality. It also carries no *permission*: anyone with an account at a supported issuer can get a certificate in their own name any time they like, so "the signature chains to Fulcio" is not a meaningful check on its own — the identity in the certificate is what a consumer has to care about. ## The private key is genuinely gone Because the key existed only for the duration of one signing operation, there is nothing left for an attacker to steal after the fact, nothing to rotate on a schedule, and no revocation list to run. That is the real payoff of the design, and it is why the ten-minute window is a feature rather than an omission. Expiry is also not the same as invalidation: an old signature still verifies because the signing event was recorded in the transparency log when it happened, so the log — not the certificate — is what carries the evidence of *when*. ## Common first misunderstanding People hear "keyless" and conclude that no cryptographic key is involved, or that Sigstore holds a key on their behalf. Neither is true. There is a real private key, the signer holds it exclusively, and it lives for seconds. The certificate is what lets a stranger later connect that throwaway key to a human or a pipeline that an identity provider was willing to name.

  • If the private key is discarded, how can anyone verify the signature later?
    Verification never needs the private key — only the public key, which travels inside the certificate attached to the signature. The verifier checks the signature against that public key, then checks who the certificate says the key belonged to. The private half is only ever needed to create a signature, never to check one.
  • Does a Fulcio certificate tell a consumer that the artifact is safe to run?
    No. It identifies the signer and nothing else. Whether the artifact is safe depends on what is inside it and how it was built, which are an SBOM's and a provenance attestation's territory, plus the consumer's own policy about which signer identities they are willing to accept.
  • Why does Fulcio require proof of possession of the private key?
    Without it, anyone who intercepted or replayed a valid OIDC token could ask Fulcio to certify a public key they control, producing a certificate in someone else's name. Signing a token-derived value with the matching private key proves the requester actually holds the key being certified.

It is like a conference badge printed at the door: the desk checks your ID, prints a badge good for the day, and you hand it back on the way out. Nobody keeps a permanent badge that could be stolen.

saying these in an interview costs you the question

  • Says keyless signing means no cryptographic key exists
  • Thinks Sigstore stores a private key for you
  • Claims the certificate proves the artifact is safe
  • Believes the certificate contains the artifact's digest as its subject
  • Treats any Fulcio-issued certificate as authorisation to publish

context

open as a page

Why is a cosign verify step with no expected certificate identity or OIDC issuer worthless?

level: middleimportance: must knowfreq 62%

basics

~20 s

A bare cosign verify proves only that somebody obtained a Sigstore certificate and signed the artifact, which anyone with an email or a CI account can do. Pin the expected identity and the issuer that asserted it.

open as a page

How can a Sigstore keyless signature still verify years after its short-lived certificate expired?

level: middleimportance: must knowfreq 60%

basics

~20 s

Verification asks whether the certificate was valid when the signature was logged, not whether it is valid now. The Rekor entry supplies that moment as a log-signed timestamp, plus an inclusion proof binding it to the log.

open as a page

What is the difference between cosign sign and cosign sign-blob, and who stores the result?

level: juniorimportance: should knowfreq 55%

basics

~20 s

cosign sign signs an artifact already in an OCI registry, addressed by its digest, and pushes the signature back there. cosign sign-blob signs any local file and hands the signature material back to you to store and ship yourself.

open as a page

What does Sigstore's Rekor transparency log actually record when an artifact is signed?

level: juniorimportance: should knowfreq 52%

basics

~20 s

Rekor appends an entry holding the artifact's digest, the signature over it, and the signing certificate or public key. It never stores the artifact itself — only a timestamped, publicly readable record that this signature existed.

open as a page

How does a Fulcio certificate for a CI job differ from one issued to a human maintainer?

level: middleimportance: should knowfreq 44%

basics

~20 s

A human signer's Fulcio certificate names an email address asserted by a consumer or corporate identity provider. A CI job's certificate names a pipeline URI asserted by the CI platform, plus extensions recording the repository, ref and build configuration.

open as a page

Why does it matter which job and which identity runs cosign attest in your build pipeline?

level: seniorimportance: should knowfreq 42%

basics

~20 s

cosign attest signs a claim about an artifact, not the artifact itself, so the signature records only who asserted the claim. Run it later, or by hand, and you get a valid signature over an unverified statement.

open as a page

Fulcio certificates expire in about ten minutes — what does that window protect, and what does it not?

level: seniorimportance: should knowfreq 36%

basics

~10 s

The short window removes key custody: no durable private key to store, rotate or revoke. It does nothing against an attacker who controls the identity, who can simply request a fresh certificate.

open as a page

Your project signs releases with Sigstore keyless signing — how do you detect a Rekor entry made under your identity that you never created?

level: seniorimportance: should knowfreq 42%

basics

~20 s

You monitor the log. Because Rekor is public and append-only, you can watch new entries for your signing identities and reconcile each one against your own record of intended releases. Anything unmatched is an alert — detection, not prevention.

open as a page

How do you verify cosign signatures inside an air-gapped enclave that cannot reach Fulcio or Rekor?

level: seniorimportance: nice to knowfreq 30%

basics

~20 s

Sign outside the enclave and carry the proof in. A bundle ships the signature, the signing certificate and the transparency-log entry beside the artifact, and a trust root cached in advance lets cosign check them with no network call.

open as a page

When would you run a private Fulcio bound to your corporate IdP instead of the public instance?

level: principalimportance: nice to knowfreq 20%

basics

~20 s

Run a private Fulcio when signer identities must not be public, when releases happen in isolated environments, or when only your own directory can assert those identities. The cost is owning a certificate authority and an offboarding process that now gates signing.

open as a page

A defence customer objects that Sigstore's public Rekor log exposes internal repository and staff names — how do you answer?

level: principalimportance: nice to knowfreq 28%

basics

~20 s

Concede the leak: identities, artifact digests and timing are published permanently, enough to map repositories and release cadence. Then price the alternative — a private log keeps that internal but loses the outside scrutiny that gives transparency its value.

open as a page