Resources · 16

Software supply chain assurance: components to release

Connect components, provenance, builds, vulnerabilities and updates to each release actually deployed.

· 7 min

Fictional empty verification bench with a circuit board under an inspection lens and an amber-lit metal module.

What this guide helps achieve

  • Know the dependencies actually shipped
  • Verify artifact origin
  • Prioritise flaws in context
  • Test replacement and rollback

Quick check

  • Does the bill of materials match the deployed version?
  • Are transitive dependencies included?
  • Who can sign a release?
  • Is a vulnerability reachable in your use?
  • Can a critical component be removed without improvisation?

Step-by-step method

  1. 01

    Map shipped releases

    Identify repositories, direct and transitive dependencies, build tools, images, external services and owners. Connect all of them to a verifiable release.

    Deliverable: product, component, version and owner map.

  2. 02

    Produce a usable bill of materials

    Generate an SBOM for every release and compare it with the artifacts actually shipped. Resolve inaccurate names, missing versions and internal components.

    Deliverable: dated and validated SBOM.

  3. 03

    Protect the build

    Limit publishing rights, isolate sensitive stages and retain provenance, digests and signatures. Verify this evidence before deployment.

    Deliverable: build record and verification policy.

  4. 04

    Triage alerts

    Connect each vulnerability notice to the component, version, exposure and actual use. Assign an owner, deadline, decision and closure evidence.

    Deliverable: contextual triage queue.

  5. 05

    Rehearse change

    Replace a critical component in a test environment, check business journeys and rehearse rollback. Measure dependencies that block the change.

    Deliverable: replacement and fallback exercise report.

  6. 06

    Maintain evidence

    Review components and suppliers at major releases and after incidents. Retain records for a period that supports investigation and correction.

    Deliverable: review calendar and release history.

VEX: read a statement before dismissing an alert

An SBOM lists software components. VEX expresses declared vulnerability impact on an identified product at a given time. Establish the exact product, issuer and context before using its status in triage.

The four OpenVEX statuses
not_affectedThe identified product is declared unaffected. OpenVEX requires a justification or impact_statement; check that the reasoning covers your version and use.
affectedThe product is declared affected. The statement must include an action_statement to support vulnerability handling.
fixedThe named versions contain a fix. This does not establish that you have installed that version.
under_investigationApplicability is not yet known. This cannot establish absence of impact; plan another review.

Six reading cases

Fictional cases illustrating document review; they do not analyse your software or validate a VEX file.

Matching scopenot_affected

The statement covers the same product and version, with component_not_present and an explanation of the build.

What the statement supports

Review the evidence binding that explanation to the delivered artefact, issuer identity and revisions. You can document the analysis; status alone does not prove it correct.

A different versionnot_affected

The supplier declares a recent version unaffected. Your inventory contains an older version.

What the statement supports

Do not extend that conclusion to the installed version. Find a covering statement or seek clarification; this document alone cannot close the alert.

Missing reasonnot_affected

The statement says not_affected but supplies neither justification nor impact_statement.

What the statement supports

It does not meet this OpenVEX requirement. Request the missing reason; its absence does not itself prove the product affected.

Investigation continuesunder_investigation

The latest statement says under_investigation and no subsequent conclusion is available.

What the statement supports

Keep the item open with an owner and next review. Urgency also depends on local exposure and available threat information.

The fix is not deployedfixed

The fixed status covers the patched version, but inventory still shows its predecessor.

What the statement supports

Verify deployment and operation of the fixed version before closing your action. A fix being available and being installed are different facts.

Missing actionaffected

The product is declared affected but the document contains no action_statement.

What the statement supports

Request the missing instructions and consult the supplier advisory. An incomplete document does not justify ignoring the declared impact.

Reference specification : OpenVEX v0.2.0

Management indicators

IndicatorWhat it measuresFirst action
SBOM coverageShipped releases with a checked component inventoryResolve discrepancies before publication
Verified provenanceArtifacts checked before deploymentBlock releases missing expected evidence
Triage timeTime from relevant notice to documented decisionEscalate exposed components
ReversibilityCritical replacements tested with rollbackRemove blocking dependencies

Common pitfalls

  • Confusing repository inventory with deployed components
  • Keeping an SBOM without updating it
  • Ranking a flaw only by score
  • Signing an artifact without verifying build provenance

Frequently asked questions

Is an SBOM sufficient?

No. It helps identify components, but provenance, integrity, exposure and update capability also need verification.

Should every vulnerability block release?

Decide from actual use, exposure, compensating controls and business criticality, and record the reasoning.

Which reference framework helps?

The NIST Secure Software Development Framework offers secure development and software protection practices across the lifecycle.

