mrkeyoor.com_
Tue 01 Sept 17:41 UTC
Dev Toolsevaluationupdated 26 Aug 2026

cosign review

Cosign signs and verifies container images, blobs, and other OCI artifacts through the Sigstore ecosystem. It supports identity-based keyless signing, local encrypted keypairs, hardware or cloud key management, in-toto attestations, and signature storage alongside artifacts in a registry.

+26stars / 7d
Verdict

Our Cosign run installed 788 packages, built in 150 seconds, and passed all 98 tests, so the codebase earns a serious production evaluation. Use v3.1.3 or newer, sign digests, and write verification policy around exact identities, issuers, keys, and attestation types. Cosign can prove that an artifact matches a signature from an allowed signer; it cannot decide whether that signer or build process was trustworthy.

We ran it

Lab card: what happened when we ran cosignScreenshot of cosign (github.com/sigstore/cosign)
Install✓ · 115s788 packages
Build✓ · 150s
Tests✓ · 63s98 passed · 0 failed of 98 (go test)
Repo481 files~63,939 lines of source · 4 MB · 17 CI workflows · Dockerfile · tests dir

Answers from our run

Does cosign build from source?

Dependencies installed in 115 seconds (788 packages), and the build succeeded in 150 seconds. We cloned commit 58aae9e into a clean Debian container with 3 CPUs and no project-specific setup.

Do cosign's tests pass?

Yes: 98 of 98 passed when we ran the project's own test command (go test). Some failures need services or credentials a bare container does not have.

Who should not use cosign?

Pipelines that verify only that some signature exists: keyless verification requires an expected certificate identity and issuer to establish who signed.

What are the alternatives to cosign?

Notation, in-toto, SLSA GitHub Generator. Our Cosign run installed 788 packages, built in 150 seconds, and passed all 98 tests, so the codebase earns a serious production evaluation.

Setup4/5All checks passed; real use still needs identity and registry setup
Docs4/5Broad signing guidance, though air-gap instructions are marked old
Community5/56,241 stars with active security and compatibility work
Maturity5/5Stable v2 support and active v3 security releases

Discussed on

  1. hnSigning Git Commits – Three Ways5 points
  2. hnSigstore, the Swiss army knife of signing and attestation3 points
  3. hnSigstore Cosign signature verifier in 150 lines of C3 points
  4. hnCosigned: K8s admission controller, verify images are signed by SigStore cosign3 points
  5. hnContainer signing: Why not use blockchain?3 points

Who it’s for

Platform teams enforcing which identities may publish containers or deployment artifacts.
CI owners who can sign immutable image digests and verify an exact certificate identity and OIDC issuer.
Organizations using KMS, hardware tokens, their own PKI, or Sigstore's public Fulcio and Rekor services.
Supply-chain teams that need signed attestations and can define policy around predicate types, trusted roots, and registry behavior.

Who it’s NOT for

Pipelines that verify only that some signature exists: keyless verification requires an expected certificate identity and issuer to establish who signed.
Users unwilling to place identity data in an immutable public transparency log: the README warns that associated personal information cannot be removed later.
Air-gapped operators expecting a finished offline recipe: the README labels that section out of date and requires a maintained trusted-root process.
Concurrent signers assuming registry updates are atomic: the caveats describe a read-append-write race where the last writer can win.
Cross-registry v3 bundle replication without testing: issue 5030 reports cosign load failing when the destination lacks a bundle layer blob.
Teams pinned below v3.1.3: that release fixes GHSA-fx35-mq7g-6g98, a verification bypass involving an unexpected public key in a legacy bundle.

Setup reality

Our sandbox installed 788 Go packages in 115 seconds. The build succeeded in 150 seconds, and go test completed in 63 seconds with 98 passed and 0 failed out of 98. The checkout occupied 4 MB before dependencies.

Go 1.22 or newer is the documented source requirement. Packaged binaries, Homebrew, Arch, Nix, a GitHub Action, Kubernetes installs, and a container image avoid compiling locally. Real signing needs registry credentials plus OIDC, a private key, hardware token, KMS, or another PKI path.

Keyless signing calls Fulcio and Rekor and can open a browser for OIDC. Offline verification needs saved images, signature bundles, and a trusted root refreshed outside the isolated environment. Registry-specific storage, deletion, and media-type behavior must be tested with the registry used in production.

Cosign verifies a signer only when policy names that signer

Cosign signs container images, generic blobs, in-toto attestations, and other artifacts stored through OCI. Its default keyless flow obtains a short-lived certificate from Fulcio after OIDC authentication, records the event in Rekor, and pushes signature material beside the artifact in a registry. Key-based alternatives include an encrypted local keypair, hardware tokens, cloud KMS providers, and a team's own PKI. The choice changes custody, identity, and availability requirements.

Verification is the consequential half. A keyless command should name the expected certificate identity and OIDC issuer. A public-key command should receive the trusted public key through a controlled channel. Finding a mathematically valid signature from an unspecified identity is not an admission policy. Cosign also verifies signatures, certificate chains, transparency-log inclusion, timestamps, and attestations according to the material and flags supplied. Teams must decide which checks are mandatory for each artifact class.

