DevOps

SBOM & Sigstore: Securing Your Software Supply Chain

Dive deep into Software Bill of Materials (SBOM) and Sigstore to fortify your software supply chain. Learn how to ensure integrity, transparency, and trust in your software artifacts.

Khader Vali June 26, 2026 15 min read

SBOM & Sigstore: Fortifying Your Software Supply Chain from Source to Deployment

In the modern software landscape, it’s no longer enough to secure just your application code. The attack surface has dramatically expanded to include every step of your software delivery pipeline – from the open-source libraries you consume, to your build systems, registries, and deployment environments. This is the realm of software supply chain security, a critical discipline that demands our immediate and sustained attention as senior engineers and architects.

Recent high-profile incidents like SolarWinds, Log4j, and Kaseya have underscored a harsh truth: compromising a single link in the supply chain can lead to widespread, catastrophic breaches impacting thousands of organizations. As developers, we’re at the forefront of this battle. We need robust tools and practices to ensure the integrity, authenticity, and transparency of the software we build, ship, and deploy.

This article will deep-dive into two foundational pillars of modern software supply chain security: **Software Bill of Materials (SBOM)** and **Sigstore**. We’ll explore what they are, why they matter, how they work, and most importantly, how to integrate them into your development lifecycle to build a more resilient and trustworthy software ecosystem. Consider this your practical guide from one engineer to another, demystifying these essential concepts and providing actionable insights.

The Imperative of Software Supply Chain Security

Think of your software as a complex dish. You’re not just cooking with your own ingredients; you’re using flour from one supplier, sugar from another, spices from a third. If any of those suppliers introduce a contaminated ingredient, your entire dish becomes compromised, regardless of how meticulously you prepared it. Software is no different. It’s an intricate tapestry woven from:

  • Your proprietary code.
  • Third-party open-source libraries and frameworks (npm, Maven, PyPI, Go modules).
  • Base images for containers (Ubuntu, Alpine, Red Hat UBI).
  • Build tools and compilers (Webpack, GCC, Go compiler).
  • CI/CD pipelines and automation scripts.
  • Cloud provider services and infrastructure.

An attacker needs to find only one weak link. This could be a malicious package uploaded to a public registry, a compromised CI/CD agent, a poisoned container image, or even a hijacked signing key. The “shift-left” security paradigm urges us to address these risks as early as possible in the development lifecycle, moving security from a post-production afterthought to an integrated part of design and implementation.

So, how do we gain visibility into this complex web of dependencies and ensure the authenticity of our artifacts? Enter SBOM and Sigstore.

<

SBOM & Sigstore: Securing Your Software Supply Chain
Generated Image

>

Software Bill of Materials (SBOM): Your Software’s Ingredient List

Just as a food product comes with an ingredient list, a Software Bill of Materials (SBOM) is a formal, machine-readable inventory of components that make up a piece of software. It’s a comprehensive, nested list of all first-party, third-party, and open-source components, including their versions, licenses, and dependencies.

What Information Does an SBOM Contain?

A good SBOM goes beyond just listing direct dependencies. It aims to provide deep insights into the software composition, typically including:

  • Component Name: The human-readable name of the software component (e.g., “Apache Log4j”).
  • Component Version: The specific version identifier (e.g., “2.14.1”).
  • Supplier Name: The entity that supplied the component (e.g., “Apache Software Foundation”).
  • Unique Identifiers: Such as Package URLs (PURL) or Common Platform Enumerations (CPE), which provide standardized ways to identify components.
  • Cryptographic Hashes (Checksums): SHA-256 or SHA-512 hashes of the component files, crucial for integrity verification.
  • License Information: The license under which the component is distributed (e.g., “Apache-2.0”, “MIT”). This is vital for legal and compliance reasons.
  • Relationships: How components relate to each other (e.g., “A depends on B”, “C builds D”). This helps in understanding the dependency graph.
  • Vulnerabilities (optional but common): Linkages to known vulnerabilities (CVEs) can be included or derived by analyzing the SBOM against vulnerability databases.

Why Is an SBOM Critical for Supply Chain Security?

The value of an SBOM becomes immediately apparent when you consider these scenarios:

  1. Vulnerability Management: Remember Log4j? If you had an accurate SBOM for all your applications and services, you could have quickly identified every single instance of the vulnerable Log4j version, prioritized remediation, and demonstrated due diligence. Without it, you’re left scrambling, manually scanning or guessing.
  2. License Compliance: Many open-source licenses come with obligations. An SBOM helps you track all licenses in your software, ensuring you comply with terms and avoid legal risks.
  3. Enhanced Transparency: It fosters trust by providing transparency to consumers, regulators, and auditors about the software’s composition.
  4. Incident Response: In the event of a breach or newly discovered vulnerability, an SBOM drastically reduces the time and effort required to assess impact and respond effectively.
  5. Procurement and Vendor Risk Management: When acquiring third-party software, requesting an SBOM allows you to evaluate the security posture and potential risks associated with the vendor’s dependencies.