References: data, uses and limitations

Documentation reviewed on .

Software bill of materials: inventory to verificationActual delivered artefact. SPDX · Describe. CycloneDX · Describe. Applicability assessment. Link document and build. Components and information. Components and dependencies. Versions, advisories and settings. A bill of materials is not evidence of vulnerability absence.Software bill of materials: inventory to verificationActual delivered artefactLink document and buildSPDX · DescribeComponents and informationCycloneDX · DescribeComponents and dependenciesApplicability assessmentVersions, advisories and settingsA bill of materials is not evidence of vulnerability absence
Software bill of materials: inventory to verification
References: data, uses and limitations
Source and purposeVerified data or benchmarkHow to use itLimitation to retain
MITRE · Common Weakness Enumeration

Name classes of software and hardware weakness.

A CWE describes a weakness that can contribute to vulnerabilities. It does not represent a particular incident. Connect the weakness to the observed mechanism: input, processing and missing control. Use it to fix the cause and plan regression tests.

Explore the method →

A keyword in a report alone does not establish the correct CWE classification.
SPDX · Specifications

Describe components and information in a software bill of materials.

The official specifications page distinguishes SPDX 3.0 from earlier versions such as 2.3. Document version affects schema and tool compatibility. Request format, version, build scope and component identifiers. Compare the bill of materials with the delivered artefact.

Explore the method →

A bill of materials alone proves neither vulnerability absence, dependency completeness nor compliance with every licence.
OWASP · CycloneDX

Exchange bills of materials and supply-chain information.

The official overview dates specification 1.7 to 21 October 2025 and documents JSON, XML and Protobuf. Check version, component references and dependency links. Retain the connection between the bill of materials, build and deployed product.

Explore the method →

Changing format does not fix missing components. A descriptive inventory and a vulnerability impact assessment answer different questions.
NIST · Post-quantum cryptography

Identify standards relevant to cryptographic transition.

NIST distinguishes FIPS 203 for ML-KEM, FIPS 204 for ML-DSA and FIPS 205 for SLH-DSA. Key encapsulation and signatures are different functions. Inventory protocols, libraries, keys and dependencies. Ask which versions are actually implemented and test interoperability, performance and rollback.

Explore the method →

Compare post-quantum parameters and estimate their volumes →

Having a standardised algorithm does not establish security of the complete integration or a universal migration deadline.

Post-quantum cryptography: compare before migrating

ML-KEM establishes a shared secret; ML-DSA and SLH-DSA sign data. These functions serve different needs. The 18 parameter sets below come from the three final FIPS standards published on 13 August 2024. Use them to prepare inventories and capacity tests without treating an algorithm name as proof of a secure system.

Data and publication status pages checked on .

Establishing a secret and signing: two separate paths

ML-KEM · Establish a secret

  1. The recipient publishes an encapsulation key.
  2. The sender creates a ciphertext and shared secret, then sends the ciphertext.
  3. The recipient recovers the secret using a decapsulation key.

Peer authentication and use of the secret depend on the complete protocol.

ML-DSA / SLH-DSA · Sign

  1. The signer protects a private key and distributes a public key.
  2. The signer signs data and sends the data with its signature.
  3. The verifier checks the signature using the trusted public key.

A signature alone does not encrypt the signed content.

For ML-KEM, the public and private keys are used for encapsulation and decapsulation respectively; column five is the ciphertext. For both DSA families, the keys are used for verification and signing; column five is the signature. A dash means not applicable. NIST categories are neither quality ratings nor key lengths in bits.

Raw sizes in bytes · FIPS 203, 204 and 205
Parameter set / sourceNIST categoryPublic keyPrivate keyKEM ciphertext / signatureShared secret
ML-KEM-512FIPS 203 18001,632 76832
ML-KEM-768FIPS 203 31,1842,400 1,08832
ML-KEM-1024FIPS 203 51,5683,168 1,56832
ML-DSA-44FIPS 204 21,3122,560 2,420—
ML-DSA-65FIPS 204 31,9524,032 3,309—
ML-DSA-87FIPS 204 52,5924,896 4,627—
SLH-DSA-SHA2-128sFIPS 205 13264 7,856—
SLH-DSA-SHA2-128fFIPS 205 13264 17,088—
SLH-DSA-SHA2-192sFIPS 205 34896 16,224—
SLH-DSA-SHA2-192fFIPS 205 34896 35,664—
SLH-DSA-SHA2-256sFIPS 205 564128 29,792—
SLH-DSA-SHA2-256fFIPS 205 564128 49,856—
SLH-DSA-SHAKE-128sFIPS 205 13264 7,856—
SLH-DSA-SHAKE-128fFIPS 205 13264 17,088—
SLH-DSA-SHAKE-192sFIPS 205 34896 16,224—
SLH-DSA-SHAKE-192fFIPS 205 34896 35,664—
SLH-DSA-SHAKE-256sFIPS 205 564128 29,792—
SLH-DSA-SHAKE-256fFIPS 205 564128 49,856—

