Specification

Keyless Signing Flow

**Draft.** End-to-end reference implementation: `crates/confium-examples/examples/keyless_github_action.yml`.


status: draft

Status

Draft. End-to-end reference implementation: crates/confium-examples/examples/keyless_github_action.yml.

Motivation

This spec ties together OIDC binding (90-oidc-binding), short-lived certs (92-short-lived-cert), and transparency log anchoring into a single coherent signing ceremony.

Scope

  • End-to-end keyless signing ceremony
  • Integration with GitHub Actions, GitLab CI
  • Verification flow
  • Transparency log anchoring

Out of scope

Specification

Signing ceremony

. CI/CD starts; OIDC JWT available in env. . CI fetches a short-lived cert from Confium keyless endpoint (using OIDC JWT). . CI generates ephemeral keypair locally. . CI signs artifact with ephemeral private key. . CI uploads (artifact_hash, signature, cert) to Confium keyless endpoint. . Confium endpoint anchors the tuple to its transparency log (sequence N, root R). . CI publishes a release referencing the log sequence.

Verification ceremony

. Verifier fetches (artifact, signature, cert, inclusion_proof) from the log. . Verifier validates inclusion proof against log root R (witness-gossiped or Bitcoin-anchored). . Verifier validates cert chain: ephemeral cert → Confium keyless CA → Confium root. . Verifier validates OIDC subject claim matches expected source (e.g., github.com/myorg/myrepo@refs/tags/v1.0.0). . Verifier validates signature.

Security considerations

  • The ephemeral private key MUST live only in CI memory; never persisted.
  • The short-lived cert MUST be embedded in the transparency log entry (so future verification doesn’t depend on the CA staying online).
  • Verification MUST reject certs whose OIDC subject doesn’t match the verifier’s policy.

References

Edit on GitHub github.com/confium/specs/blob/main/specs/91-keyless-flow.adoc