The 63-second test run passed all 98 tests

Our fresh Go 1.24 container installed 788 packages in 115 seconds. The build then succeeded in 150 seconds, and go test completed in 63 seconds with 98 passed and 0 failed out of 98. The checkout contained 481 files, about 63,939 source lines, and occupied 4 MB. It had 17 CI workflow files, a Dockerfile, and a tests directory. Every install, build, and test step in the supplied lab run completed successfully.

Those results cover commit 58aae9e on 3 CPUs and 8 GB of RAM in an unprivileged container with no secrets. We did not authenticate through OIDC, contact Fulcio or Rekor, push to a registry, use a KMS key, or test an admission controller. The 98-test pass is good repository evidence; it is not proof that a particular registry, identity provider, key policy, or offline mirror has been configured safely.

What happened when we ran it

Our measured install, build, and test sequence took 328 seconds in total. The build produced no reported compiler error, and the test command returned a clean result. The lab block contains no dependency vulnerability audit, so this review does not assign an advisory count to the 788-package Go tree. Cosign's recent security release matters independently because it describes a vulnerability fixed in shipped versions, not a result from our package scan.

For everyday installation, users can avoid that source build through release binaries, package managers, the GitHub Action, Kubernetes documentation, or the published container image. Source contributors need Go 1.22 or newer. Production users need registry credentials and one signing identity path. Keyless operation adds OIDC plus Sigstore services; managed-key operation adds KMS policy and recovery; local keys add secure password, backup, and distribution procedures.

Version 3.1.3 fixes a legacy-bundle verification bypass

Release v3.1.3 arrived on August 6, 2026. Its first item resolves GHSA-fx35-mq7g-6g98, described as a verification bypass using an unexpected public key in a legacy bundle. The release also fixes a PKCS#11 panic, adds X.509 certificate-chain support for OCI signing, and adjusts digest selection and blob checksum handling. Verification tools belong on an upgrade path that treats security releases as urgent rather than optional feature updates.

Cosign 2.x is described as stable and still receives periodic fixes, while future major development is moving toward sigstore-go. The troubleshooting section says the active support window includes the newest release and the last v2 release. Mixed fleets should pin exact versions and fixture-test bundles created by every remaining signer. Open issue 2596 shows why: CycloneDX predicate shorthand changed between older versions, causing attestations made by one version to fail verification in another.

Public transparency creates an identity record that cannot be erased

The keyless prompt warns that personal information associated with the signing account, including an email address, may enter a public transparency log and cannot be removed later. That is part of the accountability model, and it requires an organizational identity decision before developers sign from personal accounts. CI workload identities are usually easier to govern because policy can match a repository workflow subject and issuer rather than a person's mailbox.

Air-gapped verification adds another ownership problem. The README labels its section out of date and says most workflows periodically obtain service keys from a TUF repository. Offline bundles can carry verification material, while the isolated side still needs an up-to-date trusted root delivered through a controlled process. cosign save also requires network access before the image and signatures move offline. Run the complete transfer and root-rotation drill before an incident cuts connectivity.

Registry storage can race, linger, or fail during replication

Cosign's caveats say legacy signature objects have a weak registry reference to the artifact. Deleting an image may leave signatures behind, and copying images does not automatically copy their signature relationship. Multiple signatures are maintained through a read-append-write update, so concurrent clients can overwrite one another. Digest signing prevents a moving tag from changing what was signed, but it does not repair registry garbage collection or update semantics.

Issue 5030 reports a v3.1.2 cross-registry failure in cosign save followed by cosign load. When a fresh destination lacks the v3 bundle layer blob, the command can push the manifest first and receive BLOB_UPLOAD_UNKNOWN. A fix pull request was active in August 2026. GitHub showed 6,241 stars, 166 combined issues and pull requests, and a last push on August 24. Cosign is active and capable; deployment quality depends on the verification policy and registry tests built around it.

Alternatives

ProjectWhat it isPick it when
NotationA Notary Project CLI for signing and verifying OCI artifacts with trust policies.pick this instead when your organization has standardized on Notary Project specifications and notation trust stores.
in-totoA framework for recording and verifying the authorized steps in a software supply chain.pick this instead when end-to-end layout and step verification matters more than a container-focused signing CLI.
SLSA GitHub GeneratorGitHub Actions builders that generate SLSA provenance for release artifacts.pick this instead when the main goal is producing provenance inside GitHub Actions rather than general registry signing.

What people are saying

  1. [github-trending] sigstore/cosign

Sources

  1. Cosign repository and README
  2. Cosign v3.1.3 release
  3. v3 bundle cross-registry load issue
  4. CycloneDX attestation compatibility issue
  5. Sigstore security advisory GHSA-fx35-mq7g-6g98
  6. Sigstore security process

More dev tools reviews

workmux · v2rayNG · SecLists · hashcat · eslint · fastfetch · the whole board →