Sizes refer to the raw encodings defined by the standards. A private key stored as a seed may occupy less space than the full encoding shown here. Certificates, containers, Base64, protocol headers and protected storage add their own bytes. In SLH-DSA, ‘s’ favours smaller signatures and ‘f’ faster signing; SHA2 and SHAKE variants share sizes for each variant, rather than the same hash instantiation.

Estimate a volume of cryptographic data

Choose a parameter set and object count. The calculation adds raw public sizes only: one KEM ciphertext or signature per object, with a public key sent once or repeated for every object. Private keys and shared secrets are excluded from the modelled transfer.

A numerical example for planning a test

For 1,000 ML-KEM-768 objects with a public key for every object: 1,000 × (1,184 + 1,088) = 2,272,000 raw bytes. With one public key for the whole batch: 1,184 + 1,000 × 1,088 = 1,089,184 bytes. This is an illustrative transport assumption, not a service or protocol measurement.

This volume model measures neither computation time, throughput, TLS latency nor security. The single-key mode assumes the same recipient or verifier can reuse that key under the chosen protocol. Check this assumption, key rotation and size limits in your environment. This tool sends no content, keys or entered data.

What evidence should a pilot require?

What evidence should a pilot require?
Use to inventoryInformation to recordUseful test and decision condition
Exchanges and confidential dataApplication, protocol, library and version; key establishment function; data sensitivity lifetime; intermediary equipment.Replay connections on an authorised test platform, record errors and volumes, verify which peers actually interoperate and how to restore the approved configuration.
Software signing and updatesBuild chain, signed format, keys and embedded verifiers; ability to renew the root of trust.Verify a valid package and then a modified package. Measure the final manifest size and confirm that older devices have an update path.
Certificates and machine identitiesAuthorities, certificate profiles, signature algorithms, trust stores and external dependencies.Check issuance, renewal and revocation in the products concerned. Library support for an algorithm does not by itself prove support for the full certificate.
Backups, archives and retentionFormats, keys needed for restoration, custody responsibilities and versions able to read historical objects.Restore an old sample in the target environment and preserve the necessary verification material. Migrating connections does not automatically re-encrypt stored archives.

Decision questions

Does ML-KEM replace a signature?

No. Encapsulation establishes a shared secret. Signatures support checks of data integrity and origin under the chosen trust mechanism. A project may need to migrate these two functions separately.

Is the smallest object the best choice?

Size addresses one capacity constraint. Selection must also consider security requirements, maintained implementations, compatibility and test results. The comparison does not rank algorithms.

Is a product described as ‘FIPS 203’ automatically certified?

A standard reference identifies an algorithm specification. Request separate evidence of any claimed conformity or validation, its exact scope, the module version and the configuration assessed.

Why check publication status pages as well as the standard?

NIST status pages identify potential updates: notes dated 17 November 2025 for FIPS 203 and 31 July 2026 for FIPS 204 at this review. Ask suppliers which corrections their release incorporates.

Value provenance and freshness limits

Links lead to official publication notices and histories. Sizes come from the tables identified below; SLH-DSA private key sizes are calculated using the 4n rule in §3.1. Scope is limited to parameter sets in FIPS 203–205: this is not a catalogue of all post-quantum research, proposals or protocol profiles.

  • NIST FIPS 203 · ML-KEM · §8, tables 2–3; §8 security categories
    Standard publication : · Potential update note :
  • NIST FIPS 204 · ML-DSA · §4, tables 1–2
    Standard publication : · Potential update note :
  • NIST FIPS 205 · SLH-DSA · §11, table 2; §3.1: private key = 4n bytes
    Standard publication :

VEX and product applicability

VEX and SBOM: check the supplier assertion’s scope

An SBOM describes components; VEX expresses an impact status for a vulnerability and identified products. This reference uses OpenVEX v0.2.0 labels. It offers no automatic conversion to CSAF or CycloneDX, whose structures need reading in their own versions.

Issuer, product identity and time are essential to interpretation. Product or time information can be inherited under OpenVEX rules; an absent statement field does not necessarily mean missing information in the complete document. Check resolved values before concluding.

Four OpenVEX statuses and their scope

Four OpenVEX statuses and their scope
Exact statusAssertion meaningConsumer check
not_affectedThe specified product is declared not affected by this vulnerability.Require a justification or impact_statement under the OpenVEX structure; verify exact product identity and assessment conditions.
affectedActions are recommended to address the vulnerability.Read the action_statement required for this status and connect actions to installed versions.
fixedThe specified product versions contain a fix.Check that those versions are deployed and the service still works after the change.
under_investigationApplicability to the specified versions is not yet established.Preserve uncertainty and request an update; do not treat this as not_affected.

For not_affected, the OpenVEX structure requires a justification or impact_statement; the format recommends a machine-readable justification, optionally enriched by text. For affected, an action_statement is required. These fields document an assertion rather than automatically establishing issuer trust.

Five justifications requiring different evidence

Five justifications requiring different evidence
OpenVEX labelWhat the justification assertsProposed local evidence
component_not_presentThe component is not included in the product.Inventory of the exact build, dependencies and shipped contents, rather than a development dependency list alone.
vulnerable_code_not_presentThe component is included but the vulnerable code is absent.Build options, supplier patch and correspondence to the deployed artefact.
vulnerable_code_not_in_execute_pathThe vulnerable code cannot execute as used by the product.Execution-path analysis and assessed configurations; date assumptions needing review after change.
vulnerable_code_cannot_be_controlled_by_adversaryAn adversary cannot control the vulnerable code to exploit the flaw.Description of controllable inputs and demonstration limits. This assertion may be difficult to prove conclusively.
inline_mitigations_already_existBuilt-in product protections prevent exploitation under OpenVEX conditions.Check that attackers cannot subvert them and users cannot configure or disable them. Do not equate an external firewall rule with this justification.

Fictional JSON example: an assertion for build 2.4.0

A training example written for this reference, with identifier TRAINING-VULN-01 and an .example domain. It describes no real product or vulnerability, is unsigned and has not been validated by an OpenVEX compliance engine. Its single statement inherits the document timestamp.

{
    "@context": "https://openvex.dev/ns/v0.2.0",
    "@id": "https://vendor.example/vex/training-01",
    "author": "Fictional training publisher",
    "timestamp": "2026-10-22T10:00:00Z",
    "version": 1,
    "statements": [
        {
            "vulnerability": {
                "name": "TRAINING-VULN-01"
            },
            "products": [
                {
                    "@id": "https://vendor.example/products/gateway/2.4.0"
                }
            ],
            "status": "not_affected",
            "justification": "vulnerable_code_not_present",
            "impact_statement": "Fictional training statement: the affected code was excluded from this exact product build."
        }
    ]
}

This assertion concerns only the product identified as version 2.4.0. It does not automatically cover 2.3.0, another distribution or a different configuration. The code-exclusion assertion still needs comparison with evidence and the trust placed in the issuer.

Six checks before using VEX to reduce alerts

  • Identify the issuer and how the document was obtained; separate provenance, any signature and trust.
  • Resolve product, subcomponents and identifiers to the deployed build.
  • Check vulnerability identity and aliases rather than matching flaws by similar titles.
  • Read status, required justifications or actions and product-specific conditions.
  • Resolve inherited times and preserve document version; product changes may invalidate an older assumption.
  • Record the acceptance decision, owner and conditions triggering review.

Return to prioritisation signals and remediation evidence →

Primary sources and scope

  • OpenVEX · Specification v0.2.0 · OpenVEX v0.2.0 · reviewed 2026-10-22
    Statement Data Structure · Status Labels · Status Justifications · Data Inheritance

Sources checked on

Build signatures and provenance

Connect delivery records to deployed bytes

An SBOM, VEX and provenance can accompany one release while carrying different information. Preserve their binding to the exact package and the expectations used to accept its origin.

  • Match artefact digest to attested subject; preserve the reference from receipt through promotion to deployment.
  • Check authorised identity, builder, repository and parameters rather than concluding from signature presence alone.
  • Retain behaviour and recovery checks: an authentic package can still regress.

Read the pre-deployment provenance reference →

Sources checked on · SLSA 1.2 · Build: Verifying artifacts · SLSA 1.2 · Build: Provenance · SLSA 1.2 · Build: Track Basics · in-toto · Statement v1 · Sigstore · Verifying Signatures

Explore the CISA KEV catalogue

One identifier can span several technical layers

An entry may concern a library, server or component embedded in an appliance. Search the exact name, known dependencies and the distributed product’s advisory. Catalogue aliases are not a complete list of affected versions.

  • Connect the CVE, component supplier and final-product supplier.
  • Check version, configuration and execution path in the authorised environment.
  • Do not infer remediation from an empty search result.

Explore the catalogue and method →

CISA KEV · 2026.11.06 · Documentary review : 2026-11-07

Official references

References consulted: . The method and worksheet propose checks to adapt to your context; they do not constitute certification.