Common SBOM Formats: SPDX, CycloneDX, and SWID

To be machine-readable and interoperable, SBOMs adhere to specific standards:

  • SPDX (Software Package Data Exchange):

    Managed by the Linux Foundation, SPDX is one of the most mature SBOM standards. It’s designed to facilitate transparency in software supply chains, primarily focusing on license compliance and provenance. SPDX documents can describe packages, files, snippets, and their relationships. It supports various formats like tag-value, RDF/XML, YAML, and JSON.

    Philosophy: Comprehensive and detailed, emphasizing legal and provenance aspects.

  • CycloneDX:

    Developed by the OWASP Foundation, CycloneDX is a lightweight and opinionated SBOM standard specifically designed for use in application security contexts and supply chain component analysis. It’s particularly well-suited for automation and integration into CI/CD pipelines due to its focus on bill of material use cases for security. It primarily uses XML and JSON formats.

    Philosophy: Security-first, concise, and automation-friendly.

  • SWID (Software Identification) Tags:

    An ISO standard (ISO/IEC 19770-2:2015), SWID tags focus on identifying installed software products. While not a full-fledged SBOM in the sense of listing all transitive dependencies, SWID tags provide crucial information about the installed software, its version, and who produced it. They are useful for inventory management and patch deployment.

    Philosophy: Focus on identifying installed software instances for asset management.

For most modern supply chain security initiatives, SPDX and CycloneDX are the dominant standards due to their rich dependency graph capabilities.

Generating and Utilizing SBOMs in Practice

Generating SBOMs should be an automated step in your CI/CD pipeline, ideally during the build process when all dependencies are resolved.

Tools for SBOM Generation:

  • Syft: An open-source CLI tool from Anchore that generates SBOMs from container images, file systems, and source code repositories. It supports multiple output formats, including SPDX and CycloneDX. It’s language-agnostic.
  • Trivy: While primarily a vulnerability scanner, Trivy can also generate SBOMs and then use them to find vulnerabilities. It works for container images, file systems, Git repositories, and more.
  • OWASP Dependency-Check: A free and open-source utility that attempts to detect publicly disclosed vulnerabilities contained within a project’s dependencies. It can generate various reports, including CycloneDX.
  • CycloneDX CLI Tools/Plugins: Many build systems (Maven, Gradle, npm, Go) have plugins or integrations that can generate CycloneDX SBOMs directly.

Example: Generating a CycloneDX SBOM for a Go Project with Syft

Let’s say you have a simple Go project:

// main.go
package main

import (
	"fmt"
	"github.com/sirupsen/logrus" // A common logging library
)

func main() {
	logrus.Info("Starting application...")
	fmt.Println("Hello, SBOM!")
	logrus.Info("Application finished.")
}

And your `go.mod` looks like this:

// go.mod
module myapp

go 1.20

require github.com/sirupsen/logrus v1.8.1 // indirect

To generate a CycloneDX JSON SBOM for this directory using Syft, you would run:

syft dir:. -o cyclonedx-json > sbom.json

The `sbom.json` file would then contain a detailed inventory, including `github.com/sirupsen/logrus` and its transitive dependencies, along with versions, hashes, and license information. A snippet might look like:

{
  "bomFormat": "CycloneDX",
  "specVersion": "1.4",
  "serialNumber": "urn:uuid:...",
  "version": 1,
  "metadata": {
    "timestamp": "...",
    "tools": [
      {
        "vendor": "anchore",
        "name": "syft",
        "version": "..."
      }
    ],
    "component": {
      "bom-ref": "pkg:golang/myapp@1.0.0",
      "type": "application",
      "name": "myapp",
      "version": "1.0.0"
    }
  },
  "components": [
    {
      "bom-ref": "pkg:golang/github.com/sirupsen/logrus@v1.8.1",
      "type": "library",
      "name": "logrus",
      "version": "1.8.1",
      "purl": "pkg:golang/github.com/sirupsen/logrus@v1.8.1",
      "hashes": [
        {
          "alg": "SHA256",
          "content": "..."
        }
      ],
      "licenses": [
        {
          "license": {
            "id": "MIT",
            "name": "MIT License"
          }
        }
      ]
    },
    // ... other components and transitive dependencies ...
  ]
}

Challenges with SBOMs:

  • Completeness and Accuracy: An SBOM is only as good as the data it contains. Ensuring all components, including dynamically loaded ones, are captured can be challenging.
  • Generation Overhead: Integrating SBOM generation into every build step requires tooling and pipeline adjustments.
  • Storage and Management: SBOMs need to be stored alongside their corresponding artifacts and made accessible for analysis.
  • Version Skew: Maintaining up-to-date SBOMs for long-lived applications can be complex, especially with frequent patching and updates.

Despite these challenges, the transparency and insights provided by SBOMs are indispensable for modern software security. They give you the “what” – what exactly is in your software. But how do you know if that “what” is truly what the producer intended, and hasn’t been tampered with? That’s where Sigstore comes in.

Sigstore: Ensuring Authenticity and Integrity of Software Artifacts

You’ve got an SBOM detailing your software’s ingredients. Great. But how do you *trust* that SBOM? How do you trust the artifact itself? This is the core problem Sigstore solves: providing a mechanism for developers to sign software artifacts and for consumers to verify those signatures, ensuring integrity and authenticity.

Traditionally, software signing involved managing long-lived PGP keys, distributing public keys securely, and a host of operational complexities that often led to poor adoption or weak security practices. Sigstore aims to revolutionize this by making cryptographic signing easy, transparent, and ubiquitous.

What is Sigstore?

Sigstore is an open-source project that provides a free, non-profit software signing service backed by a public transparency log. It’s designed to make it simple for developers to sign all types of software artifacts (container images, binaries, SBOMs, manifest files) and for consumers to verify them cryptographically. It does away with the need for developers to manage their own long-term signing keys, leveraging short-lived, ephemeral certificates instead.

The project is part of the OpenSSF (Open Source Security Foundation) and is supported by major industry players like Google, Red Hat, and Purdue University.

Core Components of Sigstore:

Sigstore is comprised of three primary components that work together seamlessly:

  1. Fulcio (Certificate Authority):

    Fulcio acts as a certificate authority (CA) that issues short-lived, ephemeral X.509 signing certificates. Instead of using a traditional client certificate, Fulcio leverages your existing OpenID Connect (OIDC) identity (e.g., your Google account, GitHub ID, Microsoft ID). When you want to sign an artifact, Fulcio verifies your OIDC identity and issues a certificate valid for a very short period (e.g., 10 minutes). This eliminates the need for developers to manage private keys, as the keys are generated on-the-fly and discarded after use.

    Key Benefit: No long-lived key management, leverages existing developer identities.

  2. Rekor (Transparency Log):

    Rekor is an immutable, tamper-proof transparency log for signed software artifacts. Every time an artifact is signed using Sigstore, the signature, the ephemeral certificate issued by Fulcio, and metadata about the artifact are recorded in Rekor. This provides a publicly auditable, append-only ledger of all signing operations. Anyone can query Rekor to verify that an artifact was indeed signed and by whom (via the OIDC identity in the certificate), and that the signature hasn’t been tampered with.

    Key Benefit: Public auditability, tamper-proof record, non-repudiation.

  3. Cosign (Signing Utility):

    Cosign is the primary CLI tool developers interact with to sign and verify software artifacts using Sigstore. It orchestrates the entire signing process: generating ephemeral keys, interacting with Fulcio for certificates, signing the artifact, and uploading the signature to Rekor. On the verification side, Cosign downloads the artifact, retrieves its signature and certificate from Rekor, and performs cryptographic validation.

    Key Benefit: Easy-to-use CLI, handles all underlying cryptographic complexities.

<

SBOM & Sigstore: Securing Your Software Supply Chain
Generated Image

>

How Sigstore Works: A Step-by-Step Architecture

Let’s walk through the process of a developer signing a container image and a consumer verifying it:

  1. Developer Initiates Signing with Cosign:

    The developer runs a command like `cosign sign myregistry/myimage:latest`. Cosign needs to prove the developer’s identity.

  2. OIDC Identity Authentication:

    Cosign prompts the developer to authenticate with an OIDC provider (e.g., Google, GitHub, Microsoft). This typically opens a browser window for login, and the OIDC provider returns an identity token to Cosign.

  3. Fulcio Issues Ephemeral Certificate:

    Cosign sends this OIDC identity token to Fulcio. Fulcio validates the token with the OIDC provider. Upon successful validation, Fulcio generates a short-lived private key and issues an X.509 signing certificate for that key. This certificate includes the developer’s verified OIDC identity (e.g., email address, GitHub username).

  4. Artifact Signing:

    Cosign uses the newly issued ephemeral private key and certificate to cryptographically sign the software artifact (e.g., the container image’s digest). The private key is immediately discarded after signing.

  5. Signature and Certificate Upload to Rekor:

    Cosign then uploads the signature, the ephemeral Fulcio certificate, and details about the artifact (like its digest) to Rekor, the transparency log. Rekor logs this information and provides a signed receipt (an inclusion proof) back to Cosign.

  6. Signature Storage (Optional, but recommended):

    Cosign typically stores the signature and certificate alongside the artifact in the registry (e.g., as an OCI Referrers artifact for container images). This makes retrieval easy for verification.

  7. Consumer Verifies with Cosign:

    A consumer (e.g., a CI/CD pipeline, a deployment system) wants to verify the artifact. They run a command like `cosign verify myregistry/myimage:latest`.

  8. Signature and Certificate Retrieval:

    Cosign retrieves the signature and certificate associated with the artifact from the registry.

  9. Rekor Verification:

    Cosign checks Rekor to ensure that the retrieved signature and certificate were indeed logged and are immutable. This step confirms the non-repudiation and integrity of the signing event.

  10. Cryptographic Validation:

    Finally, Cosign uses the retrieved certificate (whose authenticity is confirmed by Rekor and Fulcio’s root of trust) to cryptographically verify the artifact’s signature. It also checks that the identity in the certificate matches an expected issuer or identity (e.g., `github.com/my-org/my-repo/.github/workflows/build.yml@refs/heads/main`).

If all these steps pass, the consumer can be confident that the artifact they received is exactly what the attested identity signed, and it hasn’t been tampered with.

Advantages of Sigstore:

  • No Key Management Hassle: Developers don’t need to generate, store, or rotate long-lived private keys, which has historically been a major barrier to widespread signing adoption.
  • Ephemeral Keys: The use of short-lived keys drastically reduces the window for compromise. Even if an ephemeral key is leaked, its utility is minimal.
  • Transparency and Auditability: Rekor provides a public, immutable ledger of all signing events, enabling anyone to audit the provenance of software.
  • Open Source and Free: Sigstore is a public good, making robust software signing accessible to everyone.
  • Cloud-Native Integration: Designed for modern CI/CD pipelines and container registries.
  • Stronger Identity Proof: Leverages trusted OIDC providers for strong identity assertion, rather than self-signed PGP keys.

Real-World Use Cases for Sigstore:

  • Container Image Signing: Ensuring that the container images deployed to production are the ones built and approved by your team, and not tampered with.
  • Supply Chain Integrity: Signing binaries, scripts, configuration files, and even SBOMs themselves to guarantee their authenticity.
  • Securing CI/CD Pipelines: Integrating Cosign into GitHub Actions, GitLab CI, Jenkins, etc., to automatically sign artifacts upon successful builds.
  • Software Distribution: Providing verifiable proofs for software distributed via package managers or direct downloads.

Challenges with Sigstore:

  • OIDC Provider Dependency: Relies on external OIDC providers for identity, which might not be suitable for all highly restricted or air-gapped environments (though private Fulcio instances are possible).
  • New Paradigm Shift: Adopting Sigstore requires understanding a new trust model, which can be a learning curve for some organizations.
  • Adoption: While growing rapidly, widespread adoption across the entire open-source ecosystem is still ongoing.

Sigstore gives you the “who” and “that it hasn’t changed” – who created it, and assurance that it’s authentic and untampered. Now, let’s see how these two powerful concepts combine to form a truly resilient software supply chain.

The Synergy: SBOM + Sigstore for Comprehensive Software Supply Chain Security

Individually, SBOMs and Sigstore are powerful. But together, they form a robust defense strategy that covers both transparency and integrity. Think of it this way:

  • SBOM answers: “What exactly is in this software artifact?” (Ingredients list)
  • Sigstore answers: “Who produced this software artifact, and can I trust that it hasn’t been altered since it left their hands?” (Authenticity and integrity seal)

You need both. An SBOM without a trusted signature could be forged, making its contents unreliable. A signed artifact without an SBOM tells you it’s authentic, but not what vulnerabilities might be lurking within its dependencies. By combining them, you get a verifiable, transparent, and trustworthy view of your software’s composition and provenance.

A Holistic Secure Supply Chain Architecture

Let’s envision an end-to-end architectural flow incorporating both SBOM and Sigstore:

1. Development & Source Control:

  • Developers write code and commit it to a version control system (e.g., Git).

2. CI/CD Build Pipeline:

  • Code Compilation/Assembly: The CI/CD pipeline fetches the code, compiles it, and resolves all direct and transitive dependencies.
  • SBOM Generation: At a strategic point during or immediately after the build, an SBOM is automatically generated for the resulting application or container image. This SBOM might be stored as a separate file (e.g., `sbom.json`).
  • Artifact Creation: The final software artifact (e.
Written by

Khader Vali

Senior Software Engineer specializing in cloud architecture, real-time systems, and enterprise-scale applications.

Share this article

Related Articles

CI/CD Pipeline Architecture for Multi-Team Organizations

Aug 26, 2024 · 1 min read

Prometheus, Grafana, OpenTelemetry: The Observability Stack

Jul 13, 2026 · 16 min read

Blue/Green & Canary: Zero-Downtime Deployment Mastery

Jul 12, 2026 · 16 min read