Skip to content

Phase 6: CI provenance signing from OIDC identities (keyless) #7

Description

@ToryMic

Goal

Let a release pipeline sign the provenance without storing a long-lived private key, using the runner's OIDC identity — so the signature proves "built and sealed by GitHub Actions for repo X", not "someone had release.key".

Scope

  • sorseal sign --oidc: mint a short-lived signing key, exchange a GitHub OIDC token (via actions/id-token) for a code-signing certificate (Sigstore-fulcio), sign the DSSE envelope, and upload to the transparency log (rekor).
  • sorseal verify-attestation --public-key extended to validate the signed certificate chain and the rekor inclusion proof (no runtime network dependency by default — offline verification of a cached bundle).
  • Document the trust model: what OIDC signing proves vs. Ed25519 key signing (already shipped).

Why

Phase 3 gives a keyed signature; the key must be secured (air-gapped or CI secret). OIDC keyless signing removes the key-management burden for Wave teams on GitHub Actions while keeping the attestation verifiable by anyone.

Success criteria

  • A workflow using actions/oidc-mint-token produces a signature whose identity claims (repo/ref/workflow) verify against the OIDC issuer.
  • Verification fails if the OIDC token was issued for a different repo/ref.
  • The core record/verify path stays offline — OIDC is opt-in via --oidc.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestphase-6CI provenance signing from OIDC identities

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions