What Is Code Signing? Definition, How It Works, and Why It Matters for Supply Chain Security (2026)

By
Minimus
May 7, 2026

Code signing is the cryptographic process of attaching a digital signature to a software artifact so any consumer can verify two things: who built it, and that nothing has changed since. It is the control that makes the rest of supply chain security verifiable. Without signatures, the SBOM, the build provenance, and the artifact itself can all be modified silently in transit.

This guide walks through what code signing is, how digital code signing works step by step, what it does and does not protect against, and how modern code signing software (Sigstore, keyless certificates, transparency logs) is replacing the older long-lived-key model.

Key Takeaways

  • Code signing is the cryptographic process of attaching a digital signature to a software artifact (container image, binary, library, SBOM) so anyone downloading it can verify it has not been tampered with since the publisher released it.
  • A valid signature proves two things at once: authenticity (who built it) and integrity (it has not changed byte-for-byte).
  • Signing is now a regulatory baseline. U.S. Executive Order 14028, NIST SP 800-218 (SSDF), and SLSA v1.0 all require signed provenance for federal and large-enterprise software.
  • Minimus signs every hardened container image, SBOM, and SLSA Build L3 provenance attestation at build time using Sigstore cosign, with all signatures logged to a public transparency log. 

Code signing is the cryptographic process of attaching a digital signature to a software artifact to prove its authenticity and integrity. A consumer learns two things at once from a valid signature: that the artifact came from the stated publisher (authenticity), and that it has not changed byte-for-byte since the publisher signed it (integrity).

Signing applies to any software artifact: container images, executables, packages, libraries, scripts, SBOMs (Software Bills of Materials), Helm charts, and other files generated during the software development lifecycle.

The control exists because modern software passes through many environments before reaching the consumer: developer workstations, cloud build systems, artifact registries, CDNs, and end-user deployments. Each handoff is an opportunity for tampering or corruption. A signature creates an immutable cryptographic record that survives every handoff and lets any party independently verify that nothing changed.

The closest physical analog is a wax seal on a letter. A broken seal signals that the letter was opened between sender and recipient. A mismatched code signature signals the same thing for software.

In production cloud-native environments, signing is the cryptographic floor under hardened image platforms. Minimus, for example, signs every container image, SBOM, and provenance attestation it ships using Sigstore cosign, with all signing events logged to a public transparency log so any consumer can verify the artifact independently.

What Is a Code Signing Certificate? 

A code signing certificate is a digital file issued by a trusted Certificate Authority (CA) that binds a public key to the identity of a software publisher. It is the credential that lets users and systems verify who signed a piece of software.

A code signing certificate contains:

  • The publisher's public key
  • The publisher's verified identity information (organization name, domain, etc.)
  • The CA's digital signature, confirming the certificate is legitimate
  • A validity period (typically 1 to 3 years, or short-lived for tools like Sigstore Fulcio)

Standard vs. Extended Validation (EV) Code Signing Certificates

There are three common code signing certificate types in production today: a standard (OV) code signing certificate, an extended validation code signing certificate (also called an EV code signing certificate), and a short-lived keyless certificate.

Type Validation Level Key Storage Common Use
Standard (OV) Organization identity verified Software or hardware General software signing
Extended Validation (EV) Stricter identity verification Hardware Security Module (HSM) required Windows kernel drivers, high-trust software
Short-lived (keyless) Identity via OIDC token (e.g., GitHub, Google) Ephemeral, no long-term key storage CI/CD pipeline signing (Sigstore)

Common CAs for code signing include DigiCert, Sectigo, GlobalSign, and open-source options such as Sigstore Fulcio, which issues short-lived ephemeral certificates tied to identity providers rather than long-lived keys. The Sigstore approach is growing fastest in cloud-native and containerized environments because it removes the long-lived private key as an attack target entirely.

What Are the Core Components of Code Signing?

Code signing relies on four foundational components from public key cryptography: a public key, a private key, a digital certificate, and a hash. Each one fails differently when broken, which is why understanding all four matters for supply chain security.

Public Key

A public key is a shareable cryptographic value linked to a specific publisher. Anyone, including users, automated systems, and package managers, uses it to verify a signature without needing access to the private key. Public keys are distributed via code signing certificates.

Private Key

A private key is a secret cryptographic value known only to the software publisher. It generates signatures. The security of the entire system depends on keeping the private key secret. If a private key is stolen, attackers can sign malicious software as if it came from the legitimate publisher, and downstream consumers see a valid signature.

Digital Certificate

A digital certificate packages a public key together with verified identity information about its owner and is issued by a trusted Certificate Authority. It is the mechanism that ties a public key to a real-world identity, allowing relying parties to trust who created the signature.

Hash (Cryptographic Digest)

A hash is a fixed-length value computed from the full contents of a software artifact using a hashing algorithm such as SHA-256. Every unique artifact produces a unique hash. If even a single byte of the artifact changes, the hash changes completely. Hashes are the mechanism that enables byte-for-byte integrity verification.

How Does Code Signing Work? (Step-by-Step)

Code signing follows a four-step process that runs once at publish time and again every time a consumer verifies the artifact.

Step 1: Key Pair Generation

The software publisher generates a public/private key pair (the signing key pair). The private key is kept secret, ideally in a Hardware Security Module (HSM). The public key is embedded in a digital certificate issued by a Certificate Authority and shared publicly.

Step 2: Hash Generation

Before signing, the publisher computes a cryptographic hash of the exact artifact being signed (a container image, binary, or SBOM). This hash is a unique fingerprint of that artifact at that moment in time.

Step 3: Signature Generation

The publisher feeds the hash through a signing algorithm using their private key. This produces a unique digital signature mathematically linked to both the artifact's content (via the hash) and the publisher's identity (via the private key).

Step 4: Verification

When a user or system downloads the artifact, they recompute the hash of the downloaded artifact, use the publisher's public key to decrypt and verify the signature, and compare the two hashes. If the hashes match, the artifact is verified as authentic and unmodified. If they do not match, the artifact was modified after signing, whether through malicious injection, file corruption, or incomplete transfer.

Optional Enhancements

Three additions strengthen the basic flow:

  • Transparency logs (e.g., Sigstore Rekor): immutable, append-only records of all signing events, enabling audit of who signed what and when.
  • Timestamps: cryptographic timestamps prove a signature was created before a certificate expired, ensuring signatures remain valid even after certificate renewal.
  • Keyless signing (Sigstore): ties signing identity to an OIDC identity provider (GitHub Actions, Google Accounts) instead of a long-lived private key, removing private key management risk.

In a typical Minimus image build, this four-step flow is fully automated. The pipeline computes the hash on the source-built image, signs with an ephemeral Sigstore Fulcio certificate, logs the signature and SBOM to Rekor, and ships the verifiable artifact in a single pass. There is no key vault to manage and no manual signing step for the engineering team to remember.

What Are the Benefits of Code Signing?

Code signing delivers four operational benefits and one regulatory benefit, and each maps to a specific supply chain attack class.

Tamper Detection

Code signing provides byte-for-byte integrity verification. Any change to a signed artifact (malicious code injection, incomplete file transfer, or data corruption) changes the hash and invalidates the signature. Tampering becomes detectable at any point in the supply chain. A consumer of a Minimus hardened image, for example, can run cosign verify against the public Rekor log and confirm in under a second that the image matches the build pipeline that produced it.

Publisher Authentication

Code signing proves an artifact was released by a specific, verified publisher. Users can confirm a container image, package, or binary actually came from the organization it claims to come from, not from an impersonator or compromised distribution channel.

Supply Chain Attack Prevention

Many high-profile supply chain incidents involved malicious code injected at a build or distribution stage after legitimate code was written. The SolarWinds Orion compromise (CVE-2020-10148, CISA Alert AA20-352A, December 2020) and the XZ Utils backdoor (CVE-2024-3094, disclosed March 2024) both took this shape. Code signing that covers the build pipeline, not just the final artifact, makes these attacks detectable.

Regulatory and Compliance Support

Code signing is now a mandatory or near-mandatory control across modern compliance frameworks:

  • SLSA (Supply-chain Levels for Software Artifacts) requires signed provenance for Build L1 and above.
  • NIST SSDF (NIST SP 800-218) mandates integrity controls across the SDLC.
  • U.S. Executive Order 14028 requires SBOMs and integrity attestations for federal software.
  • FedRAMP requires cryptographic integrity controls for software used in federal environments.

Audit Trail

Combined with transparency logs (Sigstore Rekor), code signing creates a permanent, tamper-evident record of every signing event: who signed, what artifact, with which key, and when. Regulators and incident responders increasingly expect this record to exist.

What Types of Software Artifacts Can Be Signed?

Code signing applies to virtually any software artifact, and most modern code signing tools target multiple artifact types in a single workflow. Container image signing and SBOM signing are the most common signing targets in cloud-native environments because both move through multiple registries and tools before reaching production.

Artifact Type Examples Common Signing Tool
Container images Docker images, OCI artifacts Sigstore cosign, Notary (container image signing)
Binary executables Windows .exe, macOS apps, Linux ELF Authenticode, Apple codesign, GPG
Source code archives .tar.gz, .zip releases GPG, Sigstore
Software packages npm, PyPI, Maven, RubyGems GPG, Sigstore, package-manager native signing
SBOMs CycloneDX, SPDX documents Sigstore cosign, in-toto
Firmware Embedded system firmware Vendor-specific, Secure Boot
Scripts PowerShell scripts Authenticode
Kubernetes manifests Helm charts, YAML configs Sigstore, OPA

For container images specifically, signed SBOMs and signed provenance attestations together let a consumer verify both what is inside the image and how it was built. This is the basis of moving from SBOM toward CBOM (Cryptographic Bill of Materials) for full cryptographic visibility.

What Are the Limitations and Weaknesses of Code Signing?

Code signing is a critical control, but it does not guarantee that signed software is safe. Understanding the limitations prevents overreliance on signatures alone.

Private Key Theft

If an attacker obtains a publisher's private key, they can sign malicious software as if it came from the legitimate publisher, and users will see a valid signature with no indication the software is compromised. The fix is hardware. Store private keys in HSMs, use ephemeral keys via Sigstore keyless signing, and rotate on a schedule.

Pre-Signing Code Injection

Attackers with access to a software repository or build environment can inject malware before the code is signed. Developers then unknowingly release legitimately signed but compromised software. This was the vector in the XZ Utils backdoor in 2024 and in the Trivy v0.69.4 supply chain compromise. Harden the build runner. SLSA Build L3 platforms and tools like StepSecurity Harden-Runner exist for this purpose, alongside code review and audit before signing.

Certificate Impersonation

Attackers may create certificates with names or details similar to a trusted publisher, tricking users who do not inspect certificate details carefully. Certificate Transparency logs catch most impersonation attempts. Always verify the full certificate chain and publisher identity, not just the presence of a signature.

Dependency Trust Gap

Code signing verifies the integrity of a specific signed artifact, but it does not guarantee the artifact's dependencies are also secure. A validly signed container image may pull and run malicious or vulnerable dependencies at runtime. Pair signing with Software Composition Analysis (SCA), SBOM generation, and dependency pinning. Signing covers the artifact; SCA covers what is inside it.

Key Validity After Certificate Expiry

Long-lived signing keys that are exposed or stolen can be abused for the full duration of the certificate's validity (1 to 3 years). Use short-lived certificates instead. Sigstore Fulcio issues them for minutes, which closes the abuse window almost entirely.

What Are Code Signing Best Practices?

A working code signing program in 2026 looks roughly like this:

  1. Use Hardware Security Modules (HSMs) to store private keys. Never store private keys in plaintext or in version control.
  2. Adopt keyless signing (Sigstore) to eliminate long-lived private key management entirely.
  3. Sign at build time, not post-build. Integrate signing into the CI/CD pipeline as a mandatory step.
  4. Log every signing event to a transparency log (Sigstore Rekor) for auditability.
  5. Sign every artifact type. SBOM signing, container image signing, VEX documents, and build provenance attestations all need signatures, not just the final binary.
  6. Rotate certificates and signing keys on a defined schedule, and use short-lived certificates where possible.
  7. Verify signatures at deployment. Do not just sign, enforce verification in CI/CD and in runtime admission controllers, including the Kyverno admission controller for hardened base images.
  8. Use SLSA-compliant build platforms to extend integrity guarantees beyond the artifact to the entire build process.
  9. Pair signing with SCA and SBOM generation. Signing proves integrity, but SBOMs and vulnerability scanning prove the components themselves are safe.

Hardened image platforms like Minimus apply most of these defaults out of the box. Every image ships signed, with a signed SBOM and a SLSA Build L3 provenance attestation, so engineering teams inherit the practices rather than having to build the pipeline themselves.

How Does Sigstore Modernize Code Signing?

Sigstore is an open-source project (originally developed by Google, Red Hat, and Purdue University, now under the Open Source Security Foundation) that provides a free, standardized suite of tools for software signing, verification, and transparency. It is the emerging standard for supply chain security signing in the open-source ecosystem.

Sigstore Components

Component Role
cosign The de facto container image signing tool. Signs and verifies container images and other OCI artifacts
Fulcio Certificate Authority that issues short-lived signing certificates tied to OIDC identity providers (GitHub, Google, Microsoft)
Rekor Immutable, append-only transparency log recording all signing events
gitsign Signs Git commits using Sigstore's keyless signing model

What Makes Sigstore Different from Traditional Code Signing?

Traditional code signing requires publishers to generate and securely store long-lived private keys, manage certificate renewals every 1 to 3 years, and protect those keys against theft for the full validity period. Sigstore keyless signing removes long-lived keys from the equation entirely. The publisher authenticates via an OIDC token (a GitHub Actions identity, a Google account), Fulcio issues a certificate valid for only a few minutes, the certificate and signature are logged to Rekor, and the ephemeral private key is discarded after signing. There is nothing left for attackers to steal.

The operational consequence is that signing becomes a default, not a project. CI/CD pipelines sign every build automatically, no key vault to manage, no rotation schedule to maintain.

How Does Minimus Use Code Signing? 

Minimus treats container image signing and SBOM signing as default product behavior: every hardened container image, SBOM, VEX document, and provenance attestation it produces is signed with Sigstore cosign as part of a SLSA Build L3-aligned pipeline. Signing is applied at build time on the source-built image, not bolted on after distribution, so consumers can cryptographically verify that what they are pulling from the Minimus Hardened Image Gallery is exactly what Minimus built, with no modification at any point in the distribution chain.

Concretely, every Minimus image version ships with:

  • A Sigstore cosign signature over the image digest, logged to the public Rekor transparency log
  • A signed SBOM in CycloneDX format listing every package and version included in the image
  • A signed VEX document marking non-exploitable findings so scanners do not generate noise
  • A SLSA Build L3 provenance attestation linking the image back to the exact source commit and build pipeline

Verification is a single cosign verify command in CI/CD or in a Kubernetes admission controller. Because Minimus is image- and supply-chain-centric (not a runtime CNAPP), signing is treated as a primary product surface rather than a feature flag.

Frequently Asked Questions

What Is the Difference Between Code Signing and Encryption?

Code signing proves who created a piece of software and that it has not been modified. It does not hide the content. Signed software can be read by anyone. Encryption hides content from unauthorized parties but does not prove who created it or whether it was tampered with. They solve different problems and are often used together. A signed artifact can also be encrypted for confidential distribution.

What Is Keyless Code Signing?

Keyless code signing is a signing approach pioneered by Sigstore that eliminates the need for long-lived private keys. A publisher authenticates via an identity provider (GitHub, Google, Microsoft), receives an ephemeral certificate valid for a few minutes, signs the artifact, and discards the key. All events are logged to a public transparency log. Because no persistent private key exists, there is nothing for attackers to steal and reuse.

What Is the Difference Between Code Signing and SBOM?

Code signing proves a software artifact's integrity and authenticity (that it was not tampered with and came from the stated publisher). An SBOM (Software Bill of Materials) is an inventory of every component, library, and dependency in a piece of software, including versions and licenses. They are complementary: a signed SBOM proves the inventory itself has not been tampered with, while SCA tools use the SBOM data to check whether listed components contain known vulnerabilities.

Does Code Signing Guarantee Software Is Free of Vulnerabilities?

No. Code signing proves an artifact is unmodified and authentic. It does not evaluate the security quality of the code itself. A legitimately signed artifact may still contain vulnerabilities, malicious dependencies, or backdoors introduced before signing. Code signing should be combined with SCA, SBOM generation, vulnerability scanning, and secure build practices for a complete supply chain posture.

How Does Minimus Implement Code Signing?

Minimus applies container image signing and SBOM signing to every hardened image, VEX document, and SLSA Build L3 provenance attestation at build time using Sigstore cosign. Signatures are logged to the public Rekor transparency log, so any consumer can verify with a single cosign verify command that the image they pulled is exactly what Minimus built. There are no long-lived keys to manage and no post-distribution signing step. Every image ships verifiable by default.

Conclusion

Code signing is the cryptographic floor under modern software supply chain security. Without it, every other control (SBOMs, vulnerability scanners, provenance attestations, compliance dashboards) is reading data that could have been altered between the publisher and the consumer. With it, every layer becomes verifiable.

When we audit signing pipelines, the same failure pattern keeps coming up. The headline binary is signed, but the SBOM is not. The provenance attestation often is not either. Helm charts almost never are. Each of those gaps is a place an attacker can substitute content without breaking the visible signature on the headline artifact. The point of modern signing infrastructure (Sigstore, keyless certificates, transparency logs) is to make signing every artifact cheap enough that there is no reason to skip any of them.

Minimus
Minimus
Sign up for minimus

Avoid over 97% of container CVEs

Access hundreds of hardened images, secure Helm charts, the Minimus custom image builder, and more.