<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>SPDX | Haksung</title><link>https://haksungjang.github.io/en/tags/spdx/</link><description>Haksung Jang — Open Source Program Manager at SK telecom</description><generator>Hugo</generator><language>en-US</language><lastBuildDate>Sun, 09 Aug 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://haksungjang.github.io/en/tags/spdx/index.xml" rel="self" type="application/rss+xml"/><item><title>CISA 2026 SBOM Minimum Elements: What to Prepare and Which Tools Fill the Gaps</title><link>https://haksungjang.github.io/en/research/2026-cisa-sbom-minimum-elements/</link><pubDate>Sun, 09 Aug 2026 00:00:00 +0000</pubDate><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Haksung Jang</dc:creator><guid>https://haksungjang.github.io/en/research/2026-cisa-sbom-minimum-elements/</guid><description>An analysis of the revised SBOM minimum elements published on July 29, 2026 by CISA and 17 other agencies. The data fields grew from 7 to 17, and licensing entered the minimum baseline for the first time. Covers what an OSPO must decide before selecting a tool, how SBOM formats differ in their support, and how far the open source tool BomLens gets today.</description><content:encoded>&lt;![CDATA[<div class="alert alert-info" role="alert"><p>This article was written with Claude Code, and the key facts cited here were cross-checked against primary sources.</p></div><h2 id="summary">Summary</h2><p>On July 29, 2026, the Cybersecurity and Infrastructure Security Agency (CISA) and 17 other agencies published a revised set of minimum elements for a Software Bill of Materials (SBOM)[A2]. The document states plainly that it replaces, rather than amends, the baseline established in 2021 by the National Telecommunications and Information Administration (NTIA).</p><p>The bar has risen noticeably. The data fields grew from 7 to 17, and six operational practices were specified alongside them. Ten of the elements are entirely new.</p><p>Three changes matter most in practice.</p><ul><li>Licensing entered the SBOM minimum baseline for the first time.</li><li>Dependencies must now be recorded in full, down to transitive dependencies, with no depth limit.</li><li>New fields were added to declare the origin and integrity of the SBOM document itself.</li></ul><p>The document carries no effective date and no enforcement power. Preparation is still warranted, because national regulations increasingly require SBOMs without enumerating the fields those SBOMs must contain. The practical significance of this document is that it gives procurement contracts a multilateral consensus baseline to cite.</p><p>The nature of that preparation is easy to misjudge. Meeting the minimum elements is not a matter of picking a tool. Fewer than half of the 23 elements can be filled by a generation tool on its own. The rest are filled by the build pipeline, the signing infrastructure, and policies the organization decided on in advance.</p><p>I also checked how far an actual tool gets. BomLens is an SBOM generation and management tool that SK telecom developed for software supply chain security and released as open source. Assessing all 23 elements with it produced the following:</p><ul><li>The tool fills 11 of the 17 data fields directly with values.</li><li>It inspects supplier-submitted SBOMs against all 23 elements, separating out the 4 that the organization must decide as items for human review.</li><li>The remaining gaps exist not because the tool is deficient, but because those values must be determined by whoever runs it or by the build stage at which it runs.</li></ul><p>The assessment screen can be viewed directly in the<a href="https://sktelecom.github.io/bomlens/demo/#/scan/FlaskDataService_3.2.0/conformance">public demo</a>, with nothing to install.</p><h2 id="1-what-changed">1. What Changed</h2><h3 id="11-the-structure-of-the-elements">1.1 The Structure of the Elements</h3><p>The minimum elements fall into two categories. Seventeen data fields are the values actually carried in the SBOM document; six operational practices govern how an organization handles SBOMs.</p><p><img src="/research/2026-cisa-sbom-minimum-elements/elements-structure-en.png" alt="The composition of the 23 CISA 2026 minimum elements. The 17 data fields split into 9 SBOM metadata items and 8 component data items, with 6 operational practices alongside them. Seven of the 10 new elements are concentrated on the metadata side"/><p><strong>Figure 1.</strong> The composition of the CISA 2026 SBOM minimum elements<em>(source: 2026 Minimum Elements for a SBOM, 2026-07-29)</em></p><p>SBOM metadata is a category that did not exist in the 2021 edition. Where the earlier baseline asked for little more than an author and a timestamp, the document now requires the SBOM to declare for itself which tool produced it, when, at what stage, and who signed it.</p><h3 id="12-three-substantive-changes">1.2 Three Substantive Changes</h3><p><strong>Licensing became mandatory.</strong> The seven data fields of the 2021 edition did not include licensing, because that document was aimed at security and vulnerability management. The revision adds component licensing as a new element, requiring that it be conveyed in a machine-processable form such as an SPDX license identifier where possible, and that the presence of proprietary license terms be disclosed as well. Territory that belonged to the Open Source Program Office (OSPO) is now part of the SBOM minimum baseline.</p><p><strong>The floor on dependency resolution is gone.</strong> The Depth element of the 2021 edition required only top-level dependencies. The revision replaces it with a Coverage element that requires all constituent components including transitive dependencies, and states explicitly that recording only to a certain depth is no longer sufficient. The document is candid about why. The 2021 baseline &ldquo;reflected the capabilities of SBOM tooling at the time rather than the depth of information needed for informed security decisions,&rdquo; and since tooling has advanced in the interim, the requirement has been raised.</p><p><strong>Supplier Name became Component Producer.</strong> This is a change of definition, not merely of label. The document states that Supplier Name &ldquo;proved ambiguous in practice, particularly in relation to software distributors.&rdquo; The intent is to end the practice of naming redistributors and to point the field at the entity that originally created the software. Where the producer is unclear, as with open source projects, the document requires that the unknown provenance be stated explicitly.</p><p>Separately, Software Identification (SWID) tags were dropped from the list of accepted formats. Two remain: SPDX and CycloneDX.</p><h2 id="2-what-the-ospo-must-decide">2. What the OSPO Must Decide</h2><p>The six operational practices are items an organization must answer, not a tool. The document says as much: organizations &ldquo;should explicitly address these elements in all policies, contracts, and agreements that require or provide SBOMs.&rdquo;</p><h3 id="21-how-much-to-include">2.1 How Much to Include</h3><p>The Coverage element requires all transitive dependencies while permitting the exclusion of non-code files. It adds that security-relevant files, such as configuration files, may be included. Where to draw the line on security relevance is for the organization to decide.</p><p>The vulnerability management test offered by the document is a useful criterion: an SBOM recipient should be able to conclude that a newly reported vulnerability does not affect them if the associated component is absent from the list. A scope definition that fails this test does not satisfy the Coverage requirement.</p><p>Linking each subcomponent to a separate SBOM is also permitted, but with a condition. The recipient must be able to access every linked SBOM. Providing links without access rights does not meet the requirement.</p><h3 id="22-when-to-regenerate">2.2 When to Regenerate</h3><p>The Frequency element requires a corresponding SBOM for each software version or update. Every new build or release calls for a new SBOM, and that includes builds where only dependencies changed.</p><p>One more obligation attaches here. If errors are found in existing SBOM data, or new facts about a component come to light, a revised edition must be issued. This means an SBOM may need to be reissued without any accompanying release, which in turn requires a way to track where already-distributed SBOMs went.</p><h3 id="23-how-to-record-what-is-not-known">2.3 How to Record What Is Not Known</h3><p>Explicit identification of unknowns is a major update. The requirement is specific: when a value is absent, it must be clear whether the information is unknown to the author or whether the author is knowingly withholding it.</p><p>The distinction conveys different information to the recipient. Unknown means the supply chain trace broke off at that point; withheld means the supplier has the information and is not providing it. For the latter case, the document requires a process through which recipients can inquire, and adds that an SBOM withholding essential component data may be treated as incomplete.</p><p>In practice, the notation convention has to be settled first. Simply leaving a field empty makes the three cases indistinguishable: whether the value does not exist, was never confirmed, or was deliberately not disclosed.</p><h3 id="24-which-formats-to-accept">2.4 Which Formats to Accept</h3><p>The machine-readable data element names SPDX and CycloneDX while directing organizations to accept widely used, interoperable formats. One condition attaches: SBOMs for new software generated with deprecated versions should not be accepted.</p><p>That condition creates a second acceptance criterion. Format version matters as much as format name, and the new SBOM data format name and version elements provide the basis for that judgment.</p><h3 id="25-what-to-put-in-contracts">2.5 What to Put in Contracts</h3><p>Translated into contract language, the items above come out as follows.</p><ul><li>The required format and minimum version</li><li>The coverage scope, including transitive dependencies</li><li>The obligation to supply an SBOM with each release, and to supply a revision when errors are found</li><li>Distinct notation for unknown versus withheld, and an inquiry process for withheld items</li></ul><p>The three actions the document recommends to organizations point the same way: require SBOMs that satisfy the updated minimum elements, use tooling to generate, collect, and analyze SBOM data, and generate SBOMs that satisfy the minimum elements themselves.</p><h2 id="3-who-fills-each-element">3. Who Fills Each Element</h2><p>Sorting the 23 elements by who fills them clarifies what preparation actually involves.</p><p><img src="/research/2026-cisa-sbom-minimum-elements/who-fills-what-en.png" alt="The four domains that fill the 23 minimum elements. On the left are the items handled by the SBOM generation tool; on the right are the three domains outside the tool — the build pipeline, the signing infrastructure, and organizational policy"/><p><strong>Figure 2.</strong> The four domains that fill the 23 minimum elements<em>(source: compiled from the element definitions in the original document)</em></p><p>What a generation tool can handle alone sits on the component data side. The rest must be filled from outside the tool.</p><p><strong>Generation context</strong> must be recorded inside the build pipeline to be accurate. An SBOM built from source corresponds to &ldquo;pre-build&rdquo; and one built from binary analysis to &ldquo;post-build&rdquo; — a value determined by when the scan runs, not by what it scans.</p><p><strong>Component hashes</strong> require an executable artifact to compute. At source-scan time that artifact does not yet exist, making it inherently impossible, and the document itself prescribes an unknown marking for this case. Requiring hashes means generating or updating the SBOM at a post-build stage.</p><p><strong>Author signatures</strong> presuppose key management. The document directs organizations to use existing software signing infrastructure and key management, which falls outside the scope of an SBOM tool.</p><p><strong>SBOM Author</strong> is a value the tool cannot know. Since the definition is the entity operating the tool, whoever runs it has to supply it.</p><h3 id="31-which-formats-carry-the-new-elements">3.1 Which Formats Carry the New Elements</h3><p>Formats differ in how far they carry the 10 new fields, which makes the choice of format itself a practical decision[C3].</p><table><thead><tr><th>Element</th><th>CycloneDX 1.6</th><th>SPDX 2.3</th><th>SPDX 3.0</th></tr></thead><tbody><tr><td>SBOM generation context</td><td><code>metadata.lifecycles[].phase</code></td><td>No dedicated field</td><td><code>software_Sbom.sbomType</code></td></tr><tr><td>SBOM author signature</td><td>Built into root<code>signature</code></td><td>Not specified in the document</td><td>No signature class</td></tr><tr><td>SBOM version</td><td>Integer +<code>serialNumber</code></td><td>Handled as a change of document identity</td><td>Document identity +<code>amendedBy</code></td></tr><tr><td>SBOM tool version</td><td><code>tools.components[].version</code></td><td>Embedded in the creator string</td><td>No dedicated property</td></tr><tr><td>Unknown notation</td><td>No global marker; convention required</td><td><code>NOASSERTION</code></td><td><code>NOASSERTION</code></td></tr></tbody></table><p><strong>Table 1.</strong> How each format can express the new elements<em>(source: RunSafe Security field mapping analysis, 2026)</em></p><p>CycloneDX has the advantage on the new metadata. Generation context and signatures exist as native fields, and the lifecycle phase vocabulary the original document uses as an example maps across directly.</p><p>Conversely, SPDX offers the better mechanism for marking unknowns. Its standard<code>NOASSERTION</code> marker distinguishes &ldquo;no value&rdquo; from &ldquo;not determined,&rdquo; whereas CycloneDX has no marker at that level, requiring a separate convention using properties or annotations. And marking unknowns is precisely one of the requirements this revision strengthened.</p><p>The judgment at this point is as follows. The combination that carries the minimum elements most completely is CycloneDX 1.6, provided the organization establishes its own convention for marking unknowns. Organizations using SPDX as their primary format have no place in 2.3 for generation context or signatures, which makes this the moment to consider migrating to 3.0.</p><h2 id="4-relationship-to-regulation">4. Relationship to Regulation</h2><p>The minimum elements carry no legal force in themselves. The disclaimer states that the publication &ldquo;is not intended as compliance, regulatory, or legal advice.&rdquo;</p><p>Its real influence comes through citation. The European Union Cyber Resilience Act (Regulation (EU) 2024/2847) requires manufacturers to provide an SBOM as part of the technical documentation, but does not enumerate the fields in its text[A5]. Germany&rsquo;s BSI TR-03183-2 filled that gap with concrete technical requirements, and India&rsquo;s CERT-In and Japan&rsquo;s Ministry of Economy, Trade and Industry have issued guidance of their own. The minimum elements are the baseline these all reference in common.</p><p>One caution applies. Although the European Commission&rsquo;s Directorate-General for Communications Networks, Content and Technology (DG CONNECT) contributed to the drafting, a footnote states that the document does not interpret European Union law, does not bind the Commission, and that not all of its elements reflect Union law. It cannot be used as-is to demonstrate Cyber Resilience Act compliance.</p><p>There is also a terminological trap. A footnote in the original explicitly warns against confusing the &ldquo;producer&rdquo; of Component Producer with the &ldquo;manufacturer&rdquo; of the Cyber Resilience Act. Every manufacturer is a producer, but not every producer is a manufacturer. Documents that address both regimes need to keep the terms distinct.</p><p>From Korea, two organizations participated as co-authors: the National Cyber Security Center under the National Intelligence Service, and the Korea Internet &amp; Security Agency. That participation gives domestic procurement and internal policy a basis for citing this document. Because the international common baseline was updated immediately after the government&rsquo;s joint Software Supply Chain Security Roadmap was announced in June 2026, domestic policy now has a reference to draw on when it comes to specifying required fields.</p><p>Organizations working with AI systems should note the ordering. The original document introduces no AI-specific elements, deferring them to the G7 joint guidance[A10]. The two documents are hierarchical: fill this general software baseline first, then add the AI-specific elements.</p><h2 id="5-how-far-do-actual-tools-get-today">5. How Far Do Actual Tools Get Today</h2><p>Reading a baseline and confirming that a tool actually meets it are separate exercises. Even when a format has a place for a value, the field stays empty if the tool does not put one there.</p><p>I assessed all 23 elements using BomLens, the SBOM generation and management tool that SK telecom developed for software supply chain security and released as open source. The basis was actual scan output and source code rather than estimation[D1].</p><h3 id="51-what-the-tool-fills-with-values">5.1 What the Tool Fills with Values</h3><p>The tool fills 11 of the 17 data fields directly.</p><ul><li>SBOM metadata: data format name and version, generation context, timestamp, tool name, SBOM version</li><li>Component data: name, version, identifier, license, dependency relationships</li></ul><p>Three of these are filled in ways that bear directly on the minimum element requirements.</p><ul><li>Generation context is determined automatically from the input type. Source scans are recorded as<code>pre-build</code> and container and binary scans as<code>post-build</code>, so the user never selects the value.</li><li>Licensing is filled for 98.4% of components on the source path and 94.7% on the container path. The source side reads from package manifests, the container side from the operating system package database.</li><li>The tool name records both BomLens itself and its underlying generators. The minimum elements ask for the tools that generated or modified the SBOM, so both are retained.</li></ul><p>Among the six operational practices, it satisfies machine-readability and distribution and delivery. It emits CycloneDX 1.6 as its default format and supports conversion to SPDX 2.3, covering both formats the minimum elements designate.</p><h3 id="52-what-the-tool-cannot-fill">5.2 What the Tool Cannot Fill</h3><p>The remaining items are empty not because the tool falls short, but because of the structure described in section 3.</p><ul><li>SBOM author and author signature: the entity running the tool must supply the value. The author is passed via<code>--sbom-author</code>, and signing is a separate option that uses cosign.</li><li>Component hash: at source-scan time no executable artifact exists to hash. On paths where an artifact does exist, such as containers and firmware, the scan target itself is hashed.</li><li>Component producer: the package metadata must carry producer information for this to be filled. Coverage is 60.9% on the source path and 94.7% on the container path.</li></ul><p>How the absence of a value is handled matters from the minimum elements perspective. When no author is specified, this tool does not write<code>unknown</code>; it leaves the field empty and adds a document-level declaration that empty fields were not determined by the author. Because the minimum elements define the author as the entity operating the tool, and that entity knows who it is, a tool writing<code>unknown</code> would not be marking an unknown but making a false statement. Hashes follow the same principle: no value is invented.</p><h3 id="53-assessing-received-sboms-against-the-minimum-elements">5.3 Assessing Received SBOMs Against the Minimum Elements</h3><p>The tool can also inspect supplier-submitted SBOMs against all 23 elements. Results come out in three branches.</p><p><img src="/research/2026-cisa-sbom-minimum-elements/bomlens-conformance.png" alt="The regulatory comparison table in a BomLens conformance report. The US SBOM minimum elements row shows 13 met, 6 not met, 0 failed, and 4 requiring human review out of 23 total elements"/><p><strong>Figure 3.</strong> The conformance assessment screen. All 23 elements are assessed, with the 4 the tool cannot judge separated out for human review<em>(BomLens 1.10.3 output, 2026-08-09)</em></p><ul><li>Met, 13 — the 11 data fields plus 2 operational practices.</li><li>Not met, 6 — the items covered in section 5.2.</li><li>Human review, 4 — Coverage, Accommodation of Updates to SBOM Data, Distribution and Delivery, and Frequency. These are decided by the organization, so the tool passes them to a person rather than judging them.</li></ul><p>Not treating what it cannot judge as a pass is what makes this useful in practice. The four items marked for human review are the same organizational decisions covered in section 2.</p><p>The same screen can be opened directly in the<a href="https://sktelecom.github.io/bomlens/demo/#/scan/FlaskDataService_3.2.0/conformance">public demo</a>. It runs in a browser with nothing to install, and each element carries a note on what is missing and how to fill it. Note that the demo shows the result of inspecting a supplier-submitted SBOM, so its subject differs from the figure above.</p><h3 id="54-what-remains">5.4 What Remains</h3><p>Some gaps remain before the minimum elements are fully met.</p><ul><li>The tool version is recorded as an image tag rather than a release number. The minimum elements call for a value that identifies a specific delivery of code.</li><li>The SBOM version stays fixed at 1 across regenerations and cannot express revision relationships. This connects directly to the accommodation of updates element, but a locally running tool cannot know where its previous output went, which makes user-specified versioning the realistic alternative.</li></ul><h2 id="6-conclusion">6. Conclusion</h2><p>What the revised minimum elements demand is not more fields but a different kind of preparation.</p><p>With licensing in the minimum baseline, the SBOM is no longer a document belonging to the security team alone. Filling in license identifiers in machine-processable form, disclosing the presence of proprietary terms, and stating plainly when something is not known — this is how an OSPO already works. What changed is that the result now has to leave the organization in a standard format.</p><p>Much of the preparation has to be finished before a tool is selected. Four items are for the organization to decide.</p><ul><li>How much to include</li><li>When to regenerate</li><li>How to mark what is not known</li><li>Which formats and versions to accept</li></ul><p>Adopt a tool without settling these, and whatever defaults the tool produces become the organization&rsquo;s policy.</p><p>It is equally necessary to separate what can be demanded of a tool from what cannot. A source-scanning tool cannot be asked for the hash of an executable artifact, and no tool can decide an organization&rsquo;s name on its behalf. Demand that unfillable values be filled and the tool will invent plausible ones, which is the direction the minimum elements prohibit.</p><p>Checking what your current tool fills and what it leaves empty is worth doing once. Format support and field satisfaction are different questions, and the gap between them only shows when you open the output yourself. If there is no obvious tool at hand to check, BomLens from section 5 is a starting point. It is open source and free to download, and it shows both how far a generated SBOM meets the 23 elements and whether a supplier-submitted SBOM meets the baseline, on the same screen.</p><h2 id="references">References</h2><p><strong>A2.</strong> Cybersecurity and Infrastructure Security Agency and 17 other agencies (2026).<em>2026 Minimum Elements for a Software Bill of Materials (SBOM)</em>. v2.1, published July 29, 2026, TLP:CLEAR.<a href="https://www.cisa.gov/sites/default/files/2026-07/2026_cisa_sbom_minimum_elements_508c.pdf">https://www.cisa.gov/sites/default/files/2026-07/2026_cisa_sbom_minimum_elements_508c.pdf</a>.</p><p><strong>A5.</strong> European Parliament and Council (2024).<em>Regulation (EU) 2024/2847 — Cyber Resilience Act</em>. Official Journal of the European Union, October 23, 2024.<a href="https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=OJ:L_202402847">https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=OJ:L_202402847</a>.</p><p><strong>A10.</strong> CISA and G7 partners (2026).<em>Software Bill of Materials for AI – Minimum Elements</em>. May 2026. — Covered in detail in the<a href="/en/research/2026-g7-sbom-for-ai/">G7 SBOM for AI Minimum Elements</a> report.</p><p><strong>A1.</strong> National Telecommunications and Information Administration (2021).<em>The Minimum Elements For a Software Bill of Materials (SBOM)</em>. Published July 12, 2021.<a href="https://www.ntia.gov/report/2021/minimum-elements-software-bill-materials-sbom">https://www.ntia.gov/report/2021/minimum-elements-software-bill-materials-sbom</a>.</p><p><strong>A3.</strong> Federal Register (2025).<em>Request for Comment on 2025 Minimum Elements for a Software Bill of Materials</em>. Published August 22, 2025; comment period closed October 3, 2025.<a href="https://www.federalregister.gov/documents/2025/08/22/2025-16147/request-for-comment-on-2025-minimum-elements-for-a-software-bill-of-materials">https://www.federalregister.gov/documents/2025/08/22/2025-16147/request-for-comment-on-2025-minimum-elements-for-a-software-bill-of-materials</a>.</p><p><strong>B1.</strong> SPDX.<em>The System Package Data Exchange</em>.<a href="https://spdx.dev/">https://spdx.dev/</a>. ISO/IEC 5962:2021.</p><p><strong>B2.</strong> CycloneDX.<a href="https://cyclonedx.org/">https://cyclonedx.org/</a>. Ecma International,<em>ECMA-424: CycloneDX Bill of Materials Specification</em>, December 2025.</p><p><strong>C3.</strong> RunSafe Security (2026).<em>Mapping CISA&rsquo;s 2026 SBOM Minimum Elements to CycloneDX and SPDX</em>.<a href="https://runsafesecurity.com/blog/sbom-minimum-elements-cyclonedx-spdx/">https://runsafesecurity.com/blog/sbom-minimum-elements-cyclonedx-spdx/</a>. — The basis for Table 1. The per-format field mapping is taken from this analysis and was not verified directly against the specifications.</p><p><strong>D1.</strong> BomLens. An SBOM generation and management tool developed and released by SK telecom for software supply chain security, Apache-2.0.<a href="https://github.com/sktelecom/bomlens">https://github.com/sktelecom/bomlens</a>. The coverage assessment in section 5 was determined from actual scan output and source code using version 1.10.3 of this tool.</p>
]]></content:encoded></item><item><title>Enterprise AI BOM Field Requirements Matrix — Required and Optional Fields Defined by Standards and Regulatory Grounds</title><link>https://haksungjang.github.io/en/research/2026-ai-bom-requirements/</link><pubDate>Mon, 29 Jun 2026 00:00:00 +0000</pubDate><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Haksung Jang</dc:creator><guid>https://haksungjang.github.io/en/research/2026-ai-bom-requirements/</guid><description>Weighs the 50 elements of the G7 "SBOM for AI — Minimum Elements" against authoritative standards — SPDX 3.0.1, CycloneDX 1.6, NTIA 2021, OpenChain AI V1 — and regulatory grounds including the CRA, the AI Act, and FDA guidance, to determine which AI BOM fields are required and which are optional. Part of a five-part series that also applies the same matrix to production, ingestion, and supplier contexts and covers toolset strategy.</description><content:encoded>&lt;![CDATA[<div class="alert alert-info" role="alert"><p>This article was written with Claude Code, and the key facts cited here were cross-checked against primary sources.</p></div><h2 id="1-purpose-and-context-of-use">1. Purpose and Context of Use</h2><p>Enterprise open source governance programs have already reached the stage of mandating that suppliers submit a Software Bill of Materials (SBOM) and of operating concrete submission requirements. AI systems need the same transparency requirement extended to models and datasets, but existing SBOM requirements cover only software components and cannot capture AI-specific information. This report defines, using international standards and regulatory grounds, which fields a bill of materials for AI (hereafter AI BOM) should require and which it should treat as optional.</p><p>A note on why AI BOM is used as the umbrella term here. Three of the sources compared below call the same thing by different names. The G7 Cybersecurity Working Group, whose element list this report draws on, calls it SBOM for AI; the OpenChain project calls it AI SBOM; CycloneDX calls it a Machine Learning Bill of Materials (ML-BOM). Of the remaining two, SPDX expresses it as an AI profile rather than a separate abbreviation, and the NTIA minimum elements predate AI and cover the general SBOM. Elevating any one of these to represent the rest would misname the others, so what follows uses AI BOM for the general concept and reproduces each standard&rsquo;s own term only when referring to that standard specifically.</p><p>The fields assessed here are the 50 elements of &ldquo;SBOM for AI — Minimum Elements,&rdquo; published by the G7 Cybersecurity Working Group. Using these 50 as rows, this report compares the requirement strength of five authoritative standards to sort each element into required or optional.</p><p>The same matrix is applied differently across three enterprise usage contexts.</p><ul><li>Production: the fields an in-house AI model development team must fill in when authoring an AI BOM directly.</li><li>Ingestion: the fields that must be checked to assess transparency and risk when bringing in and using an external model or dataset.</li><li>Supplier requirements: the fields to require submission of from suppliers that provide AI models to the organization.</li></ul><p><img src="/research/2026-ai-bom-requirements/role-scope-en.png" alt="How each of the three roles redraws the boundary of required starting from the consensus determination. Production keeps the 20 consensus-required elements as is; ingestion lowers document metadata but raises a set of risk-judgment fields to reach 15 required; supplier requirements raises two more to reach 20 required"/><p><strong>Figure 1.</strong> How the boundary of required shifts by role for the same matrix<em>(compiled from research)</em></p><h2 id="2-methodology">2. Methodology</h2><h3 id="21-sources-used-for-consensus-tallying">2.1 Sources Used for Consensus Tallying</h3><p>Whether each field is required is determined by summing the requirement strength of the following five sources.</p><ul><li>G7 &ldquo;SBOM for AI — Minimum Elements&rdquo; (G7, jointly led by the BSI and the ACN, 2026): recommends all 50 elements as &ldquo;minimum elements.&rdquo; Because it does not distinguish required from optional at the element level, this matrix credits G7 with one vote of &ldquo;designated as a minimum element&rdquo; for every element.</li><li>SPDX 3.0.1: the specification directly defines the cardinality (whether required) of each property in the AI Profile&rsquo;s<code>AIPackage</code>, the Dataset Profile&rsquo;s<code>DatasetPackage</code>, and the common classes in Core.</li><li>CycloneDX 1.6: required fields are defined by the<code>required</code> array in the JSON schema.</li><li>NTIA &ldquo;The Minimum Elements For a Software Bill of Materials (SBOM)&rdquo; (2021): defines the seven baseline data fields for a general software SBOM.</li><li>OpenChain AI Compliance Management Guide (Version 1, 2025): a process standard that does not define data fields, but whose license obligation procedures mandate identifying and documenting model and dataset licenses.</li></ul><h3 id="22-determination-rule">2.2 Determination Rule</h3><p>A field is determined required if two or more sources require the field&rsquo;s existence itself, and optional otherwise. Since G7 gives one vote to every element, the determination in practice comes down to whether at least one other source requires the field&rsquo;s existence.</p><p>Requiring existence here means class-level required cardinality (the required properties of SPDX&rsquo;s<code>AIPackage</code>/<code>DatasetPackage</code>), document-root requirements (CycloneDX&rsquo;s<code>bomFormat</code>/<code>specVersion</code>), the seven NTIA baseline fields, and OpenChain&rsquo;s shall-level process. Conditional requirements enforced only when an object is created — for example, the algorithm and value inside a hash object, or the name inside a component object — are not requirements to include the object itself, so they were not counted as existence requirements. However, these conditional requirements and items of high integrity or security value were left optional while being marked recommended in the role-based application.</p><p><img src="/research/2026-ai-bom-requirements/consensus-rule-en.png" alt="Of the five sources, G7 always gives one vote to every element, so the determination in practice comes down to whether any one of the remaining four — SPDX, CycloneDX, NTIA, or OpenChain — requires it"/><p><strong>Figure 2.</strong> The consensus determination rule and G7&rsquo;s role in it<em>(compiled from research)</em></p><p>Applying this rule yields 20 required and 30 optional elements out of the 50.</p><h3 id="23-marking-regulatory-basis">2.3 Marking Regulatory Basis</h3><p>Whether a binding regulation applies to a given field is marked on a separate axis, not folded into the consensus tally, because no regulation mandates an AI BOM under that name. The Cyber Resilience Act (CRA) requires a general software SBOM; the AI Act, U.S. Food and Drug Administration (FDA) guidance, and domestic regimes require documentation obligations.<code>Direct</code> marks a case where the regulation explicitly requires that item;<code>Indirect</code> marks a case where the item is not itself an SBOM requirement but a documentation or vulnerability-handling obligation effectively requires the same information.</p><h2 id="3-overview-of-the-consensus-results">3. Overview of the Consensus Results</h2><p>The distribution of required and optional elements by cluster is as follows.</p><table><thead><tr><th>Cluster</th><th>Elements</th><th>Required</th><th>Optional</th></tr></thead><tbody><tr><td>Metadata</td><td>10</td><td>5</td><td>5</td></tr><tr><td>System-Level Attributes</td><td>9</td><td>4</td><td>5</td></tr><tr><td>Model</td><td>13</td><td>6</td><td>7</td></tr><tr><td>Dataset Attributes</td><td>10</td><td>5</td><td>5</td></tr><tr><td>Infrastructure</td><td>2</td><td>0</td><td>2</td></tr><tr><td>Security Attributes</td><td>4</td><td>0</td><td>4</td></tr><tr><td>Key Performance Indicators</td><td>2</td><td>0</td><td>2</td></tr><tr><td>Total</td><td>50</td><td>20</td><td>30</td></tr></tbody></table><p><img src="/research/2026-ai-bom-requirements/cluster-distribution-en.png" alt="Horizontal bars showing the distribution of required and optional elements by cluster. Metadata, System, Model, and Dataset each contain required elements, but Infrastructure, Security Attributes, and Key Performance Indicators have none"/><p><strong>Figure 3.</strong> Required/optional distribution by cluster<em>(compiled from research)</em></p><p>The 20 elements determined required are all foundational to identification and traceability: who made it (author, producer), what it is (name, identifier, version), when it was made (timestamp), what it is composed of (components, dependency relationships, dataset content), and what license applies (model and dataset licenses). Two or more standards consistently require the existence of this information.</p><p>By contrast, detailed model attributes (architecture, training technique, input/output characteristics), dataset statistics and sensitivity, security controls, and key performance indicators fall to optional because only G7 lists them as minimum elements and no other standard mandates their existence. These items are optional by consensus, but because they are used directly for transparency and risk assessment in the ingestion and supplier-requirement contexts, they are raised again in the role-based application.</p><p>One structural point is worth noting. The required determination in the AI-specific clusters (Model, Dataset) is effectively driven by G7 and SPDX 3.0. NTIA, being a general software SBOM standard, contributes only to metadata and the identification lineage; OpenChain defines no fields beyond licensing; and CycloneDX makes everything but its two root fields conditionally required. SPDX 3.0&rsquo;s AI and Dataset profiles are, in effect, still the only field-level standard for AI BOM with any real density.</p><h2 id="4-field-matrix">4. Field Matrix</h2><p>The notation conventions are as follows. The source columns use<code>Required</code> (existence required),<code>Conditional</code> (enforced only when the object is created),<code>Approximate</code> (no dedicated field; handled through a relationship or a general property instead),<code>Optional</code>, and<code>–</code> (no equivalent). OpenChain&rsquo;s<code>Required (P)</code> denotes process enforcement rather than a data field. The role columns use<code>Required</code>,<code>Recommended</code>,<code>Optional</code>, and<code>–</code>; given table width, the Production, Ingestion, and Supplier role columns are broken out into the §4.6 role-based application summary table.</p><h3 id="41-metadata-cluster">4.1 Metadata Cluster</h3><table><thead><tr><th>Element</th><th>SPDX 3.0</th><th>CycloneDX</th><th>NTIA</th><th>OpenChain</th><th>Consensus</th><th>Regulatory Basis</th></tr></thead><tbody><tr><td>SBOM Author</td><td>Required</td><td>Approximate</td><td>Required</td><td>–</td><td>Required</td><td>FDA direct</td></tr><tr><td>SBOM Version</td><td>–</td><td>Optional</td><td>–</td><td>–</td><td>Optional</td><td>–</td></tr><tr><td>Data Format Name</td><td>Implicit</td><td>Required</td><td>Required</td><td>–</td><td>Required</td><td>CRA/FDA indirect</td></tr><tr><td>Data Format Version</td><td>Required</td><td>Required</td><td>Optional</td><td>–</td><td>Required</td><td>–</td></tr><tr><td>Author Signature</td><td>–</td><td>Optional</td><td>–</td><td>–</td><td>Optional</td><td>domestic indirect</td></tr><tr><td>Tool Name</td><td>Optional</td><td>Conditional</td><td>–</td><td>–</td><td>Optional</td><td>–</td></tr><tr><td>Tool Version</td><td>–</td><td>Optional</td><td>–</td><td>–</td><td>Optional</td><td>–</td></tr><tr><td>Generation Context</td><td>Optional</td><td>Optional</td><td>–</td><td>–</td><td>Optional</td><td>–</td></tr><tr><td>SBOM Timestamp</td><td>Required</td><td>Optional</td><td>Required</td><td>–</td><td>Required</td><td>FDA direct</td></tr><tr><td>Dependency Relationships</td><td>Conditional</td><td>Conditional</td><td>Required</td><td>–</td><td>Required</td><td>CRA/FDA direct</td></tr></tbody></table><h3 id="42-system-level-attributes-cluster">4.2 System-Level Attributes Cluster</h3><table><thead><tr><th>Element</th><th>SPDX 3.0</th><th>CycloneDX</th><th>NTIA</th><th>OpenChain</th><th>Consensus</th><th>Regulatory Basis</th></tr></thead><tbody><tr><td>System Name</td><td>Required</td><td>Conditional</td><td>Required</td><td>Implied</td><td>Required</td><td>AI Act/FDA indirect</td></tr><tr><td>System Components</td><td>Approximate</td><td>Conditional</td><td>Required</td><td>Implied</td><td>Required</td><td>FDA direct, CRA indirect</td></tr><tr><td>System Producer</td><td>Optional</td><td>Conditional</td><td>Required</td><td>–</td><td>Required</td><td>FDA direct, AI Act indirect</td></tr><tr><td>System Version</td><td>Optional</td><td>Conditional</td><td>Required</td><td>–</td><td>Required</td><td>FDA direct, AI Act indirect</td></tr><tr><td>System Timestamp</td><td>Optional</td><td>Optional</td><td>–</td><td>–</td><td>Optional</td><td>–</td></tr><tr><td>System Data Flow</td><td>–</td><td>Optional</td><td>–</td><td>–</td><td>Optional</td><td>AI Act indirect</td></tr><tr><td>System Data Usage</td><td>Approximate</td><td>Approximate</td><td>–</td><td>Implied</td><td>Optional</td><td>AI Act/domestic indirect</td></tr><tr><td>Input/Output Properties</td><td>–</td><td>Approximate</td><td>–</td><td>–</td><td>Optional</td><td>AI Act indirect</td></tr><tr><td>Intended Application Domain</td><td>Optional</td><td>Approximate</td><td>–</td><td>Implied</td><td>Optional</td><td>AI Act/domestic indirect</td></tr></tbody></table><h3 id="43-model-cluster">4.3 Model Cluster</h3><table><thead><tr><th>Element</th><th>SPDX 3.0</th><th>CycloneDX</th><th>NTIA</th><th>OpenChain</th><th>Consensus</th><th>Regulatory Basis</th></tr></thead><tbody><tr><td>Model Name</td><td>Required</td><td>Conditional</td><td>–</td><td>Implied</td><td>Required</td><td>AI Act indirect</td></tr><tr><td>Model Identifier</td><td>Required</td><td>Optional</td><td>–</td><td>Implied</td><td>Required</td><td>–</td></tr><tr><td>Model Version</td><td>Required</td><td>Optional</td><td>–</td><td>–</td><td>Required</td><td>AI Act indirect</td></tr><tr><td>Model Timestamp</td><td>Required</td><td>Optional</td><td>–</td><td>–</td><td>Required</td><td>AI Act indirect</td></tr><tr><td>Model Producer</td><td>Required</td><td>Optional</td><td>–</td><td>–</td><td>Required</td><td>AI Act indirect</td></tr><tr><td>Model Description</td><td>Optional</td><td>Optional</td><td>–</td><td>–</td><td>Optional</td><td>AI Act/domestic indirect</td></tr><tr><td>Model Hash Value</td><td>Conditional</td><td>Conditional</td><td>–</td><td>–</td><td>Optional</td><td>–</td></tr><tr><td>Model Hash Algorithm</td><td>Conditional</td><td>Conditional</td><td>–</td><td>–</td><td>Optional</td><td>–</td></tr><tr><td>Model Properties</td><td>Optional</td><td>Optional</td><td>–</td><td>–</td><td>Optional</td><td>AI Act indirect</td></tr><tr><td>Input/Output Properties</td><td>Approximate</td><td>Optional</td><td>–</td><td>–</td><td>Optional</td><td>AI Act indirect</td></tr><tr><td>Training Properties</td><td>Optional</td><td>Optional</td><td>–</td><td>Implied</td><td>Optional</td><td>AI Act/domestic indirect</td></tr><tr><td>Model License</td><td>Approximate</td><td>Optional</td><td>–</td><td>Required (P)</td><td>Required</td><td>AI Act indirect</td></tr><tr><td>External References</td><td>Optional</td><td>Conditional</td><td>–</td><td>Implied</td><td>Optional</td><td>–</td></tr></tbody></table><h3 id="44-dataset-attributes-cluster">4.4 Dataset Attributes Cluster</h3><table><thead><tr><th>Element</th><th>SPDX 3.0</th><th>CycloneDX</th><th>NTIA</th><th>OpenChain</th><th>Consensus</th><th>Regulatory Basis</th></tr></thead><tbody><tr><td>Dataset Name</td><td>Required</td><td>Optional</td><td>–</td><td>Implied</td><td>Required</td><td>AI Act indirect</td></tr><tr><td>Dataset Description</td><td>Optional</td><td>Optional</td><td>–</td><td>–</td><td>Optional</td><td>AI Act/domestic indirect</td></tr><tr><td>Dataset Content</td><td>Required</td><td>Optional</td><td>–</td><td>–</td><td>Required</td><td>AI Act indirect</td></tr><tr><td>Dataset Identifier</td><td>Required</td><td>Optional</td><td>–</td><td>–</td><td>Required</td><td>–</td></tr><tr><td>Dataset Hash</td><td>Conditional</td><td>Conditional</td><td>–</td><td>–</td><td>Optional</td><td>–</td></tr><tr><td>Dataset Provenance</td><td>Required</td><td>Approximate</td><td>–</td><td>Implied</td><td>Required</td><td>AI Act/domestic indirect</td></tr><tr><td>Statistical Properties</td><td>Optional</td><td>Optional</td><td>–</td><td>–</td><td>Optional</td><td>AI Act indirect</td></tr><tr><td>Dataset Sensitivity</td><td>Optional</td><td>Optional</td><td>–</td><td>Implied</td><td>Optional</td><td>AI Act/domestic indirect</td></tr><tr><td>Dependency Relationships</td><td>Conditional</td><td>Conditional</td><td>–</td><td>Implied</td><td>Optional</td><td>–</td></tr><tr><td>Dataset License</td><td>Approximate</td><td>Optional</td><td>–</td><td>Required (P)</td><td>Required</td><td>–</td></tr></tbody></table><h3 id="45-infrastructure-security-and-key-performance-indicator-cluster">4.5 Infrastructure, Security, and Key Performance Indicator Cluster</h3><table><thead><tr><th>Element</th><th>SPDX 3.0</th><th>CycloneDX</th><th>NTIA</th><th>OpenChain</th><th>Consensus</th><th>Regulatory Basis</th></tr></thead><tbody><tr><td>Infrastructure Software</td><td>Approximate</td><td>Optional</td><td>–</td><td>–</td><td>Optional</td><td>–</td></tr><tr><td>Infrastructure Hardware</td><td>–</td><td>Optional</td><td>–</td><td>–</td><td>Optional</td><td>AI Act indirect</td></tr><tr><td>Security Controls</td><td>–</td><td>Approximate</td><td>–</td><td>–</td><td>Optional</td><td>CRA/AI Act/FDA indirect</td></tr><tr><td>Security Compliance</td><td>Optional</td><td>Optional</td><td>–</td><td>–</td><td>Optional</td><td>conformity assessment indirect</td></tr><tr><td>Cybersecurity Policy Information</td><td>–</td><td>Approximate</td><td>–</td><td>–</td><td>Optional</td><td>CRA direct</td></tr><tr><td>Vulnerability References</td><td>Approximate</td><td>Optional</td><td>–</td><td>–</td><td>Optional</td><td>CRA/FDA direct</td></tr><tr><td>Security Metrics</td><td>Optional</td><td>Optional</td><td>–</td><td>–</td><td>Optional</td><td>AI Act indirect</td></tr><tr><td>Operational Performance Metrics</td><td>Optional</td><td>Optional</td><td>–</td><td>–</td><td>Optional</td><td>AI Act indirect</td></tr></tbody></table><p>The Security cluster is entirely optional by consensus, but Vulnerability References and Cybersecurity Policy Information are items the CRA and FDA require directly. The consensus tally looks only at how standards define data fields, while regulation mandates the same information. For that reason, these two items are raised to required or recommended in the ingestion and supplier contexts. This is the representative case where the regulatory-basis marking adjusts the role-based application.</p><h3 id="46-role-based-application-summary">4.6 Role-Based Application Summary</h3><p>This table gathers, for all 50 elements, the result of applying the §4.1–4.5 consensus determinations to the three contexts of production, ingestion, and supplier requirements. The role columns use<code>Required</code>,<code>Recommended</code>,<code>Optional</code>, and<code>–</code>.</p><table><thead><tr><th>Element</th><th>Consensus</th><th>Production</th><th>Ingestion</th><th>Supplier</th></tr></thead><tbody><tr><td><strong>Metadata</strong></td><td/><td/><td/><td/></tr><tr><td>SBOM Author</td><td>Required</td><td>Required</td><td>Recommended</td><td>Required</td></tr><tr><td>SBOM Version</td><td>Optional</td><td>Recommended</td><td>Optional</td><td>Recommended</td></tr><tr><td>Data Format Name</td><td>Required</td><td>Required</td><td>Recommended</td><td>Required</td></tr><tr><td>Data Format Version</td><td>Required</td><td>Required</td><td>Recommended</td><td>Required</td></tr><tr><td>Author Signature</td><td>Optional</td><td>Recommended</td><td>Recommended</td><td>Recommended</td></tr><tr><td>Tool Name</td><td>Optional</td><td>Recommended</td><td>Optional</td><td>Recommended</td></tr><tr><td>Tool Version</td><td>Optional</td><td>Recommended</td><td>Optional</td><td>Optional</td></tr><tr><td>Generation Context</td><td>Optional</td><td>Recommended</td><td>Optional</td><td>Recommended</td></tr><tr><td>SBOM Timestamp</td><td>Required</td><td>Required</td><td>Recommended</td><td>Required</td></tr><tr><td>Dependency Relationships</td><td>Required</td><td>Required</td><td>Required</td><td>Required</td></tr><tr><td><strong>System-Level Attributes</strong></td><td/><td/><td/><td/></tr><tr><td>System Name</td><td>Required</td><td>Required</td><td>Required</td><td>Required</td></tr><tr><td>System Components</td><td>Required</td><td>Required</td><td>Required</td><td>Required</td></tr><tr><td>System Producer</td><td>Required</td><td>Required</td><td>Recommended</td><td>Required</td></tr><tr><td>System Version</td><td>Required</td><td>Required</td><td>Required</td><td>Required</td></tr><tr><td>System Timestamp</td><td>Optional</td><td>Recommended</td><td>Optional</td><td>Recommended</td></tr><tr><td>System Data Flow</td><td>Optional</td><td>Recommended</td><td>Recommended</td><td>Recommended</td></tr><tr><td>System Data Usage</td><td>Optional</td><td>Recommended</td><td>Recommended</td><td>Recommended</td></tr><tr><td>Input/Output Properties</td><td>Optional</td><td>Recommended</td><td>Recommended</td><td>Recommended</td></tr><tr><td>Intended Application Domain</td><td>Optional</td><td>Recommended</td><td>Recommended</td><td>Recommended</td></tr><tr><td><strong>Model</strong></td><td/><td/><td/><td/></tr><tr><td>Model Name</td><td>Required</td><td>Required</td><td>Required</td><td>Required</td></tr><tr><td>Model Identifier</td><td>Required</td><td>Required</td><td>Required</td><td>Required</td></tr><tr><td>Model Version</td><td>Required</td><td>Required</td><td>Required</td><td>Required</td></tr><tr><td>Model Timestamp</td><td>Required</td><td>Required</td><td>Recommended</td><td>Recommended</td></tr><tr><td>Model Producer</td><td>Required</td><td>Required</td><td>Recommended</td><td>Required</td></tr><tr><td>Model Description</td><td>Optional</td><td>Recommended</td><td>Required</td><td>Recommended</td></tr><tr><td>Model Hash Value</td><td>Optional</td><td>Recommended</td><td>Recommended</td><td>Recommended</td></tr><tr><td>Model Hash Algorithm</td><td>Optional</td><td>Recommended</td><td>Recommended</td><td>Recommended</td></tr><tr><td>Model Properties</td><td>Optional</td><td>Recommended</td><td>Recommended</td><td>Recommended</td></tr><tr><td>Input/Output Properties</td><td>Optional</td><td>Recommended</td><td>Recommended</td><td>Recommended</td></tr><tr><td>Training Properties</td><td>Optional</td><td>Recommended</td><td>Recommended</td><td>Recommended</td></tr><tr><td>Model License</td><td>Required</td><td>Required</td><td>Required</td><td>Required</td></tr><tr><td>External References</td><td>Optional</td><td>Recommended</td><td>Recommended</td><td>Recommended</td></tr><tr><td><strong>Dataset Attributes</strong></td><td/><td/><td/><td/></tr><tr><td>Dataset Name</td><td>Required</td><td>Required</td><td>Required</td><td>Required</td></tr><tr><td>Dataset Description</td><td>Optional</td><td>Recommended</td><td>Recommended</td><td>Recommended</td></tr><tr><td>Dataset Content</td><td>Required</td><td>Required</td><td>Recommended</td><td>Recommended</td></tr><tr><td>Dataset Identifier</td><td>Required</td><td>Required</td><td>Required</td><td>Required</td></tr><tr><td>Dataset Hash</td><td>Optional</td><td>Recommended</td><td>Recommended</td><td>Recommended</td></tr><tr><td>Dataset Provenance</td><td>Required</td><td>Required</td><td>Required</td><td>Required</td></tr><tr><td>Statistical Properties</td><td>Optional</td><td>Recommended</td><td>Optional</td><td>Optional</td></tr><tr><td>Dataset Sensitivity</td><td>Optional</td><td>Recommended</td><td>Required</td><td>Required</td></tr><tr><td>Dependency Relationships</td><td>Optional</td><td>Recommended</td><td>Optional</td><td>Optional</td></tr><tr><td>Dataset License</td><td>Required</td><td>Required</td><td>Required</td><td>Required</td></tr><tr><td><strong>Infrastructure, Security, and KPIs</strong></td><td/><td/><td/><td/></tr><tr><td>Infrastructure Software</td><td>Optional</td><td>Recommended</td><td>Optional</td><td>Recommended</td></tr><tr><td>Infrastructure Hardware</td><td>Optional</td><td>Optional</td><td>Optional</td><td>Optional</td></tr><tr><td>Security Controls</td><td>Optional</td><td>Recommended</td><td>Recommended</td><td>Recommended</td></tr><tr><td>Security Compliance</td><td>Optional</td><td>Recommended</td><td>Recommended</td><td>Recommended</td></tr><tr><td>Cybersecurity Policy Information</td><td>Optional</td><td>Recommended</td><td>Optional</td><td>Recommended</td></tr><tr><td>Vulnerability References</td><td>Optional</td><td>Recommended</td><td>Required</td><td>Required</td></tr><tr><td>Security Metrics</td><td>Optional</td><td>Recommended</td><td>Recommended</td><td>Optional</td></tr><tr><td>Operational Performance Metrics</td><td>Optional</td><td>Recommended</td><td>Optional</td><td>Optional</td></tr></tbody></table><h2 id="5-role-based-application-in-detail">5. Role-Based Application in Detail</h2><h3 id="51-production-perspective">5.1 Production Perspective</h3><p>When an in-house development team builds the model, information access is at its best, so the requirement level is set highest here. The 20 consensus-required elements remain required as is. In addition, items that are optional by consensus — detailed model and dataset attributes, hashes, training information — are set to recommended at production time, because if the producer does not record this information, no one downstream, whether an adopter or the rest of the supply chain, can ever recover it.</p><h3 id="52-ingestion-perspective">5.2 Ingestion Perspective</h3><p>When bringing in an external model or dataset, fields that are used directly for transparency and risk assessment take priority. In addition to identification information (name, identifier, version, producer), Model Description, model and dataset licenses, Dataset Provenance, Dataset Sensitivity, and Vulnerability References are treated as required. Licenses are the basis for judging compliance risk; provenance and sensitivity for judging data legality and privacy risk; vulnerability references for judging security risk. These are optional by consensus but are core to ingestion review, so they are raised to required.</p><h3 id="53-supplier-requirement-perspective">5.3 Supplier Requirement Perspective</h3><p>The scope required from suppliers takes the 20 consensus-required elements as the baseline, considering what is realistically enforceable through contract. Model and dataset licenses, Dataset Provenance and Sensitivity, and Vulnerability References are added as required on top of that. This extends to models and data the same structure that existing software SBOM supplier requirements already enforce for identification, dependencies, and format compliance.</p><h2 id="6-limitations-and-items-requiring-verification">6. Limitations and Items Requiring Verification</h2><p>The consensus determinations in this matrix rest on the cardinality defined in the standard specifications and on minimum-element provisions, with the regulatory-basis marking as a separate axis. The following items had limited access to primary sources and require separate verification.</p><p>The primary NTIA minimum elements specification (ntia.gov) blocks automated retrieval, so the seven baseline fields were reconfirmed against a public mirror. The primary text of the CRA Annex I, the AI Act annexes, and the FDA guidance (EUR-Lex, fda.gov) also had rendering and access-blocking issues and were cross-checked using mirrors and search aggregation. The training-data obligations in Korea&rsquo;s Basic Act on AI could not be matched against the primary text down to the article and paragraph level, so they are marked &ldquo;indirect (article unspecified).&rdquo; These items will be reconfirmed against primary sources at a follow-up verification stage.</p><p>The field cardinality of SPDX 3.0 and CycloneDX 1.6 was confirmed directly from the specification&rsquo;s class definitions and the original JSON schema, so confidence in these is high.</p><h2 id="references">References</h2><p>The main primary sources are as follows.</p><p><strong>A1.</strong> G7 Cybersecurity Working Group (2026).<em>Software Bill of Materials for AI — Minimum Elements</em>. Jointly led by the BSI and the ACN, and jointly published with the other G7 cybersecurity agencies and the European Commission. —<em>Used for: the 50-element row structure.</em></p><p><strong>A2.</strong> SPDX Project (2024).<em>System Package Data Exchange (SPDX) Specification, Version 3.0.1</em> — AI Profile, Dataset Profile, Core.<a href="https://spdx.github.io/spdx-spec/v3.0.1/">https://spdx.github.io/spdx-spec/v3.0.1/</a> —<em>Used for: model and dataset field cardinality.</em></p><p><strong>A3.</strong> OWASP / ECMA International (2024).<em>CycloneDX Bill of Materials Specification 1.6</em> (ECMA-424), JSON schema.<a href="https://cyclonedx.org/docs/1.6/json/">https://cyclonedx.org/docs/1.6/json/</a> —<em>Used for: determining required fields in the schema.</em></p><p><strong>A4.</strong> NTIA, U.S. Department of Commerce (2021).<em>The Minimum Elements For a Software Bill of Materials (SBOM)</em>.<a href="https://www.ntia.gov/report/2021/minimum-elements-software-bill-materials-sbom">https://www.ntia.gov/report/2021/minimum-elements-software-bill-materials-sbom</a> —<em>Used for: general SBOM minimum elements.</em></p><p><strong>A5.</strong> OpenChain Project AI Work Group (2025).<em>Artificial Intelligence System Bill of Materials — Compliance Management Guide, Version 1</em>. —<em>Used for: license obligation process.</em></p><p><strong>A6.</strong> European Parliament and Council (2024).<em>Regulation (EU) 2024/2847 — Cyber Resilience Act</em>, Annex I. —<em>Used for: SBOM and vulnerability-handling regulatory basis.</em></p><p><strong>A7.</strong> European Parliament and Council (2024).<em>Regulation (EU) 2024/1689 — AI Act</em>, Article 53, Annex IV, XI, XII. —<em>Used for: documentation and transparency regulatory basis.</em></p><p><strong>A8.</strong> U.S. FDA (2023).<em>Cybersecurity in Medical Devices: Premarket Submissions</em>; FD&amp;C Act §524B. —<em>Used for: medical device SBOM regulatory basis.</em></p><p><strong>A9.</strong> Ministry of Science and ICT, National Intelligence Service, and KISA (2026).<em>Software Supply Chain Security Enhancement Roadmap for an Era of Everyday AI</em>;<em>Basic Act on the Development of Artificial Intelligence and the Establishment of Trust, etc.</em> —<em>Used for: domestic regulatory basis.</em></p><h2 id="8-structure-of-this-series">8. Structure of This Series</h2><p>This article is the starting point of a five-part series. It carries the matrix above into operational documents for the three usage contexts, together with the toolset strategy that supports them.</p><ul><li><a href="/en/research/2026-ai-bom-requirements/supplier-requirements/">Supplier AI BOM Submission Requirements</a> — the fields to require from suppliers and the submission protocol</li><li><a href="/en/research/2026-ai-bom-requirements/producer-guide/">In-House Development Team AI BOM Authoring Guide</a> — the required and recommended items an in-house production team must fill in</li><li><a href="/en/research/2026-ai-bom-requirements/ingestion-checklist/">External Model and Dataset Ingestion Checklist</a> — risk review when bringing in external models and datasets</li><li><a href="/en/research/2026-ai-bom-requirements/toolset-strategy/">AI BOM Toolset Design Strategy</a> — the strategy for codifying the matrix as policy and integrating it with existing tools</li></ul>
]]></content:encoded></item><item><title>AI BOM Toolset Design Strategy</title><link>https://haksungjang.github.io/en/research/2026-ai-bom-requirements/toolset-strategy/</link><pubDate>Mon, 29 Jun 2026 00:00:00 +0000</pubDate><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Haksung Jang</dc:creator><guid>https://haksungjang.github.io/en/research/2026-ai-bom-requirements/toolset-strategy/</guid><description>Surveys seven tool categories through their official repositories and documentation to lay out what to reuse, extend, or build new; the build order; the policy schema for codifying the matrix; and the Dependency-Track integration architecture.</description><content:encoded>&lt;![CDATA[<div class="alert alert-info" role="alert"><p>This article was written with Claude Code, and the key facts cited here were cross-checked against primary sources.</p></div><p>Based on a survey of seven tool categories through their official repositories and documentation, this document lays out what to reuse from existing tools, what to extend or build new, in what order to build it, and what policy schema should define the matrix. The acquisition strategy was not fixed in advance but determined from the survey results, and the premise is that the organization already operates an existing SBOM platform (Dependency-Track).</p><h2 id="1-three-core-judgments">1. Three Core Judgments</h2><p>The standard path for generation, verification, storage, and model scanning already works with open source software. The<code>aibom</code> command in cdxgen actually produces CycloneDX 1.6 AI BOMs, sbomqs and OPA check field conformance, Dependency-Track ingests the software layer, and ModelScan and sigstore model-signing reinforce model integrity. There is no need to build everything from scratch in-house.</p><p>Standardizing the format on CycloneDX 1.6 is the more realistic choice. The SPDX 3.0 AI Profile has richer expressive power, but no mature tool actually generates it, and Dependency-Track cannot ingest SPDX. SPDX 3.0 is kept as a standard to track, while CycloneDX is set as the primary operational format.</p><p>Where new construction is unavoidable is narrow and clear: the policy layer that checks AI-specific fields, an inventory that treats models and datasets as first-class objects, and the determination of license usage restrictions. Everything else is covered by reuse or extension.</p><h2 id="2-reuse-determinations-by-area">2. Reuse Determinations by Area</h2><table><thead><tr><th>Functional Area</th><th>Representative Tool</th><th>Determination</th><th>Basis</th></tr></thead><tbody><tr><td>AI BOM generation (CycloneDX)</td><td>cdxgen<code>aibom</code></td><td>Reuse</td><td>Automatic CycloneDX 1.6 AI BOM generation works (under active development as of this research)</td></tr><tr><td>AI BOM generation (SPDX 3.0)</td><td>spdx-tools</td><td>Not viable</td><td>3.0 support is experimental write-only, with no AI Profile generation support</td></tr><tr><td>Deep-field auto-extraction</td><td>None</td><td>New</td><td>Cannot automatically fill in dataset statistics, bias, hashes, or license</td></tr><tr><td>Validation/conformance engine</td><td>sbomqs, sbom-utility</td><td>Reuse</td><td>Provides general-purpose field-presence checking and scoring</td></tr><tr><td>AI- and role-specific conformance rules</td><td>None</td><td>New</td><td>No off-the-shelf profile exists that checks the G7&rsquo;s 50 elements and role-specific required sets</td></tr><tr><td>Repository/inventory (SW layer)</td><td>Dependency-Track</td><td>Reuse</td><td>Software dependency inventory and impact analysis are mature</td></tr><tr><td>Repository/inventory (model/data layer)</td><td>Dependency-Track</td><td>Extension pending</td><td>Does not yet ingest the<code>machine-learning-model</code> and<code>data</code> classifiers or modelCard (issue #4361, open as of this research)</td></tr><tr><td>Vulnerability matching (SW dependencies)</td><td>Dependency-Track, OSV</td><td>Reuse</td><td>Already connected; ML libraries are matched as ordinary packages too</td></tr><tr><td>Risk feed (model-specific)</td><td>huntr, Insights</td><td>Extend</td><td>CVEs issued by huntr flow in via NVD; there is no direct connector</td></tr><tr><td>Model serialization scanning</td><td>ModelScan, Fickling</td><td>Reuse</td><td>Mature; can be inserted into CI via JSON reports and exit codes</td></tr><tr><td>Integrity/signing</td><td>sigstore model-signing</td><td>Reuse</td><td>Uses DSSE and in-toto, which map onto BOM integrity and provenance fields</td></tr><tr><td>Data poisoning detection</td><td>None (research stage)</td><td>Replaced with traceability</td><td>No production tool exists; provenance and integrity records substitute for a detection guarantee</td></tr><tr><td>License identification/declaration</td><td>ScanCode, ORT + SPDX/HF dictionaries</td><td>Reuse + extend</td><td>Reuse the engine; the AI license dictionary needs to be augmented</td></tr><tr><td>License usage-restriction determination</td><td>None</td><td>New</td><td>No standard exists for machine-readable, automated determination of RAIL-family conduct restrictions</td></tr><tr><td>Policy codification</td><td>OPA/Rego, sbomqs YAML</td><td>Reuse</td><td>Express the matrix by separating policy files per role</td></tr></tbody></table><p>In summary, of the thirteen areas, seven are reuse, three are extension, and three are new. The three new areas — AI- and role-specific conformance rules, the model/data inventory, and license usage-restriction determination — are where this project&rsquo;s unique value is concentrated.</p><h2 id="3-build-priority">3. Build Priority</h2><h3 id="p0--a-minimal-working-pipeline-reuse-focused">P0 — A Minimal Working Pipeline (Reuse-Focused)</h3><p>The first step is to wire together off-the-shelf tools into an end-to-end pipeline. Generation produces CycloneDX 1.6 with cdxgen<code>aibom</code>, model files are scanned with ModelScan and signed with sigstore, and the results are uploaded to Dependency-Track to obtain software-layer vulnerabilities and impact analysis. Validation checks the presence of required fields with an sbomqs custom policy. Almost all of this stage is reuse, so it delivers value quickly.</p><h3 id="p1--extending-the-ai-specific-layer">P1 — Extending the AI-Specific Layer</h3><p>The next step adds new value. Codify the matrix into a policy schema to implement role-specific conformance checking (Section 4), and carry models and datasets through CycloneDX<code>properties</code> or external references to secure inventory traceability. Augment the license pipeline with an AI license dictionary (RAIL, OpenRAIL, Llama, Gemma, OpenMDW, CDLA), and receive model risk as huntr CVEs relayed through NVD.</p><h3 id="p2--new-and-research-areas">P2 — New and Research Areas</h3><p>Last are the parts where standards and research still need to mature. Automatic extraction of deep fields such as dataset statistics or bias, automatic determination of license usage restrictions, and data poisoning are handled through provenance and integrity traceability instead of detection. Bring SPDX 3.0 generation on board once the tool ecosystem matures, but for now keep it only as a standard to track. When Dependency-Track&rsquo;s support for model/data classifiers (issue #4361) lands, promote P1&rsquo;s workaround to a first-class inventory.</p><h2 id="4-policy-schema-design">4. Policy Schema Design</h2><p>Defining the matrix&rsquo;s &ldquo;element x required/optional x role&rdquo; as a machine-readable policy is the core of this toolset. Since the survey found no tool that treats role-specific required sets as a first-class concept, this must be designed directly. It is split into two layers.</p><h3 id="41-field-registry">4.1 Field Registry</h3><p>A table mapping each of the G7&rsquo;s 50 elements to a CycloneDX path (and, eventually, an SPDX path) is kept in one place. The<a href="/en/research/2026-ai-bom-requirements/">AI BOM Field Requirements Matrix</a> already contains an element-by-element source mapping, so moving it into a machine-readable form looks like this.</p><div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#8f5902;font-style:italic"># field-registry.yaml — maps G7 elements to BOM paths</span><span style="color:#f8f8f8"/></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">model_license</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8"/></span></span><span style="display:flex;"><span><span style="color:#f8f8f8"/><span style="color:#204a87;font-weight:bold">g7</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8"/><span style="color:#000">Model license</span><span style="color:#f8f8f8"/></span></span><span style="display:flex;"><span><span style="color:#f8f8f8"/><span style="color:#204a87;font-weight:bold">cyclonedx</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8"/><span style="color:#4e9a06">"components[?type=='machine-learning-model'].licenses"</span><span style="color:#f8f8f8"/></span></span><span style="display:flex;"><span><span style="color:#f8f8f8"/><span style="color:#204a87;font-weight:bold">spdx</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8"/><span style="color:#4e9a06">"Relationship(hasDeclaredLicense) from AIPackage"</span><span style="color:#f8f8f8"/></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">dataset_provenance</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8"/></span></span><span style="display:flex;"><span><span style="color:#f8f8f8"/><span style="color:#204a87;font-weight:bold">g7</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8"/><span style="color:#000">Dataset provenance</span><span style="color:#f8f8f8"/></span></span><span style="display:flex;"><span><span style="color:#f8f8f8"/><span style="color:#204a87;font-weight:bold">cyclonedx</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8"/><span style="color:#4e9a06">"components[?type=='data'].data[].governance"</span><span style="color:#f8f8f8"/></span></span><span style="display:flex;"><span><span style="color:#f8f8f8"/><span style="color:#204a87;font-weight:bold">spdx</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8"/><span style="color:#4e9a06">"DatasetPackage.originatedBy / dataCollectionProcess"</span><span style="color:#f8f8f8"/></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">vulnerability_referencing</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8"/></span></span><span style="display:flex;"><span><span style="color:#f8f8f8"/><span style="color:#204a87;font-weight:bold">g7</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8"/><span style="color:#000">Vulnerability referencing</span><span style="color:#f8f8f8"/></span></span><span style="display:flex;"><span><span style="color:#f8f8f8"/><span style="color:#204a87;font-weight:bold">cyclonedx</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8"/><span style="color:#4e9a06">"vulnerabilities[] or externalReferences[?type=='vcs']"</span><span style="color:#f8f8f8"/></span></span><span style="display:flex;"><span><span style="color:#f8f8f8"/><span style="color:#204a87;font-weight:bold">spdx</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8"/><span style="color:#4e9a06">"VulnAssessmentRelationship"</span><span style="color:#f8f8f8"/></span></span></code></pre></div><h3 id="42-role-specific-policy-files">4.2 Role-Specific Policy Files</h3><p>The required set for each of production, ingestion, and supplier is kept as a separate policy file. This simply carries over the role column of the matrix.</p><div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#8f5902;font-style:italic"># policy/supplier.yaml — required elements for supplier submission (Section 4.6, 20 supplier-required elements)</span><span style="color:#f8f8f8"/></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">required</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8"/></span></span><span style="display:flex;"><span><span style="color:#f8f8f8"/>-<span style="color:#000">sbom_author</span><span style="color:#f8f8f8"/></span></span><span style="display:flex;"><span><span style="color:#f8f8f8"/>-<span style="color:#000">sbom_data_format_name</span><span style="color:#f8f8f8"/></span></span><span style="display:flex;"><span><span style="color:#f8f8f8"/>-<span style="color:#000">sbom_data_format_version</span><span style="color:#f8f8f8"/></span></span><span style="display:flex;"><span><span style="color:#f8f8f8"/>-<span style="color:#000">sbom_timestamp</span><span style="color:#f8f8f8"/></span></span><span style="display:flex;"><span><span style="color:#f8f8f8"/>-<span style="color:#000">sbom_dependency_relationship</span><span style="color:#f8f8f8"/></span></span><span style="display:flex;"><span><span style="color:#f8f8f8"/>-<span style="color:#000">system_name</span><span style="color:#f8f8f8"/></span></span><span style="display:flex;"><span><span style="color:#f8f8f8"/>-<span style="color:#000">system_components</span><span style="color:#f8f8f8"/></span></span><span style="display:flex;"><span><span style="color:#f8f8f8"/>-<span style="color:#000">system_producer</span><span style="color:#f8f8f8"/></span></span><span style="display:flex;"><span><span style="color:#f8f8f8"/>-<span style="color:#000">system_version</span><span style="color:#f8f8f8"/></span></span><span style="display:flex;"><span><span style="color:#f8f8f8"/>-<span style="color:#000">model_name</span><span style="color:#f8f8f8"/></span></span><span style="display:flex;"><span><span style="color:#f8f8f8"/>-<span style="color:#000">model_identifier</span><span style="color:#f8f8f8"/></span></span><span style="display:flex;"><span><span style="color:#f8f8f8"/>-<span style="color:#000">model_version</span><span style="color:#f8f8f8"/></span></span><span style="display:flex;"><span><span style="color:#f8f8f8"/>-<span style="color:#000">model_producer</span><span style="color:#f8f8f8"/></span></span><span style="display:flex;"><span><span style="color:#f8f8f8"/>-<span style="color:#000">model_license</span><span style="color:#f8f8f8"/></span></span><span style="display:flex;"><span><span style="color:#f8f8f8"/>-<span style="color:#000">dataset_name</span><span style="color:#f8f8f8"/></span></span><span style="display:flex;"><span><span style="color:#f8f8f8"/>-<span style="color:#000">dataset_identifier</span><span style="color:#f8f8f8"/></span></span><span style="display:flex;"><span><span style="color:#f8f8f8"/>-<span style="color:#000">dataset_provenance</span><span style="color:#f8f8f8"/></span></span><span style="display:flex;"><span><span style="color:#f8f8f8"/>-<span style="color:#000">dataset_sensitivity</span><span style="color:#f8f8f8"/></span></span><span style="display:flex;"><span><span style="color:#f8f8f8"/>-<span style="color:#000">dataset_license</span><span style="color:#f8f8f8"/></span></span><span style="display:flex;"><span><span style="color:#f8f8f8"/>-<span style="color:#000">vulnerability_referencing</span><span style="color:#f8f8f8"/></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">recommended</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8"/></span></span><span style="display:flex;"><span><span style="color:#f8f8f8"/>-<span style="color:#000">model_timestamp</span><span style="color:#f8f8f8"/></span></span><span style="display:flex;"><span><span style="color:#f8f8f8"/>-<span style="color:#000">dataset_content</span><span style="color:#f8f8f8"/></span></span><span style="display:flex;"><span><span style="color:#f8f8f8"/>-<span style="color:#000">model_hash_value</span><span style="color:#f8f8f8"/></span></span></code></pre></div><h3 id="43-determination-engine">4.3 Determination Engine</h3><p>Two engines are recommended together. For a quick start, an sbomqs custom policy (YAML) puts the role-specific files into operation today with no engine to learn, converting the fulfillment rate into a score. Where expressiveness is needed, OPA/Rego (conftest) branches on the input BOM&rsquo;s role value to determine the required set. Because Rego follows the field registry&rsquo;s paths to evaluate presence, it can express conditional requirements and cross-field consistency as well.</p><div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-rego" data-lang="rego"><span style="display:flex;"><span><span style="color:#8f5902;font-style:italic"># policy/aibom.rego — skeleton for role-specific required-field checking</span><span style="color:#f8f8f8"/></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">package</span><span style="color:#f8f8f8"/><span style="color:#000">aibom</span><span style="color:#f8f8f8"/></span></span><span style="display:flex;"><span><span style="color:#f8f8f8"/></span></span><span style="display:flex;"><span><span style="color:#000">deny</span><span style="color:#000;font-weight:bold">[</span><span style="color:#000">msg</span><span style="color:#000;font-weight:bold">]</span><span style="color:#f8f8f8"/><span style="color:#000;font-weight:bold">{</span><span style="color:#f8f8f8"/></span></span><span style="display:flex;"><span><span style="color:#f8f8f8"/><span style="color:#000">role</span><span style="color:#f8f8f8"/><span style="color:#ce5c00;font-weight:bold">:=</span><span style="color:#f8f8f8"/><span style="color:#000">input</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">metadata</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">properties</span><span style="color:#000;font-weight:bold">[</span><span style="color:#000">_</span><span style="color:#000;font-weight:bold">]</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">value</span><span style="color:#f8f8f8"/><span style="color:#8f5902;font-style:italic"># e.g. "supplier"</span><span style="color:#f8f8f8"/></span></span><span style="display:flex;"><span><span style="color:#f8f8f8"/><span style="color:#000">req</span><span style="color:#f8f8f8"/><span style="color:#ce5c00;font-weight:bold">:=</span><span style="color:#f8f8f8"/><span style="color:#000">data</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">policy</span><span style="color:#000;font-weight:bold">[</span><span style="color:#000">role</span><span style="color:#000;font-weight:bold">]</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">required</span><span style="color:#000;font-weight:bold">[</span><span style="color:#000">_</span><span style="color:#000;font-weight:bold">]</span><span style="color:#f8f8f8"/></span></span><span style="display:flex;"><span><span style="color:#f8f8f8"/><span style="color:#204a87;font-weight:bold">not</span><span style="color:#f8f8f8"/><span style="color:#000">field_present</span><span style="color:#000;font-weight:bold">(</span><span style="color:#000">req</span><span style="color:#000;font-weight:bold">)</span><span style="color:#f8f8f8"/></span></span><span style="display:flex;"><span><span style="color:#f8f8f8"/><span style="color:#000">msg</span><span style="color:#f8f8f8"/><span style="color:#ce5c00;font-weight:bold">:=</span><span style="color:#f8f8f8"/><span style="color:#000">sprintf</span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">"Required element missing: %s (role: %s)"</span><span style="color:#ce5c00;font-weight:bold">,</span><span style="color:#f8f8f8"/><span style="color:#000;font-weight:bold">[</span><span style="color:#000">req</span><span style="color:#ce5c00;font-weight:bold">,</span><span style="color:#f8f8f8"/><span style="color:#000">role</span><span style="color:#000;font-weight:bold">])</span><span style="color:#f8f8f8"/></span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">}</span><span style="color:#f8f8f8"/></span></span></code></pre></div><p>OSCAL is a tool built for expressing security controls, which makes it more than SBOM fields need, and it does not execute validation on its own, so it is not adopted. It is worth considering only if there arises a need to produce upper-level artifacts for regulatory or audit purposes (a requirements catalog, an assessment result report) in a federal-friendly format.</p><h2 id="5-reference-architecture-and-dependency-track-integration">5. Reference Architecture and Dependency-Track Integration</h2><p>The BOM for an AI system splits into a software dependency layer and a model/dataset layer. Dependency-Track handles the former layer right now, and does not yet accept the latter as a first-class citizen (issue #4361 is open as of this research and may change later). Integration is therefore split by layer.</p><p><img src="./toolchain-layers-en.png" alt="The common pipeline has three stages — generation, enrichment, and validation — after which it splits into two layers. The software layer is ingested by Dependency-Track as-is, but the model/dataset layer, lacking classifier support, is uploaded as a generic component and routed around via properties"/><p><strong>Figure 4.</strong> The common pipeline and the two layers it splits into after validation<em>(compiled from the survey)</em></p><p>The software layer needs almost no extra work. cdxgen turns an ML project&rsquo;s PyPI or npm dependencies into CycloneDX, which is uploaded to Dependency-Track, correlating vulnerabilities against OSV and NVD and even providing impact analysis for &ldquo;which projects use this component?&rdquo; CVEs that huntr issued for ML libraries are also caught, passing through NVD.</p><p>The model/dataset layer is routed around until classifier support arrives. In the short term, models and datasets are uploaded as generic components, while core model card fields are carried through CycloneDX<code>properties</code> or external references to preserve them. Discoverability is limited, but traceability is preserved. Threats unique to model files (unsafe pickle, backdoored weights) don&rsquo;t fit the CVE matching model, so they are checked separately with ModelScan and the results are linked to policy or tickets.</p><h2 id="6-limitations-and-items-requiring-verification">6. Limitations and Items Requiring Verification</h2><p>The tool facts in this strategy were confirmed against each project&rsquo;s official repository and documentation. The following require reconfirmation before adoption.</p><p>The licensing area carries the risk of a mismatch between what is declared and what is actually true. The so-called permissive-washing risk, in which the license declared on a platform diverges from the actual component license of the model or dataset, is well known, and it compounds an existing limitation: existing software license tools cannot parse model cards or dataset cards, or trace training data provenance. This toolset does not promise automatic detection for this and leaves verifying the match between declared license and actual output as a new-build target.</p><p>The timing of Dependency-Track&rsquo;s support for model/data classifiers (#4361) is an external schedule outside our control. Because P1&rsquo;s model/data inventory depends on this schedule, it should be designed with the workaround (preserving<code>properties</code>) as the default, promoting to first-class inventory once classifier support lands.</p><p>GUAC&rsquo;s AI-specific handling, OSV&rsquo;s model-specific record scheme, and any connector letting Dependency-Track directly consume huntr Insights and ModelScan results are all confirmed absent or unverifiable. No standard yet links model risk feeds and SBOM inventories, so this connection has to be filled with custom glue code.</p><p>There is no production tool for data poisoning detection. This toolset does not promise automatic poisoning detection and limits itself to traceability and preventive controls that record data provenance, hashes, and whether verification passed.</p><h2 id="7-references">7. References</h2><p>The tool determinations in this article were confirmed against each project&rsquo;s official repository and documentation as primary sources. All access dates are 2026-06.</p><p><strong>A1.</strong> CycloneDX / cdxgen Project.<em>cdxgen — AI/ML BOM generation and the<code>aibom</code> CLI,<code>--spec-version</code></em>.<a href="https://github.com/CycloneDX/cdxgen">https://github.com/CycloneDX/cdxgen</a> (accessed 2026-06). —<em>Used for: basis that cdxgen&rsquo;s<code>aibom</code> automatically generates CycloneDX 1.6 AI BOMs.</em></p><p><strong>A2.</strong> CycloneDX.<em>Machine Learning Bill of Materials (ML-BOM) Capability Overview</em>.<a href="https://cyclonedx.org/capabilities/mlbom/">https://cyclonedx.org/capabilities/mlbom/</a> (accessed 2026-06). —<em>Used for: standard basis that CycloneDX 1.6 defines<code>machine-learning-model</code> and modelCard.</em></p><p><strong>A3.</strong> SPDX.<em>SPDX 3.0.1 — AI Profile Specification</em>.<a href="https://spdx.github.io/spdx-spec/v3.0.1/model/AI/AI/">https://spdx.github.io/spdx-spec/v3.0.1/model/AI/AI/</a> (accessed 2026-06). —<em>Used for: basis that the SPDX 3.0 AI Profile exists at the specification level (expressiveness comparison).</em></p><p><strong>A4.</strong> SPDX.<em>tools-python (spdx-tools) — 3.0 experimental write-only, not recommended for production</em>.<a href="https://github.com/spdx/tools-python">https://github.com/spdx/tools-python</a> (accessed 2026-06). —<em>Used for: basis that no mature tool exists to generate the SPDX 3.0 AI Profile.</em></p><p><strong>A5.</strong> interlynk-io.<em>sbomqs — Policy Guide (custom policy, required type, feature scoring)</em>.<a href="https://github.com/interlynk-io/sbomqs/blob/main/docs/guides/policy.md">https://github.com/interlynk-io/sbomqs/blob/main/docs/guides/policy.md</a> (accessed 2026-06). —<em>Used for: basis that sbomqs enforces field presence via custom policy and converts it into a conformance score.</em></p><p><strong>A6.</strong> Open Policy Agent.<em>Conftest — OPA/Rego policy evaluation for configuration files</em>.<a href="https://github.com/open-policy-agent/conftest">https://github.com/open-policy-agent/conftest</a> (accessed 2026-06). —<em>Used for: basis that CycloneDX/SPDX JSON can be evaluated with Rego to branch role-specific required sets.</em></p><p><strong>A7.</strong> OWASP Dependency-Track.<em>Policy Compliance Documentation (condition types, regex values)</em>.<a href="https://docs.dependencytrack.org/usage/policy-compliance/">https://docs.dependencytrack.org/usage/policy-compliance/</a> (accessed 2026-06). —<em>Used for: basis that the Dependency-Track policy engine centers on license, vulnerability, and component coordinates, with policies configurable per project/tag.</em></p><p><strong>A8.</strong> DependencyTrack.<em>Issue #4361 — Request to support CycloneDX 1.5/1.6 classifiers (<code>machine-learning-model</code>,<code>data</code>)</em>.<a href="https://github.com/DependencyTrack/dependency-track/issues/4361">https://github.com/DependencyTrack/dependency-track/issues/4361</a> (accessed 2026-06). —<em>Used for: basis that Dependency-Track does not yet ingest the model/data classifiers or modelCard (open as of this research).</em></p><p><strong>A9.</strong> Protect AI.<em>ModelScan — Static Scanner for Model Serialization Attacks (JSON reports, exit codes)</em>.<a href="https://github.com/protectai/modelscan">https://github.com/protectai/modelscan</a> (accessed 2026-06). —<em>Used for: basis that model file serialization scanning is mature enough to insert into CI.</em></p><p><strong>A10.</strong> Sigstore / OpenSSF.<em>model-transparency (model-signing) — DSSE + in-toto Model Signing</em>.<a href="https://github.com/sigstore/model-transparency">https://github.com/sigstore/model-transparency</a> (accessed 2026-06). —<em>Used for: basis that model signing and provenance attestation map onto BOM integrity and provenance fields.</em></p><p><strong>A11.</strong> Z. Tian et al. (2025).<em>Data Poisoning in Deep Learning: A Survey</em>.<a href="https://arxiv.org/html/2503.22759v1">https://arxiv.org/html/2503.22759v1</a> (accessed 2026-06). —<em>Used for: basis that data poisoning detection remains at the research stage with no general-purpose production tool.</em></p><p><strong>A12.</strong> AboutCode.<em>ScanCode Toolkit — License and Copyright Text Matching Engine</em>.<a href="https://github.com/aboutcode-org/scancode-toolkit/">https://github.com/aboutcode-org/scancode-toolkit/</a> (accessed 2026-06). —<em>Used for: basis for reusing the license identification engine while noting that AI license text needs to be added.</em></p><p><strong>A13.</strong> Responsible AI Licenses (RAIL).<em>FAQ / BigScience OpenRAIL-M — Use-Based Restrictions That Propagate to Derivatives</em>.<a href="https://www.licenses.ai/faq-2">https://www.licenses.ai/faq-2</a> (accessed 2026-06). —<em>Used for: basis that no standard exists for machine-reading and automatically determining RAIL-family conduct restrictions.</em></p><p><strong>A14.</strong> LF AI &amp; Data.<em>Simplifying AI Model Licensing with OpenMDW</em>.<a href="https://lfaidata.foundation/blog/2025/07/22/simplifying-ai-model-licensing-with-openmdw/">https://lfaidata.foundation/blog/2025/07/22/simplifying-ai-model-licensing-with-openmdw/</a> (accessed 2026-06). —<em>Used for: basis that OpenMDW, a permissive license bundling models, data, and weights, is listed with SPDX (a candidate for the AI license dictionary).</em></p><p><strong>A15.</strong> Protect AI.<em>huntr — Bug Bounty and CNA for AI and ML</em>.<a href="https://huntr.com/">https://huntr.com/</a> (accessed 2026-06). —<em>Used for: basis that CVEs issued by huntr flow into Dependency-Track matching via NVD.</em></p><p><strong>A16.</strong> Google and OpenSSF.<em>OSV.dev — Open Source Vulnerability Database</em>.<a href="https://osv.dev/">https://osv.dev/</a> (accessed 2026-06). —<em>Used for: basis that OSV includes ML library vulnerabilities but does not record model-weight-specific risks themselves.</em></p><p><strong>A17.</strong> Trail of Bits.<em>Fickling — Static Analysis Tool for Pickle</em>.<a href="https://github.com/trailofbits/fickling">https://github.com/trailofbits/fickling</a> (accessed 2026-06). —<em>Used for: basis for a high-risk pickle deep-inspection tool.</em></p><p><strong>A18.</strong> OSS Review Toolkit.<em>ORT — License Compliance Orchestration</em>.<a href="https://github.com/oss-review-toolkit/ort">https://github.com/oss-review-toolkit/ort</a> (accessed 2026-06). —<em>Used for: basis for reusing the policy rule engine and SBOM reporter.</em></p><p><strong>A19.</strong> OpenSSF.<em>GUAC — SBOM Graph and Impact Analysis</em>.<a href="https://guac.sh/">https://guac.sh/</a> (accessed 2026-06). —<em>Used for: basis that it is an option for reinforcing impact analysis, while AI-specific handling remains unverified.</em></p>
]]></content:encoded></item><item><title>Ingestion Vetting Checklist for External Models and Datasets</title><link>https://haksungjang.github.io/en/research/2026-ai-bom-requirements/ingestion-checklist/</link><pubDate>Mon, 29 Jun 2026 00:00:00 +0000</pubDate><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Haksung Jang</dc:creator><guid>https://haksungjang.github.io/en/research/2026-ai-bom-requirements/ingestion-checklist/</guid><description>A checklist for vetting transparency and risk, on the basis of the AI BOM, when bringing in and using an external AI model or dataset. Checks identification, licensing, data lawfulness, and security risk step by step.</description><content:encoded>&lt;![CDATA[<div class="alert alert-info" role="alert"><p>This article was written with Claude Code, and the key facts cited here were cross-checked against primary sources.</p></div><p>This checklist sets the criteria for vetting transparency and risk, on the basis of the AI Bill of Materials (AI BOM), when an in-house development team brings in and uses an external AI model or dataset. The items to check are drawn from the ingestion column of the<a href="/en/research/2026-ai-bom-requirements/">AI BOM Field Requirements Matrix</a>.</p><p>Because the purpose of an ingestion check is to bring a model in rather than to build one, fields that feed directly into risk assessment are prioritized. Licensing is the basis for judging compliance risk, provenance and sensitivity for judging data lawfulness and privacy risk, and vulnerability references for judging security risk.</p><h2 id="1-ai-bom-presence-and-format">1. AI BOM Presence and Format</h2><ul><li>Is an AI BOM provided for the object being ingested?</li><li>Is the format SPDX 3.0 or later, or CycloneDX 1.6 or later?</li><li>Does the AI BOM&rsquo;s timestamp match the version of the object being ingested?</li></ul><p>If no AI BOM is provided, or the format lacks an AI-specific profile, request one from the supplier before ingestion, or secure the minimum information independently.</p><h2 id="2-identification-and-version-required-check">2. Identification and Version (Required Check)</h2><table><thead><tr><th>Check item</th><th>Assessment criterion</th></tr></thead><tbody><tr><td>Model name and identifier</td><td>Is it identified by a standard identifier (PURL/CPE)?</td></tr><tr><td>Model version</td><td>Does it match the version being ingested?</td></tr><tr><td>Dataset name and identifier</td><td>Is the training dataset identified?</td></tr><tr><td>System name and version</td><td>Is the delivered system identified, with a version stated?</td></tr><tr><td>System components</td><td>Are the included components enumerated?</td></tr><tr><td>Dependency relationships</td><td>Are the relationships between components stated?</td></tr></tbody></table><h2 id="3-license-check-required-check">3. License Check (Required Check)</h2><table><thead><tr><th>Check item</th><th>Assessment criterion</th></tr></thead><tbody><tr><td>Model license</td><td>Is a license stated, and is it compatible with our intended use?</td></tr><tr><td>open weight status</td><td>Confirm whether it is open weight, open architecture, or open data</td></tr><tr><td>Dataset license</td><td>Is the training dataset&rsquo;s license stated, and is it compatible with the intended use?</td></tr></tbody></table><p>An empty license field, or one that conflicts with the intended use, is grounds to hold off on ingestion. Because the model license and the dataset license are separate matters, check each independently.</p><h2 id="4-data-lawfulness-and-risk-required-check">4. Data Lawfulness and Risk (Required Check)</h2><table><thead><tr><th>Check item</th><th>Assessment criterion</th></tr></thead><tbody><tr><td>Dataset provenance</td><td>Are the source, collection method, and preprocessing steps stated?</td></tr><tr><td>Dataset sensitivity</td><td>Is the presence of personally identifiable information, copyrighted data, or sensitive data stated?</td></tr><tr><td>Model description and lineage</td><td>Are the model&rsquo;s limitations and its lineage from prior models described?</td></tr></tbody></table><p>If the dataset&rsquo;s provenance is unclear, or whether it contains sensitive data is not stated, data lawfulness and privacy risk must be assessed separately.</p><h2 id="5-security-risk-required-check">5. Security Risk (Required Check)</h2><table><thead><tr><th>Check item</th><th>Assessment criterion</th></tr></thead><tbody><tr><td>Vulnerability references</td><td>Are links to known vulnerability information provided, and are the known vulnerabilities acceptable in the ingestion environment?</td></tr></tbody></table><p>Vulnerability references are directly required by the Cyber Resilience Act and by US Food and Drug Administration guidance, so this is checked as required during ingestion vetting.</p><h2 id="6-recommended-checks">6. Recommended Checks</h2><p>The following are checked additionally when the risk level is high or the use case is subject to regulation.</p><ul><li>Model timestamp and producer</li><li>Model properties, input/output properties, training properties</li><li>Model hash value and algorithm (integrity verification)</li><li>Dataset contents and hash</li><li>System data flow and data usage</li><li>Whether the intended application domain matches our intended use</li></ul><h2 id="7-ingestion-determination">7. Ingestion Determination</h2><p><img src="./ingestion-decision-en.png" alt="A flow that passes through five required checks in sequence before splitting into ingestion approved and ingestion held. Any one of license conflict, unclear provenance, undisclosed sensitive data, or an unacceptable vulnerability results in a hold"/><p><strong>Figure 5.</strong> Ingestion determination flow<em>(synthesized from research)</em></p><p>If all the required check items in Sections 1 through 5 above are satisfied, the determination is ingestion approved. If any one of a license conflict, unclear provenance, undisclosed sensitive data, or an unacceptable vulnerability applies, the determination is held, and the supplier is asked to remedy the gap or an alternative model is considered.</p><p>The determination result is recorded together with the ingested object&rsquo;s AI BOM identifier, version, and determination date, for use in subsequent reassessment and supply chain tracing.</p>
]]></content:encoded></item><item><title>AI BOM Authoring Guidelines for In-House Development Teams</title><link>https://haksungjang.github.io/en/research/2026-ai-bom-requirements/producer-guide/</link><pubDate>Mon, 29 Jun 2026 00:00:00 +0000</pubDate><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Haksung Jang</dc:creator><guid>https://haksungjang.github.io/en/research/2026-ai-bom-requirements/producer-guide/</guid><description>Guidelines for the AI BOM that in-house development teams must produce when building an AI model or system. Drawing on the information accessibility available at the point of production, this sets out the required and recommended fields to fill and how to record integrity and provenance.</description><content:encoded>&lt;![CDATA[<div class="alert alert-info" role="alert"><p>This article was written with Claude Code, and the key facts cited here were cross-checked against primary sources.</p></div><p>This document sets out the guidelines for the AI Bill of Materials (AI BOM) that in-house development teams must produce when building an AI model or AI system. Information accessibility is at its best at the point of production, so this document sets the required level at its highest. The required fields are drawn from the production column of the<a href="/en/research/2026-ai-bom-requirements/">AI BOM Field Requirements Matrix</a>.</p><p>Much of the information that the production team fails to record can never again be obtained by the adopting team or by parties further down the supply chain. For that reason, model and dataset details that the consensus baseline treats as optional are recommended for production-time authoring.</p><h2 id="1-authoring-principles">1. Authoring Principles</h2><p>The AI BOM is generated after model training or system build completes. The lifecycle stage at the time of generation (pre-build, build, or post-build) is recorded in the metadata. Use SPDX 3.0 or later, or CycloneDX 1.6 or later, as the format, and where possible generate it automatically with a generation tool, then fill in the missing items by hand.</p><p>Fields whose value cannot be determined must be marked &ldquo;unable to confirm&rdquo; rather than left blank. Whenever a model or dataset is updated, the AI BOM version and timestamp are updated together.</p><h2 id="2-required-fields">2. Required Fields</h2><p>The following must always be filled in. These are the items for which two or more standards in the matrix require presence.</p><table><thead><tr><th>Cluster</th><th>Required fields</th></tr></thead><tbody><tr><td>Metadata</td><td>Author, data format name, data format version, timestamp, dependency relationships</td></tr><tr><td>System level</td><td>System name, system components, system producer, system version</td></tr><tr><td>Model</td><td>Model name, model identifier, model version, model timestamp, model producer, model license</td></tr><tr><td>Dataset</td><td>Dataset name, dataset contents, dataset identifier, dataset provenance, dataset license</td></tr></tbody></table><h2 id="3-recommended-fields">3. Recommended Fields</h2><p>The following are optional under the consensus baseline, but since they can only be recorded accurately at the point of production, authoring them is recommended. If model cards and data cards are maintained, their contents should in particular be linked to the AI BOM.</p><table><thead><tr><th>Cluster</th><th>Recommended fields</th><th>Reason to author</th></tr></thead><tbody><tr><td>Metadata</td><td>SBOM version, author signature, tool name and version, generation context</td><td>Securing integrity and traceability</td></tr><tr><td>System level</td><td>Data flow, data usage, input/output properties, intended application domain</td><td>Basis for downstream risk assessment</td></tr><tr><td>Model</td><td>Model description and lineage, model hash value and algorithm, model properties, input/output properties, training properties, external references</td><td>Reproducibility and integrity verification, linkage to model cards</td></tr><tr><td>Dataset</td><td>Dataset description, dataset hash, statistical properties, dataset sensitivity, dependency relationships</td><td>Basis for data lawfulness and risk assessment</td></tr><tr><td>Security and metrics</td><td>Security controls, security assertions, vulnerability references, security metrics, operational metrics</td><td>Linkage to cybersecurity risk management</td></tr></tbody></table><h2 id="4-model-hashes-and-integrity">4. Model Hashes and Integrity</h2><p>The model hash value and algorithm are optional under the consensus baseline, but the recommendation is strong. Recording the hash of the weight file or model artifact lets downstream parties verify model integrity. For the hash algorithm, use hash function names from the Internet Assigned Numbers Authority (IANA), and use algorithms approved by the National Institute of Standards and Technology (NIST).</p><h2 id="5-dataset-provenance-and-sensitivity">5. Dataset Provenance and Sensitivity</h2><p>The production team knows the provenance of the training dataset best. Record the source, the collection method, the preprocessing and labeling steps, and whether synthetic data was used, and indicate whether personally identifiable information, copyrighted data, or sensitive data is included. This information serves as the basis for meeting the training data documentation obligations of the AI Act and the training data overview requirements of Korea&rsquo;s Framework Act on Artificial Intelligence.</p><h2 id="6-post-authoring-checklist">6. Post-Authoring Checklist</h2><ul><li>Are all the required fields in Section 2 filled in?</li><li>Among the recommended fields in Section 3, have those obtainable from model cards or data cards been linked?</li><li>Are licenses stated separately for the model weights and for the dataset?</li><li>Is the lifecycle stage at the time of generation recorded?</li><li>When the model or dataset is updated, are the version and timestamp updated as well?</li></ul>
]]></content:encoded></item><item><title>Supplier AI BOM Submission Requirements</title><link>https://haksungjang.github.io/en/research/2026-ai-bom-requirements/supplier-requirements/</link><pubDate>Mon, 29 Jun 2026 00:00:00 +0000</pubDate><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Haksung Jang</dc:creator><guid>https://haksungjang.github.io/en/research/2026-ai-bom-requirements/supplier-requirements/</guid><description>Requirements for the AI BOM that a supplier providing AI models or systems to your organization must submit. Defines the standard data format, the information that must be included, identifier rules, and the requirements for licensing, provenance, and sensitivity.</description><content:encoded>&lt;![CDATA[<div class="alert alert-info" role="alert"><p>This article was written with Claude Code, and the key facts cited here were cross-checked against primary sources.</p></div><p>This document defines the requirements for the AI Bill of Materials (AI BOM) that a supplier providing AI models or AI systems to your organization must submit. It extends the existing Software Bill of Materials (SBOM) submission requirements to models and datasets, and the required items were derived from the supplier column of the<a href="/en/research/2026-ai-bom-requirements/">AI BOM Field Requirements Matrix</a>.</p><h2 id="1-standard-data-format">1. Standard Data Format</h2><p>The AI BOM must be submitted in a machine-readable standard format. The following two formats are accepted.</p><table><thead><tr><th>Format</th><th>Version</th><th>AI representation</th><th>Notes</th></tr></thead><tbody><tr><td>SPDX</td><td>3.0 or later</td><td><code>AIPackage</code> in the AI Profile,<code>DatasetPackage</code> in the Dataset Profile</td><td>Specifies model and dataset fields most tightly</td></tr><tr><td>CycloneDX</td><td>1.6 or later</td><td><code>machine-learning-model</code> and<code>data</code> component types,<code>modelCard</code></td><td>Strong on vulnerability (VEX) linkage</td></tr></tbody></table><p>Both formats are accepted on equal terms, but SPDX 3.0, which enforces the required properties of models and datasets at the format level, is recommended. CycloneDX below 1.6 and SPDX 2.x have no AI-specific profile and are not accepted as submission formats.</p><h2 id="2-information-that-must-be-included">2. Information That Must Be Included</h2><p>The following items must be included in every submitted AI BOM. Items whose values cannot be confirmed must not be left blank; they must be marked explicitly as &ldquo;unknown.&rdquo;</p><h3 id="21-document-metadata">2.1 Document Metadata</h3><table><thead><tr><th>Item</th><th>Description</th></tr></thead><tbody><tr><td>Author</td><td>The entity that generated the AI BOM. The formal name of the operating entity, not the tool</td></tr><tr><td>Data format name</td><td>SPDX or CycloneDX</td></tr><tr><td>Data format version</td><td>e.g., SPDX 3.0.1, CycloneDX 1.6</td></tr><tr><td>Timestamp</td><td>Date and time of the last update (ISO 8601 or RFC 9557)</td></tr><tr><td>Dependency relationships</td><td>Containment and derivation relationships among components</td></tr></tbody></table><h3 id="22-system-level-information">2.2 System-Level Information</h3><table><thead><tr><th>Item</th><th>Description</th></tr></thead><tbody><tr><td>System name</td><td>An identifiable name for the supplied AI system</td></tr><tr><td>System components</td><td>The AI models, databases, and software included in the system</td></tr><tr><td>System producer</td><td>The entity that created the system</td></tr><tr><td>System version</td><td>The version of the supplied system</td></tr></tbody></table><h3 id="23-model-information">2.3 Model Information</h3><table><thead><tr><th>Item</th><th>Description</th></tr></thead><tbody><tr><td>Model name</td><td>The name assigned by the model producer</td></tr><tr><td>Model identifier</td><td>A machine-readable identifier such as a PURL or CPE</td></tr><tr><td>Model version</td><td>The version of the model</td></tr><tr><td>Model producer</td><td>The entity involved in pretraining, post-training, or fine-tuning</td></tr><tr><td>Model license</td><td>The license type, including whether it is open weight, and a link to the license document</td></tr></tbody></table><h3 id="24-dataset-information">2.4 Dataset Information</h3><table><thead><tr><th>Item</th><th>Description</th></tr></thead><tbody><tr><td>Dataset name</td><td>The name of the dataset used for training or evaluation</td></tr><tr><td>Dataset identifier</td><td>The dataset URL or URI</td></tr><tr><td>Dataset provenance</td><td>Source, collection method, preprocessing and labeling steps, and whether synthetic data was used</td></tr><tr><td>Dataset sensitivity</td><td>Whether personally identifiable information, copyrighted data, or other sensitive data is included</td></tr><tr><td>Dataset license</td><td>The dataset license type and a link to the document</td></tr></tbody></table><h3 id="25-security-information">2.5 Security Information</h3><table><thead><tr><th>Item</th><th>Description</th></tr></thead><tbody><tr><td>Vulnerability referencing</td><td>A link to the database or repository providing known vulnerability information for the model and system</td></tr></tbody></table><p>Vulnerability referencing is optional under the consensus criteria, but it is treated as required for supplier submissions because the Cyber Resilience Act and U.S. Food and Drug Administration (FDA) guidance require it directly.</p><h2 id="3-identifier-rules">3. Identifier Rules</h2><p>Models and datasets must be identified with machine-readable standard identifiers.</p><ul><li>Model identifiers use a Package URL (PURL) or Common Platform Enumeration (CPE). Native identifiers such as a model repository path or commit hash may be provided alongside these.</li><li>Dataset identifiers use an accessible URL or URI.</li><li>If multiple identifiers exist, all of them must be included.</li></ul><h2 id="4-strengthened-requirements-for-licensing-provenance-and-sensitivity">4. Strengthened Requirements for Licensing, Provenance, and Sensitivity</h2><p>Unlike existing software SBOM requirements, the AI BOM enforces the following three items with particular strictness.</p><p>Licensing must be stated separately for the model weights and the dataset. The submission must distinguish whether the model is open weight, open architecture, or open data, and must provide a link to the license document. Dataset provenance must go beyond a simple source statement to include the collection method (web crawling versus a commercial agreement), preprocessing and labeling steps, and whether synthetic data was used. Dataset sensitivity must indicate whether personally identifiable information, copyrighted data, or sensitive data such as financial or medical data is included.</p><h2 id="5-sample-document">5. Sample Document</h2><p>The following is a minimal AI BOM skeleton in CycloneDX 1.6 format. An actual submission must fill in all the required items from Section 2 above.</p><div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-json" data-lang="json"><span style="display:flex;"><span><span style="color:#000;font-weight:bold">{</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"bomFormat"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"CycloneDX"</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"specVersion"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"1.6"</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"metadata"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#000;font-weight:bold">{</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"timestamp"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"2026-06-29T09:00:00Z"</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"authors"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#000;font-weight:bold">[{</span><span style="color:#204a87;font-weight:bold">"name"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"Supplier legal name"</span><span style="color:#000;font-weight:bold">}],</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"component"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#000;font-weight:bold">{</span><span style="color:#204a87;font-weight:bold">"type"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"application"</span><span style="color:#000;font-weight:bold">,</span><span style="color:#204a87;font-weight:bold">"name"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"Supplied AI system"</span><span style="color:#000;font-weight:bold">,</span><span style="color:#204a87;font-weight:bold">"version"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"1.0.0"</span><span style="color:#000;font-weight:bold">}</span></span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">},</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"components"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#000;font-weight:bold">[</span></span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">{</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"type"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"machine-learning-model"</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"name"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"Supplied model name"</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"version"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"1.0"</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"bom-ref"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"pkg:huggingface/org/model@1.0"</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"supplier"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#000;font-weight:bold">{</span><span style="color:#204a87;font-weight:bold">"name"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"Model producer"</span><span style="color:#000;font-weight:bold">},</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"licenses"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#000;font-weight:bold">[{</span><span style="color:#204a87;font-weight:bold">"license"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#000;font-weight:bold">{</span><span style="color:#204a87;font-weight:bold">"id"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"Apache-2.0"</span><span style="color:#000;font-weight:bold">}</span><span style="color:#000;font-weight:bold">}],</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"modelCard"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#000;font-weight:bold">{</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"modelParameters"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#000;font-weight:bold">{</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"datasets"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#000;font-weight:bold">[</span></span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">{</span><span style="color:#204a87;font-weight:bold">"type"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"dataset"</span><span style="color:#000;font-weight:bold">,</span><span style="color:#204a87;font-weight:bold">"name"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"Training dataset name"</span><span style="color:#000;font-weight:bold">,</span><span style="color:#204a87;font-weight:bold">"classification"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"public"</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"governance"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#000;font-weight:bold">{</span><span style="color:#204a87;font-weight:bold">"owners"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#000;font-weight:bold">[{</span><span style="color:#204a87;font-weight:bold">"organization"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#000;font-weight:bold">{</span><span style="color:#204a87;font-weight:bold">"name"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"Data source"</span><span style="color:#000;font-weight:bold">}</span><span style="color:#000;font-weight:bold">}]</span><span style="color:#000;font-weight:bold">}</span><span style="color:#000;font-weight:bold">}</span></span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">]</span></span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">}</span></span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">}</span></span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">}</span></span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">],</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"vulnerabilities"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#000;font-weight:bold">[]</span></span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">}</span></span></span></code></pre></div><h2 id="6-pre-submission-verification-checklist">6. Pre-Submission Verification Checklist</h2><p>Suppliers must confirm the following before submission.</p><ul><li>Is the format SPDX 3.0 or later, or CycloneDX 1.6 or later?</li><li>Are all required items from Section 2 filled in, or explicitly marked &ldquo;unknown&rdquo;?</li><li>Are the model and dataset identified with standard identifiers?</li><li>Is a license stated for both the model weights and the dataset?</li><li>Are dataset provenance and sensitivity indicated?</li><li>Is a vulnerability reference link provided?</li><li>Was it generated at a point in time after the build or model release was complete?</li></ul><p>For detailed inspection criteria, see the<a href="/en/research/2026-ai-bom-requirements/ingestion-checklist/">Ingestion Vetting Checklist</a>.</p>
]]></content:encoded></item><item><title>Introduction to SPDX 3.0 and Enterprise Adoption Strategy</title><link>https://haksungjang.github.io/en/blog/2024/09/06/introduction-to-spdx-3.0-and-enterprise-adoption-strategy/</link><pubDate>Fri, 06 Sep 2024 00:00:00 +0000</pubDate><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Haksung Jang</dc:creator><guid>https://haksungjang.github.io/en/blog/2024/09/06/introduction-to-spdx-3.0-and-enterprise-adoption-strategy/</guid><description>1. Introduction to SPDX 3.0 SPDX (Software Package Data Exchange) is an open standard for communicating software component, license, copyright, and security information in a standardized way. SPDX 3.0 is the latest version of this standard, released in April 2024, and is a major update that significantly improves the transparency and security of the software supply chain[2].
Definition and Purpose of SPDX SPDX is a Linux Foundation project that provides a standard format for sharing important information related to software packages. Its main purposes are as follows:</description><content:encoded>&lt;![CDATA[<h2 id="1-introduction-to-spdx-30">1. Introduction to SPDX 3.0</h2><p>SPDX (Software Package Data Exchange) is an open standard for communicating software component, license, copyright, and security information in a standardized way. SPDX 3.0 is the latest version of this standard, released in April 2024, and is a major update that significantly improves the transparency and security of the software supply chain[2].</p><p><img src="/blog/2024/09/06/spdx-3.0-%EC%86%8C%EA%B0%9C%EC%99%80-%EA%B8%B0%EC%97%85-%EB%8F%84%EC%9E%85-%EC%A0%84%EB%9E%B5/featured_SPDX30.png" alt="Featured image for SPDX 3.0"/><h3 id="definition-and-purpose-of-spdx">Definition and Purpose of SPDX</h3><p>SPDX is a Linux Foundation project that provides a standard format for sharing important information related to software packages. Its main purposes are as follows:</p><ul><li>Providing transparency of software components</li><li>Improving license compliance</li><li>Supporting security vulnerability management</li><li>Enhancing the reliability of the software supply chain</li></ul><h3 id="key-changes-in-spdx-30">Key Changes in SPDX 3.0</h3><p>SPDX 3.0 brings significant changes compared to previous versions:</p><ol><li><strong>Modular structure</strong>: SPDX 3.0 consists of a core model and multiple profiles, allowing it to flexibly address a variety of use cases.</li><li><strong>Improved extensibility</strong>: The new version makes it easy to add custom fields and relationships, enabling it to accommodate future requirements.</li><li><strong>Support for various profiles</strong>: It provides various profiles such as Software, Security, License, Build, and AI/ML to meet the requirements of specific domains.</li><li><strong>Enhanced data model</strong>: It can express relationships between entities more clearly, allowing complex software structures to be described more accurately.</li></ol><h3 id="significance-of-spdx-30">Significance of SPDX 3.0</h3><p>SPDX 3.0 is important for enterprise open source management for the following reasons:</p><ol><li><strong>Standardization of SBOM generation</strong>: It provides a standard format for generating a Software Bill of Materials (SBOM), facilitating information exchange between organizations.</li><li><strong>Support for regulatory compliance</strong>: It meets the SBOM minimum requirements of the US NTIA and complies with various international standards and regulations.</li><li><strong>Enhanced security</strong>: It improves vulnerability management through integration with CVE information and strengthens software supply chain security.</li><li><strong>Global standardization</strong>: It has been adopted as ISO/IEC 5962:2021, becoming an internationally recognized standard[2].</li></ol><p>SPDX 3.0 is a powerful tool that greatly improves transparency, security, and compliance throughout the software development and distribution process. By understanding and applying this standard, enterprise open source managers can modernize their organization&rsquo;s software management processes and reduce risk.</p><p>Citations:<br>
[1]<a href="https://fossa.com/blog/understanding-using-spdx-license-identifiers-license-expressions/">https://fossa.com/blog/understanding-using-spdx-license-identifiers-license-expressions/</a><br>
[2]<a href="https://www.linuxfoundation.org/press/spdx-3-revolutionizes-software-management-in-systems-with-enhanced-functionality-and-streamlined-use-cases">https://www.linuxfoundation.org/press/spdx-3-revolutionizes-software-management-in-systems-with-enhanced-functionality-and-streamlined-use-cases</a><br>
[3]<a href="https://fossa.com/learn/spdx">https://fossa.com/learn/spdx</a><br>
[4]<a href="https://fossa.com/blog/sbom-examples-explained/">https://fossa.com/blog/sbom-examples-explained/</a><br>
[5]<a href="https://ossna2023.sched.com/">https://ossna2023.sched.com</a><br>
[6]<a href="https://ossna2023.sched.com/list/descriptions/">https://ossna2023.sched.com/list/descriptions/</a><br>
[7]<a href="https://fossa.com/blog/spdx-3-0/">https://fossa.com/blog/spdx-3-0/</a><br/><h2 id="2-key-features-of-spdx-30">2. Key Features of SPDX 3.0</h2><p>SPDX 3.0 is the latest version of software package data exchange, offering significantly improved features compared to previous versions. The key features are as follows:</p><h3 id="modular-structure">Modular Structure</h3><p>SPDX 3.0 introduces a modular structure that greatly improves flexibility and extensibility[1][5]. This structure consists of the following elements:</p><ul><li><strong>Core Model</strong>: Defines the core elements that form the basis of every SPDX document.</li><li><strong>Profiles</strong>: Provide additional information and functionality tailored to specific use cases.</li></ul><p>This modular approach allows users to selectively use only the information they need, reducing complexity and increasing efficiency.</p><h3 id="improved-extensibility">Improved Extensibility</h3><p>SPDX 3.0 is designed to make it easy to add custom fields and relationships[5]. This provides the following benefits:</p><ul><li>Ability to respond quickly to new technologies and requirements</li><li>Ability to easily incorporate industry-specific requirements</li><li>Ability to flexibly adapt to future changes in the software ecosystem</li></ul><h3 id="support-for-various-use-cases">Support for Various Use Cases</h3><p>SPDX 3.0 supports various use cases through six main profiles[7]:</p><ol><li><strong>Security Profile</strong>: Includes vulnerability information and security-related metadata</li><li><strong>License Profile</strong>: Provides detailed license information and compliance data</li><li><strong>AI Profile</strong>: Includes information related to AI model training and characterization</li><li><strong>Dataset Profile</strong>: Provides information on dataset provenance and characteristics</li><li><strong>Software Packaging Profile</strong>: Includes package structure and dependency information</li><li><strong>Build Process Profile</strong>: Provides detailed information about the software build process</li></ol><p>These profiles help software engineers, security experts, and legal and compliance professionals use SPDX more easily[7].</p><h3 id="enhanced-data-model">Enhanced Data Model</h3><p>SPDX 3.0 provides an enhanced data model that can express relationships between entities more clearly[1]. This enables:</p><ul><li>More accurate description of complex software structures</li><li>Clearer expression of dependencies between software components</li><li>More granular linking of security and license information</li></ul><h3 id="compliance-with-international-standards">Compliance with International Standards</h3><p>SPDX 3.0 complies with the ISO/IEC 5962:2021 standard, which has significant implications for global software supply chain management[5][6]. This enables:</p><ul><li>Generation of SBOMs in an internationally recognized format</li><li>Compliance with various regulatory requirements (e.g., US government EO 14028, EU Cyber Resilience Act)</li><li>Improved consistency and reliability of software information exchange between organizations</li></ul><p>These key features of SPDX 3.0 greatly improve the transparency, security, and compliance of the software supply chain, and play an important role in meeting modern software development and management requirements.</p><p>Citations:<br>
[1]<a href="https://scribesecurity.com/ko/blog/spdx-vs-cyclonedx-sbom-formats-compared/">https://scribesecurity.com/ko/blog/spdx-vs-cyclonedx-sbom-formats-compared/</a><br>
[2]<a href="https://github.com/spdx/spdx-3-model/releases">https://github.com/spdx/spdx-3-model/releases</a><br>
[3]<a href="https://olis.or.kr/license/licenseSPDX.do?mapcode=010107">https://olis.or.kr/license/licenseSPDX.do?mapcode=010107</a><br>
[4]<a href="https://ettrends.etri.re.kr/ettrends/203/0905203008/0905203008.html">https://ettrends.etri.re.kr/ettrends/203/0905203008/0905203008.html</a><br>
[5]<a href="https://www.linuxfoundation.org/press/spdx-3-revolutionizes-software-management-in-systems-with-enhanced-functionality-and-streamlined-use-cases">https://www.linuxfoundation.org/press/spdx-3-revolutionizes-software-management-in-systems-with-enhanced-functionality-and-streamlined-use-cases</a><br>
[6]<a href="https://www.prnewswire.com/news-releases/spdx-3-0-revolutionizes-software-management-in-systems-with-enhanced-functionality-and-streamlined-use-cases-302118321.html">https://www.prnewswire.com/news-releases/spdx-3-0-revolutionizes-software-management-in-systems-with-enhanced-functionality-and-streamlined-use-cases-302118321.html</a><br>
[7]<a href="https://www.gttkorea.com/news/articleView.html?idxno=5131">https://www.gttkorea.com/news/articleView.html?idxno=5131</a><br/><h2 id="3-spdx-30-profiles">3. SPDX 3.0 Profiles</h2><p>The concept of profiles introduced in SPDX 3.0 is a key feature that enables SPDX data to be organized and managed according to various use cases. Each profile defines the information and structure required for a specific domain or use case.</p><h3 id="core-profile">Core Profile</h3><p>The Core Profile defines the core elements that form the basis of every SPDX document.</p><ul><li><strong>Key components</strong>:<ul><li>Element: The base class for all SPDX objects</li><li>Artifact: A class representing a software component</li><li>Agent: A class representing a person, organization, tool, etc.</li><li>Relationship: A class defining relationships between entities</li></ul></li><li><strong>Purpose</strong>: Provides the basic structure and information commonly used by all other profiles.</li><li><strong>Example use</strong>: Every SPDX document is built on the Core Profile, with information from other profiles added on top of it.</li></ul><h3 id="software-profile">Software Profile</h3><p>The Software Profile provides detailed information related to software packages.</p><ul><li><strong>Key components</strong>:<ul><li>Package: Information about a software package</li><li>File: Information about an individual file</li><li>Snippet: Information about a portion of a file</li></ul></li><li><strong>Purpose</strong>: Describes the structure, components, and metadata of software in detail.</li><li><strong>Example use</strong>: Used when documenting the structure and components of an open source library.</li></ul><h3 id="security-profile">Security Profile</h3><p>The Security Profile covers security-related information about software.</p><ul><li><strong>Key components</strong>:<ul><li>Vulnerability: Vulnerability information</li><li>Assessment: Vulnerability assessment information</li></ul></li><li><strong>Purpose</strong>: Provides information on software security vulnerabilities and related assessments.</li><li><strong>Example use</strong>: Used when including Common Vulnerabilities and Exposures (CVE) information in an SPDX document.</li></ul><h3 id="license-profile">License Profile</h3><p>The License Profile covers software license-related information in detail.</p><ul><li><strong>Key components</strong>:<ul><li>License: License information</li><li>LicenseExpression: Complex license expressions</li></ul></li><li><strong>Purpose</strong>: Describes software license information accurately and in detail.</li><li><strong>Example use</strong>: Used when documenting the license information of open source software.</li></ul><h3 id="build-profile">Build Profile</h3><p>The Build Profile provides information about the software build process.</p><ul><li><strong>Key components</strong>:<ul><li>BuildStep: Build step information</li><li>BuildTool: Build tool information</li></ul></li><li><strong>Purpose</strong>: Provides detailed information about how software is compiled and packaged.</li><li><strong>Example use</strong>: Used when documenting the build process of a CI/CD pipeline.</li></ul><h3 id="aiml-profile">AI/ML Profile</h3><p>The AI/ML Profile covers information specific to artificial intelligence and machine learning models.</p><ul><li><strong>Key components</strong>:<ul><li>AIModel: AI model information</li><li>Dataset: Training dataset information</li></ul></li><li><strong>Purpose</strong>: Describes the characteristics, training data, performance metrics, and other aspects of AI/ML models.</li><li><strong>Example use</strong>: Used when documenting the structure and training dataset of a deep learning model.</li></ul><p>Each profile reflects the modular structure of SPDX 3.0, and users can select the appropriate profile as needed to generate SPDX documents. This allows various aspects of the software supply chain to be documented and managed effectively.</p><p>Citations:<br>
[1]<a href="https://spdx.dev/leveraging-profiles-for-license-compliance-insights-from-spdx-mini-summit/">https://spdx.dev/leveraging-profiles-for-license-compliance-insights-from-spdx-mini-summit/</a><br>
[2]<a href="https://spdx.dev/providing-transparency-at-software-developments-core-process-build-time/">https://spdx.dev/providing-transparency-at-software-developments-core-process-build-time/</a><br>
[3]<a href="https://spdx.github.io/spdx-spec/v2.3/SPDX-license-list/">https://spdx.github.io/spdx-spec/v2.3/SPDX-license-list/</a><br>
[4]<a href="https://spdx.dev/capturing-software-vulnerability-data-in-spdx-3-0/">https://spdx.dev/capturing-software-vulnerability-data-in-spdx-3-0/</a><br>
[5]<a href="https://www.linuxfoundation.org/press/spdx-3-revolutionizes-software-management-in-systems-with-enhanced-functionality-and-streamlined-use-cases">https://www.linuxfoundation.org/press/spdx-3-revolutionizes-software-management-in-systems-with-enhanced-functionality-and-streamlined-use-cases</a><br>
[6]<a href="https://spdx.dev/understanding-spdx-profiles/">https://spdx.dev/understanding-spdx-profiles/</a><br>
[7]<a href="https://github.com/spdx/spdx-3-model/actions">https://github.com/spdx/spdx-3-model/actions</a><br>
[8]<a href="https://spdx.github.io/spdx-spec/v3.0/model/AI/AI/">https://spdx.github.io/spdx-spec/v3.0/model/AI/AI/</a><br/><h2 id="4-spdx-30-data-model">4. SPDX 3.0 Data Model</h2><p>The data model of SPDX 3.0 is designed to be more flexible and extensible than previous versions. This model better reflects the complexity of the software supply chain and supports a variety of use cases.</p><h3 id="key-entities-and-relationships">Key Entities and Relationships</h3><ol><li><strong>Element</strong><ul><li>The base class for all major objects in SPDX 3.0.</li><li>Every Element has a unique SPDX ID.</li></ul></li><li><strong>Artifact</strong><ul><li>Represents a software component (e.g., package, file, snippet).</li><li>Includes attributes such as name, version, and supplier.</li></ul></li><li><strong>Agent</strong><ul><li>Represents an entity involved in creating the SPDX document, such as a person, organization, or tool.</li></ul></li><li><strong>Relationship</strong><ul><li>Defines relationships between entities (e.g., dependency, containment).</li><li>Specifies the source, target, and relationship type.</li></ul></li><li><strong>LifecycleScopedRelationship</strong><ul><li>Represents a relationship specific to a particular software lifecycle stage.</li></ul></li><li><strong>Annotation</strong><ul><li>Provides additional information or comments about an entity.</li></ul></li></ol><h3 id="identifier-scheme">Identifier Scheme</h3><p>SPDX 3.0 introduces a more robust and flexible identifier scheme:</p><ul><li><strong>SPDX ID</strong>: Provides a unique identifier for every Element.</li><li><strong>External identifiers</strong>: Can reference identifiers from other systems (e.g., CVE, PURL).</li><li><strong>Namespaces</strong>: Clarify the scope of identifiers and prevent collisions.</li></ul><h3 id="metadata-management">Metadata Management</h3><ol><li><strong>CreationInfo</strong><ul><li>Includes metadata about the SPDX document itself.</li><li>Provides information such as creation date, author, and tool version.</li></ul></li><li><strong>Profile-specific metadata</strong><ul><li>Defines metadata fields specific to each profile (Software, Security, License, etc.).</li></ul></li></ol><h3 id="extensibility-mechanisms">Extensibility Mechanisms</h3><ol><li><strong>Custom attributes</strong><ul><li>Can include additional user-defined attributes beyond the standard fields.</li></ul></li><li><strong>External references</strong><ul><li>Provides links to external systems or documents.</li></ul></li></ol><h3 id="data-types">Data Types</h3><p>SPDX 3.0 supports various data types:</p><ul><li>Strings, integers, booleans, date/time</li><li>Enumerations (e.g., license type, relationship type)</li><li>Composite types (e.g., version range, checksum)</li></ul><h3 id="serialization-formats">Serialization Formats</h3><p>The SPDX 3.0 data model can be serialized into various formats:</p><ul><li>JSON-LD</li><li>YAML</li><li>RDF</li><li>XML</li></ul><p>This support for multiple formats facilitates integration with other systems.</p><h3 id="profile-support">Profile Support</h3><p>The data model is designed to support various profiles:</p><ul><li>Core Profile: Basic elements common to every SPDX document</li><li>Software Profile: Information related to software packages</li><li>Security Profile: Vulnerability and security-related data</li><li>License Profile: Detailed license information</li><li>AI/ML Profile: Metadata related to AI models</li><li>Dataset Profile: Information related to datasets</li></ul><p>Each profile defines the additional fields and relationships required for a specific use case. The data model of SPDX 3.0 can comprehensively express the complexity of the software supply chain while providing the flexibility to meet the requirements of specific domains. This enables organizations to manage and share more accurate and detailed information about their software components.</p><h2 id="5-spdx-30-implementation-guide">5. SPDX 3.0 Implementation Guide</h2><p>This section provides a detailed guide for effectively implementing SPDX 3.0.</p><h3 id="tools-and-libraries">Tools and Libraries</h3><p>The main tools and libraries that support SPDX 3.0 are as follows:</p><ol><li><strong>SPDX Java Library</strong><ul><li>GitHub:<a href="https://github.com/spdx/tools-java">https://github.com/spdx/tools-java</a></li><li>Features: Parsing, generating, converting, and validating SPDX documents</li><li>Usage: Add as a Maven dependency for use in Java projects</li></ul></li><li><strong>SPDX Python Library</strong><ul><li>GitHub:<a href="https://github.com/spdx/tools-python">https://github.com/spdx/tools-python</a></li><li>Features: Parsing, generating, and validating SPDX documents</li><li>Characteristics: Provides experimental support for SPDX 3.0</li></ul></li><li><strong>SPDX Online Tools</strong><ul><li>Website:<a href="https://tools.spdx.org/">https://tools.spdx.org</a></li><li>Features: Web-based SPDX document generation and validation</li></ul></li><li><strong>FOSSology</strong><ul><li>GitHub:<a href="https://github.com/fossology/fossology">https://github.com/fossology/fossology</a></li><li>Features: An open source compliance tool that supports SPDX document generation</li></ul></li><li><strong>SPDX SBOM Generator</strong><ul><li>GitHub:<a href="https://github.com/opensbom-generator/spdx-sbom-generator">https://github.com/opensbom-generator/spdx-sbom-generator</a></li><li>Features: Generates SPDX SBOMs for projects in various programming languages</li></ul></li></ol><p>These tools can be used to generate, parse, and validate SPDX 3.0 documents.</p><h3 id="file-formats-json-yaml-rdf">File Formats (JSON, YAML, RDF)</h3><p>SPDX 3.0 supports various file formats:</p><ol><li><p><strong>JSON-LD</strong></p><ul><li><p>The most recommended format</p></li><li><p>Example:</p><div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-json" data-lang="json"><span style="display:flex;"><span><span style="color:#000;font-weight:bold">{</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"@context"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"&lt;https://spdx.org/spdx-3.0-context.jsonld&gt;"</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"@type"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"SpdxDocument"</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"name"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"Example SPDX 3.0 Document"</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"elements"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#000;font-weight:bold">[</span></span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">{</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"@type"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"Package"</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"name"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"ExamplePackage"</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"version"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"1.0.0"</span></span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">}</span></span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">]</span></span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">}</span></span></span></code></pre></div></li></ul></li><li><p><strong>YAML</strong></p><ul><li><p>A human-readable format</p></li><li><p>Example:</p><div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#000">---</span><span style="color:#f8f8f8"/></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">$schema</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8"/><span style="color:#000">&lt;https://spdx.org/spdx-3.0-schema.json&gt;</span><span style="color:#f8f8f8"/></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">spdxVersion</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8"/><span style="color:#000">SPDX-3.0</span><span style="color:#f8f8f8"/></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8"/><span style="color:#000">Example SPDX 3.0 Document</span><span style="color:#f8f8f8"/></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">elements</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8"/></span></span><span style="display:flex;"><span><span style="color:#f8f8f8"/>-<span style="color:#204a87;font-weight:bold">type</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8"/><span style="color:#000">Package</span><span style="color:#f8f8f8"/></span></span><span style="display:flex;"><span><span style="color:#f8f8f8"/><span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8"/><span style="color:#000">ExamplePackage</span><span style="color:#f8f8f8"/></span></span><span style="display:flex;"><span><span style="color:#f8f8f8"/><span style="color:#204a87;font-weight:bold">version</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8"/><span style="color:#0000cf;font-weight:bold">1.0.0</span><span style="color:#f8f8f8"/></span></span></code></pre></div></li></ul></li><li><p><strong>RDF</strong></p><ul><li><p>Suitable for semantic web applications</p></li><li><p>Example:</p><div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">&lt;rdf:RDF</span><span style="color:#c4a000">xmlns:rdf=</span><span style="color:#4e9a06">"&lt;http://www.w3.org/1999/02/22-rdf-syntax-ns#&gt;"</span></span></span><span style="display:flex;"><span><span style="color:#c4a000">xmlns:spdx=</span><span style="color:#4e9a06">"&lt;http://spdx.org/rdf/terms#&gt;"</span><span style="color:#204a87;font-weight:bold">&gt;</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">&lt;spdx:SpdxDocument&gt;</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">&lt;spdx:name&gt;</span>Example SPDX 3.0 Document<span style="color:#204a87;font-weight:bold">&lt;/spdx:name&gt;</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">&lt;spdx:element&gt;</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">&lt;spdx:Package&gt;</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">&lt;spdx:name&gt;</span>ExamplePackage<span style="color:#204a87;font-weight:bold">&lt;/spdx:name&gt;</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">&lt;spdx:versionInfo&gt;</span>1.0.0<span style="color:#204a87;font-weight:bold">&lt;/spdx:versionInfo&gt;</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">&lt;/spdx:Package&gt;</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">&lt;/spdx:element&gt;</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">&lt;/spdx:SpdxDocument&gt;</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">&lt;/rdf:RDF&gt;</span></span></span></code></pre></div></li></ul></li></ol><p>Each format is suited to specific use cases, and developers can choose the appropriate format based on their project requirements.</p><h3 id="migrating-from-existing-spdx-2x">Migrating from Existing SPDX 2.x</h3><p>The process of migrating from SPDX 2.x to 3.0 is as follows:</p><ol><li><strong>Understand the structural changes</strong><ul><li>Familiarize yourself with the modular structure and profile concept of SPDX 3.0</li><li>Identify new fields and relationship types</li></ul></li><li><strong>Update tools</strong><ul><li>Upgrade to the latest versions of tools and libraries that support SPDX 3.0</li></ul></li><li><strong>Convert documents</strong><ul><li>Use the<code>spdx_tools.spdx3.bump_from_spdx2.spdx_document</code> module of the SPDX Python Library</li><li>Convert SPDX 2.x documents to 3.0 using the<code>bump_spdx_document()</code> function</li></ul></li><li><strong>Add new fields</strong><ul><li>Add fields newly introduced in SPDX 3.0 (e.g., AI/ML-related information)</li></ul></li><li><strong>Redefine relationships</strong><ul><li>Redefine existing relationships using the new relationship types in SPDX 3.0</li></ul></li><li><strong>Apply profiles</strong><ul><li>Select and apply the appropriate SPDX 3.0 profiles</li></ul></li><li><strong>Validate</strong><ul><li>Use SPDX 3.0 validation tools to verify the validity of the converted document</li></ul></li><li><strong>Test and integrate</strong><ul><li>Integrate and test the converted SPDX 3.0 document within the existing workflow</li></ul></li></ol><p>During the migration process, it is advisable to actively make use of SPDX community resources and documentation, and to seek expert help if needed.</p><p>By following this implementation guide, organizations can effectively adopt and utilize SPDX 3.0.</p><p>Citations:<br>
[1]<a href="https://www.linuxfoundation.org/press/spdx-3-revolutionizes-software-management-in-systems-with-enhanced-functionality-and-streamlined-use-cases">https://www.linuxfoundation.org/press/spdx-3-revolutionizes-software-management-in-systems-with-enhanced-functionality-and-streamlined-use-cases</a><br>
[2]<a href="https://www.youtube.com/watch?v=iqVk-Sek8Pc">https://www.youtube.com/watch?v=iqVk-Sek8Pc</a><br>
[3]<a href="https://github.com/spdx/Spdx-Java-Library">https://github.com/spdx/Spdx-Java-Library</a><br>
[4]<a href="https://spdx.github.io/spdx-spec/v3.0/annexes/diffs-from-previous-editions/">https://spdx.github.io/spdx-spec/v3.0/annexes/diffs-from-previous-editions/</a><br>
[5]<a href="https://github.com/spdx/spdx-3-model/releases">https://github.com/spdx/spdx-3-model/releases</a><br>
[6]<a href="https://spdx.dev/use/spdx-tools/">https://spdx.dev/use/spdx-tools/</a><br>
[7]<a href="https://github.com/spdx/tools-python/blob/main/README.md">https://github.com/spdx/tools-python/blob/main/README.md</a><br>
[8]<a href="https://fossa.com/learn/spdx">https://fossa.com/learn/spdx</a><br/><h2 id="6-sbom-and-spdx-30">6. SBOM and SPDX 3.0</h2><p>The Software Bill of Materials (SBOM) has become a core element of software supply chain security. SPDX 3.0 provides a powerful framework for generating and managing SBOMs, enabling organizations to track and manage software components more effectively.</p><h3 id="sbom-generation-and-management">SBOM Generation and Management</h3><ol><li><strong>Automated SBOM generation</strong><ul><li>SPDX 3.0 can be integrated into CI/CD pipelines to automatically generate SBOMs[6].</li><li>This enables &ldquo;machine-speed&rdquo; SBOM generation, allowing SBOMs to be updated instantly in step with the software release cycle.</li></ul></li><li><strong>Use of a consistent format</strong><ul><li>SPDX 3.0 provides a standardized SBOM format to ensure consistency[6].</li><li>This facilitates SBOM data exchange between organizations and enables automated analysis.</li></ul></li><li><strong>Regular updates</strong><ul><li>The SBOM must be updated with every software release[6].</li><li>Leveraging the automation features of SPDX 3.0 makes it possible to manage this process efficiently.</li></ul></li><li><strong>Inclusion of metadata</strong><ul><li>SPDX 3.0 allows rich metadata, such as license information and patch status, to be included in the SBOM[6].</li><li>This greatly improves security and compliance management.</li></ul></li></ol><h3 id="improving-sboms-with-spdx-30">Improving SBOMs with SPDX 3.0</h3><ol><li><strong>Modular structure</strong><ul><li>The profile-based structure of SPDX 3.0 can be used to generate SBOMs tailored to various use cases[1].</li><li>Information specific to each profile, such as Software, Security, and License, can be included in the SBOM.</li></ul></li><li><strong>Integration of security vulnerability information</strong><ul><li>The Security Profile of SPDX 3.0 can be used to include vulnerability information directly in the SBOM[1].</li><li>This allows security teams to identify and respond to vulnerabilities more quickly and effectively.</li></ul></li><li><strong>Strengthened license compliance</strong><ul><li>The License Profile of SPDX 3.0 can be used to include detailed license information in the SBOM[2].</li><li>This makes it easier for legal and compliance teams to identify and manage license obligations.</li></ul></li><li><strong>Inclusion of AI/ML model information</strong><ul><li>The AI/ML Profile of SPDX 3.0 can be used to include AI model and dataset information in the SBOM[2].</li><li>This contributes to increasing the transparency and accountability of AI systems.</li></ul></li></ol><h3 id="meeting-ntia-minimum-requirements">Meeting NTIA Minimum Requirements</h3><p>SPDX 3.0 meets the SBOM minimum requirements defined by the National Telecommunications and Information Administration (NTIA)[4][5].</p><ol><li><strong>Basic data fields</strong><ul><li>SPDX 3.0 includes all seven basic data fields required by the NTIA:<ul><li>Supplier Name</li><li>Component Name</li><li>Component Version</li><li>Other Unique Identifiers</li><li>Dependency Relationship</li><li>SBOM Author</li><li>Timestamp</li></ul></li></ul></li><li><strong>Automation and interoperability</strong><ul><li>SPDX 3.0 supports machine-readable formats (JSON-LD, YAML, RDF), meeting the NTIA&rsquo;s automation requirements[5].</li></ul></li><li><strong>Practicability</strong><ul><li>SPDX 3.0 ensures practicability by supporting SBOM generation and management through a variety of tools and libraries.</li></ul></li><li><strong>Extensibility</strong><ul><li>The modular structure of SPDX 3.0 provides the extensibility to accommodate future requirements.</li></ul></li></ol><p>SBOM management using SPDX 3.0 goes beyond simply meeting regulatory requirements — it significantly strengthens an organization&rsquo;s software supply chain security and contributes to greater transparency. This ultimately leads to the construction of a safer and more trustworthy software ecosystem.</p><p>Citations:<br>
[1]<a href="https://spdx.dev/capturing-software-vulnerability-data-in-spdx-3-0/">https://spdx.dev/capturing-software-vulnerability-data-in-spdx-3-0/</a><br>
[2]<a href="https://www.linuxfoundation.org/press/spdx-3-revolutionizes-software-management-in-systems-with-enhanced-functionality-and-streamlined-use-cases">https://www.linuxfoundation.org/press/spdx-3-revolutionizes-software-management-in-systems-with-enhanced-functionality-and-streamlined-use-cases</a><br>
[3]<a href="https://www.legitsecurity.com/blog/best-practices-for-managing-maintaining-sboms">https://www.legitsecurity.com/blog/best-practices-for-managing-maintaining-sboms</a><br>
[4]<a href="https://www.ntia.gov/report/2021/minimum-elements-software-bill-materials-sbom">https://www.ntia.gov/report/2021/minimum-elements-software-bill-materials-sbom</a><br>
[5]<a href="https://cybellum.com/blog/ntia-minimum-elements-for-a-software-bill-of-materials-sbom-a-guide/">https://cybellum.com/blog/ntia-minimum-elements-for-a-software-bill-of-materials-sbom-a-guide/</a><br>
[6]<a href="https://jfrog.com/devops-tools/article/best-practices-for-software-bill-of-materials-management/">https://jfrog.com/devops-tools/article/best-practices-for-software-bill-of-materials-management/</a><br>
[7]<a href="https://about.gitlab.com/blog/2022/10/25/the-ultimate-guide-to-sboms/">https://about.gitlab.com/blog/2022/10/25/the-ultimate-guide-to-sboms/</a><br>
[8]<a href="https://scribesecurity.com/sbom/how-to-generate-an-sbom/">https://scribesecurity.com/sbom/how-to-generate-an-sbom/</a><br/><h2 id="7-security-and-vulnerability-management">7. Security and Vulnerability Management</h2><p>SPDX 3.0 provides powerful features for software security and vulnerability management. This enables organizations to manage the security of their software supply chain more effectively.</p><h3 id="cve-information-integration">CVE Information Integration</h3><p>Integrating Common Vulnerabilities and Exposures (CVE) information into SPDX 3.0 documents is a core element of security management.</p><ol><li><p><strong>How to reference CVEs</strong></p><ul><li><p>SPDX 3.0 uses the<code>ExternalReference</code> class to reference CVE information.</p></li><li><p>Example:</p><div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-json" data-lang="json"><span style="display:flex;"><span><span style="color:#000;font-weight:bold">{</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"@type"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"ExternalReference"</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"referenceType"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"SecurityAdvisory"</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"referenceLocator"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"CVE-2021-44228"</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"referenceCategory"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"CVE"</span></span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">}</span></span></span></code></pre></div></li></ul></li><li><p><strong>Inclusion of detailed CVE information</strong></p><ul><li>Common Vulnerability Scoring System (CVSS) score</li><li>Affected version range</li><li>Patch availability and patch information</li></ul></li><li><p><strong>Automatic CVE updates</strong></p><ul><li>SPDX 3.0 tools can automatically pull CVE information from external sources such as the National Vulnerability Database (NVD) to update SPDX documents.</li></ul></li><li><p><strong>Linking CVE information to components</strong></p><ul><li>SPDX 3.0 can clearly link specific software components with related CVE information.</li><li>This makes it easy to identify and track vulnerable components.</li></ul></li></ol><h3 id="vulnerability-tracking-and-reporting">Vulnerability Tracking and Reporting</h3><p>SPDX 3.0 provides features for effectively tracking and reporting vulnerabilities.</p><ol><li><p><strong>Vulnerability lifecycle management</strong></p><ul><li><p>The entire lifecycle of a vulnerability, including discovery date, report date, and patch date, can be tracked.</p></li><li><p>Example:</p><div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-json" data-lang="json"><span style="display:flex;"><span><span style="color:#000;font-weight:bold">{</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"@type"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"Vulnerability"</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"name"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"CVE-2021-44228"</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"description"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"Log4j RCE vulnerability"</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"discoveredDate"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"2021-12-09"</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"publishedDate"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"2021-12-10"</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"patchedDate"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"2021-12-14"</span></span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">}</span></span></span></code></pre></div></li></ul></li><li><p><strong>Vulnerability severity assessment</strong></p><ul><li><p>The severity of a vulnerability can be assessed and recorded using the CVSS score.</p></li><li><p>Example:</p><div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-json" data-lang="json"><span style="display:flex;"><span><span style="color:#000;font-weight:bold">{</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"@type"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"VulnerabilityAssessment"</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"vulnerability"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"CVE-2021-44228"</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"cvssV3"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#000;font-weight:bold">{</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"baseScore"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#0000cf;font-weight:bold">10.0</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"vectorString"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H"</span></span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">}</span></span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">}</span></span></span></code></pre></div></li></ul></li><li><p><strong>Vulnerability report generation</strong></p><ul><li>Automated vulnerability reports can be generated based on SPDX 3.0 data.</li><li>The report includes the affected components, severity, patch status, and more.</li></ul></li><li><p><strong>Vulnerability trend analysis</strong></p><ul><li>Patterns in vulnerability occurrence over time can be analyzed.</li><li>This allows security teams to establish long-term security strategies.</li></ul></li></ol><h3 id="utilizing-the-security-profile">Utilizing the Security Profile</h3><p>The Security Profile of SPDX 3.0 enables systematic management of security-related information.</p><ol><li><p><strong>Security Profile structure</strong></p><ul><li><code>Vulnerability</code>: A class representing vulnerability information</li><li><code>VulnerabilityAssessment</code>: A class representing vulnerability assessment information</li><li><code>SecurityAdvisory</code>: A class representing security advisories</li></ul></li><li><p><strong>Example use of the Security Profile</strong></p><div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-json" data-lang="json"><span style="display:flex;"><span><span style="color:#000;font-weight:bold">{</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"@type"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"SecurityProfile"</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"vulnerabilities"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#000;font-weight:bold">[</span></span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">{</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"@type"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"Vulnerability"</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"name"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"CVE-2021-44228"</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"description"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"Log4j RCE vulnerability"</span></span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">}</span></span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">],</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"assessments"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#000;font-weight:bold">[</span></span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">{</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"@type"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"VulnerabilityAssessment"</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"vulnerability"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"CVE-2021-44228"</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"cvssV3"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#000;font-weight:bold">{</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"baseScore"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#0000cf;font-weight:bold">10.0</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"vectorString"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H"</span></span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">}</span></span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">}</span></span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">],</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"advisories"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#000;font-weight:bold">[</span></span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">{</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"@type"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"SecurityAdvisory"</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"title"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"Update Log4j to version 2.15.0 or later"</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"description"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"Upgrade Log4j to mitigate CVE-2021-44228"</span></span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">}</span></span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">]</span></span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">}</span></span></span></code></pre></div></li><li><p><strong>Ways to utilize the Security Profile</strong></p><ul><li>Automatically update the Security Profile by integrating with vulnerability scanning tools</li><li>Use as a data source for building security dashboards</li><li>Use as evidence of security posture during compliance audits</li></ul></li><li><p><strong>Security metric tracking</strong></p><ul><li>Security metrics such as the number of open vulnerabilities, average patch time, and the ratio of high-risk vulnerabilities can be tracked based on SPDX 3.0 data.</li></ul></li></ol><p>By leveraging the security and vulnerability management features of SPDX 3.0, organizations can greatly strengthen the security of their software supply chain. Integrating CVE information, systematically tracking and reporting vulnerabilities, and utilizing the Security Profile help security teams respond to threats more effectively and improve the organization&rsquo;s overall security posture.</p><h2 id="8-license-compliance">8. License Compliance</h2><p>SPDX 3.0 provides powerful features for effectively managing software license compliance. This allows organizations to more easily identify and comply with the license obligations of open source and commercial software.</p><h3 id="license-information-management">License Information Management</h3><ol><li><p><strong>License identifiers</strong></p><ul><li>SPDX 3.0 uses standardized license identifiers.</li><li>Example: &ldquo;MIT&rdquo;, &ldquo;Apache-2.0&rdquo;, &ldquo;GPL-3.0-only&rdquo;</li><li>This ensures the consistency and accuracy of license information.</li></ul></li><li><p><strong>Inclusion of license text</strong></p><ul><li><p>The full license text can be included in the SPDX document.</p></li><li><p>Example:</p><div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-json" data-lang="json"><span style="display:flex;"><span><span style="color:#000;font-weight:bold">{</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"@type"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"License"</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"licenseId"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"MIT"</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"name"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"MIT License"</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"text"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"MIT License\\n\\nCopyright (c) [year] [fullname]\\n\\nPermission is hereby granted, ..."</span></span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">}</span></span></span></code></pre></div></li></ul></li><li><p><strong>Custom licenses</strong></p><ul><li>For licenses not on the standard SPDX license list, a custom license can be defined.</li><li>In this case, the &ldquo;LicenseRef-&rdquo; prefix is used.</li><li>Example: &ldquo;LicenseRef-CompanyA-Proprietary&rdquo;</li></ul></li><li><p><strong>License expressions</strong></p><ul><li>Complex license combinations can be expressed.</li><li>Example: &ldquo;(MIT OR Apache-2.0) AND CC-BY-4.0&rdquo;</li></ul></li><li><p><strong>File- and package-level licenses</strong></p><ul><li>License information can be specified at the level of individual files, snippets, or packages.</li><li>This allows for fine-grained license management.</li></ul></li></ol><h3 id="license-compatibility-checking">License Compatibility Checking</h3><p>SPDX 3.0 data can be used to automatically check license compatibility.</p><ol><li><strong>License graph generation</strong><ul><li>A license graph is generated based on the dependencies between software components and the license information of each component.</li></ul></li><li><strong>Compatibility rule definition</strong><ul><li>Compatibility rules between licenses are defined.</li><li>Example: GPL-3.0 is compatible with Apache-2.0, but GPL-2.0 is not compatible with Apache-2.0.</li></ul></li><li><strong>Automatic compatibility checking</strong><ul><li>The license graph is analyzed based on the defined rules to automatically identify compatibility issues.</li></ul></li><li><strong>Conflict resolution suggestions</strong><ul><li>When a license conflict is found, possible resolutions are suggested.</li><li>Example: Using an alternative version of a specific component, requesting a license exception, etc.</li></ul></li><li><strong>Dynamic analysis</strong><ul><li>License compatibility can be checked in real time during the software build process.</li><li>This allows license issues to be identified and resolved early in development.</li></ul></li></ol><h3 id="compliance-report-generation">Compliance Report Generation</h3><p>Detailed license compliance reports can be generated based on SPDX 3.0 data.</p><ol><li><strong>Report components</strong><ul><li>A list of all software components used</li><li>License information for each component</li><li>A summary of license obligations</li><li>Potential license conflicts and resolutions</li><li>Copyright notice text</li></ul></li><li><strong>Obligation tracking</strong><ul><li>Tracks the key obligations of each license and reports on compliance status.</li><li>Example: the obligation to disclose source code, the obligation to provide copyright notice, the obligation to include license text, etc.</li></ul></li><li><strong>Risk assessment</strong><ul><li>Assesses and reports the legal risk of each license and license combination.</li><li>Provides warnings about the use of high-risk licenses.</li></ul></li><li><strong>Compliance workflow integration</strong><ul><li>Report generation can be automated and integrated into regular compliance review processes.</li><li>It can be integrated into a CI/CD pipeline to generate a compliance report with every build or release.</li></ul></li><li><strong>Customized reports</strong><ul><li>Customized reports can be generated to meet the needs of various stakeholders (legal team, development team, management, etc.).</li><li>Example: detailed reports for the legal team, summary reports for management, etc.</li></ul></li><li><strong>History management</strong><ul><li>Changes in compliance status over time can be tracked.</li><li>This makes it possible to measure the effectiveness of license compliance improvement efforts.</li></ul></li></ol><p>By leveraging the license compliance features of SPDX 3.0, organizations can effectively manage and comply with license obligations within a complex software ecosystem. This helps reduce legal risk, improve relationships with the open source community, and increase the transparency and reliability of the overall software development process.</p><h2 id="9-spdx-30-use-cases">9. SPDX 3.0 Use Cases</h2><p>SPDX 3.0 can be used to improve software management and security across a variety of industries. The main use cases are as follows:</p><h3 id="software-supply-chain-security">Software Supply Chain Security</h3><ol><li><strong>Vulnerability identification and management</strong><ul><li>The Security Profile of SPDX 3.0 is used to systematically track vulnerabilities in software components.</li><li>CVE information can be integrated into the SPDX document to assess security risk in real time.</li></ul></li><li><strong>Ensuring supply chain transparency</strong><ul><li>SPDX 3.0 makes it possible to clearly document all components of software and their provenance.</li><li>This helps reduce the risk of malicious code injection or supply chain attacks.</li></ul></li><li><strong>Build process security</strong><ul><li>The Build Profile of SPDX 3.0 can be used to ensure the integrity of the software build process.</li><li>Documenting information such as build tools, environment, and scripts supports reproducible builds.</li></ul></li><li><strong>Rapid application of security patches</strong><ul><li>SPDX 3.0 documents make it possible to quickly identify and patch vulnerable components.</li><li>The security update process can be optimized by integrating with automated tools.</li></ul></li></ol><h3 id="open-source-management">Open Source Management</h3><ol><li><strong>License compliance</strong><ul><li>The License Profile of SPDX 3.0 is used to systematically manage open source license obligations.</li><li>Complex license combinations can be accurately expressed and analyzed.</li></ul></li><li><strong>Open source contribution tracking</strong><ul><li>SPDX 3.0 makes it possible to clearly record the provenance and contributor information of open source components within a project.</li><li>This helps strengthen collaboration with the open source community and recognize contributions.</li></ul></li><li><strong>Open source policy enforcement</strong><ul><li>SPDX 3.0 documents can be linked to an organization&rsquo;s open source policy to ensure that only approved licenses and components are used.</li></ul></li><li><strong>Streamlining open source audits</strong><ul><li>The standardized format of SPDX 3.0 makes it possible to automate and streamline the open source audit process.</li></ul></li></ol><h3 id="regulatory-compliance">Regulatory Compliance</h3><ol><li><strong>Meeting SBOM requirements</strong><ul><li>SPDX 3.0 meets the SBOM generation requirements set out in US government Executive Order 14028 and the EU Cyber Resilience Act, among others.</li></ul></li><li><strong>Responding to industry-specific regulations</strong><ul><li>SPDX 3.0 makes it possible to effectively respond to software-related regulatory requirements across various industries, including medical devices, automotive, and aerospace.</li></ul></li><li><strong>Data privacy regulatory compliance</strong><ul><li>The Dataset Profile of SPDX 3.0 can be used to support compliance with data privacy regulations such as GDPR and CCPA.</li></ul></li><li><strong>Support for audits and reporting</strong><ul><li>SPDX 3.0 documents make it easy to provide regulators or auditors with the necessary software composition and security information.</li></ul></li><li><strong>Responding to AI regulation</strong><ul><li>By using the AI/ML Profile of SPDX 3.0 to document an AI model&rsquo;s training data, algorithms, and performance metrics, organizations can proactively prepare for future AI regulation.</li></ul></li></ol><p>These use cases of SPDX 3.0 enable organizations to improve software management, security, and compliance in an integrated way. Its standardized approach promotes collaboration between organizations and contributes to increasing transparency and reliability across the software ecosystem.</p><p>Citations:<br>
[1]<a href="https://linuxsecurity.com/news/organizations-events/spdx-3-0">https://linuxsecurity.com/news/organizations-events/spdx-3-0</a><br>
[2]<a href="https://spdx.dev/spdx-announces-3-0-release-candidate-with-new-use-cases/">https://spdx.dev/spdx-announces-3-0-release-candidate-with-new-use-cases/</a><br>
[3]<a href="https://www.linuxfoundation.org/press/spdx-3-revolutionizes-software-management-in-systems-with-enhanced-functionality-and-streamlined-use-cases">https://www.linuxfoundation.org/press/spdx-3-revolutionizes-software-management-in-systems-with-enhanced-functionality-and-streamlined-use-cases</a><br>
[4]<a href="https://www.prnewswire.com/news-releases/spdx-3-0-revolutionizes-software-management-in-systems-with-enhanced-functionality-and-streamlined-use-cases-302118321.html">https://www.prnewswire.com/news-releases/spdx-3-0-revolutionizes-software-management-in-systems-with-enhanced-functionality-and-streamlined-use-cases-302118321.html</a><br>
[5]<a href="https://spdx.dev/leveraging-profiles-for-license-compliance-insights-from-spdx-mini-summit/">https://spdx.dev/leveraging-profiles-for-license-compliance-insights-from-spdx-mini-summit/</a><br>
[6]<a href="https://www.synopsys.com/blogs/software-security/sboms-and-spdx.html">https://www.synopsys.com/blogs/software-security/sboms-and-spdx.html</a><br>
[7]<a href="https://spdx.dev/understanding-spdx-profiles/">https://spdx.dev/understanding-spdx-profiles/</a><br/><h2 id="10-spdx-30-adoption-strategy">10. SPDX 3.0 Adoption Strategy</h2><p>A systematic approach is needed to successfully adopt SPDX 3.0 within an organization. The following is a detailed strategy for adopting SPDX 3.0.</p><h3 id="phased-implementation-plan">Phased Implementation Plan</h3><ol><li><strong>Current state analysis</strong><ul><li>Assess the current SBOM generation and management process</li><li>Analyze existing tools and workflows</li><li>Identify the benefits that adopting SPDX 3.0 can bring</li></ul></li><li><strong>Pilot project selection</strong><ul><li>Select a small, low-criticality project</li><li>Select and apply a specific SPDX 3.0 profile (e.g., Security or License)</li></ul></li><li><strong>Tool selection and configuration</strong><ul><li>Evaluate tools that support SPDX 3.0 (e.g., SPDX tools, FOSSology)</li><li>Integrate the selected tools into the existing CI/CD pipeline</li></ul></li><li><strong>Process definition</strong><ul><li>Design workflows for generating, validating, and managing SPDX 3.0 documents</li><li>Define owners and roles</li></ul></li><li><strong>Expansion plan</strong><ul><li>Identify improvements based on the pilot project&rsquo;s results</li><li>Gradually expand adoption to other projects and departments</li></ul></li><li><strong>Monitoring and optimization</strong><ul><li>Set KPIs to measure the impact of SPDX 3.0 adoption</li><li>Conduct regular reviews and process improvements</li></ul></li></ol><h3 id="training-and-awareness-within-the-organization">Training and Awareness Within the Organization</h3><ol><li><strong>Securing executive support</strong><ul><li>Present the business value of adopting SPDX 3.0</li><li>Emphasize regulatory compliance and risk management aspects</li></ul></li><li><strong>Department-specific training</strong><ul><li>Development team: How to generate and manage SPDX 3.0 documents</li><li>Legal team: Ways to improve license compliance</li><li>Security team: Vulnerability management and how to use the Security Profile</li></ul></li><li><strong>Workshops and hands-on sessions</strong><ul><li>Hands-on practice using SPDX 3.0 tools</li><li>Practice applying SPDX 3.0 to real projects</li></ul></li><li><strong>Internal communication</strong><ul><li>Publish newsletters related to SPDX 3.0</li><li>Build an SPDX 3.0 resource center on the intranet</li></ul></li><li><strong>Sharing success stories</strong><ul><li>Share the outcomes and lessons learned from the pilot project</li><li>Highlight the improvements achieved through SPDX 3.0 adoption</li></ul></li></ol><h3 id="tips-for-successful-adoption">Tips for Successful Adoption</h3><ol><li><strong>Gradual approach</strong><ul><li>Do not try to change everything at once; adopt it in stages</li><li>Collect feedback and identify improvements at each stage</li></ul></li><li><strong>Forming a cross-functional team</strong><ul><li>Form a team of experts from various departments, including development, legal, security, and operations</li><li>Discuss progress and issues through regular meetings</li></ul></li><li><strong>Emphasizing automation</strong><ul><li>Automate the process of generating and managing SPDX 3.0 documents</li><li>Integrate SPDX 3.0-related steps into the CI/CD pipeline</li></ul></li><li><strong>Leveraging external experts</strong><ul><li>Seek help from the SPDX community or consulting firms as needed</li><li>Benchmark the success stories of other organizations</li></ul></li><li><strong>Maintaining flexibility</strong><ul><li>Do not try to adopt all features of SPDX 3.0 at once</li><li>Start with the profiles and features that fit the organization&rsquo;s needs</li></ul></li><li><strong>Emphasizing continuous learning</strong><ul><li>Encourage participation in SPDX community activities</li><li>Support attendance at related conferences and webinars</li></ul></li><li><strong>Measuring and reporting outcomes</strong><ul><li>Compare metrics before and after SPDX 3.0 adoption (e.g., vulnerability response time, improvement in license compliance)</li><li>Regularly report progress and ROI to management</li></ul></li><li><strong>Managing cultural change</strong><ul><li>Encourage the organization to see SPDX 3.0 not merely as a tool but as a new way of working</li><li>Develop strategies to overcome resistance to change</li></ul></li></ol><p>Successful adoption of SPDX 3.0 involves not only technical implementation but also changes in organizational culture and processes. Through systematic planning, continuous education, and a flexible approach, organizations can make the most of the benefits of SPDX 3.0[1][2].</p><p>Citations:<br>
[1]<a href="https://www.linuxfoundation.org/press/spdx-3-revolutionizes-software-management-in-systems-with-enhanced-functionality-and-streamlined-use-cases">https://www.linuxfoundation.org/press/spdx-3-revolutionizes-software-management-in-systems-with-enhanced-functionality-and-streamlined-use-cases</a><br>
[2]<a href="https://spdx.dev/unpacking-the-spdx-3-0-tooling-mini-summit-a-new-era-of-compliance-and-security/">https://spdx.dev/unpacking-the-spdx-3-0-tooling-mini-summit-a-new-era-of-compliance-and-security/</a><br>
[3]<a href="https://spdx.dev/spdx-announces-3-0-release-candidate-with-new-use-cases/">https://spdx.dev/spdx-announces-3-0-release-candidate-with-new-use-cases/</a><br>
[4]<a href="https://openchainproject.org/news/2023/03/31/webinar-50">https://openchainproject.org/news/2023/03/31/webinar-50</a><br>
[5]<a href="https://nand-research.com/quick-take-spdx-3-0-release/">https://nand-research.com/quick-take-spdx-3-0-release/</a><br>
[6]<a href="https://linuxsecurity.com/news/organizations-events/spdx-3-0">https://linuxsecurity.com/news/organizations-events/spdx-3-0</a><br>
[7]<a href="https://spdx.dev/leveraging-profiles-for-license-compliance-insights-from-spdx-mini-summit/">https://spdx.dev/leveraging-profiles-for-license-compliance-insights-from-spdx-mini-summit/</a><br/><h2 id="11-future-outlook-and-direction">11. Future Outlook and Direction</h2><p>The release of SPDX 3.0 has opened a new chapter in software supply chain management. This section takes a closer look at the future and direction of SPDX.</p><h3 id="spdx-community-participation">SPDX Community Participation</h3><ol><li><strong>Open participation model</strong><ul><li>SPDX has adopted an open community model, so anyone can participate[1].</li><li>A variety of stakeholders — individuals, companies, and organizations — can contribute to the development of SPDX.</li></ul></li><li><strong>How to participate</strong><ul><li>Subscribe to the mailing list: You can join the general SPDX mailing list to receive the latest news[1].</li><li>Attend regular meetings: You can join the monthly general meeting to follow project progress and share your input[1].</li><li>Work group activities: You can participate in various working groups such as technical, legal, and outreach.</li></ul></li><li><strong>Participation in tool development</strong><ul><li>You can participate directly in SPDX tool development. For example, students can contribute to SPDX-related projects through the Google Summer of Code program[7].</li></ul></li></ol><h3 id="future-updates-and-improvements">Future Updates and Improvements</h3><ol><li><strong>Enhancement of AI/ML-related features</strong><ul><li>Profiles covering AI model training and characterization, dataset provenance, and similar topics are expected to be further developed[4].</li><li>Adding metadata related to AI ethics and accountability may be considered.</li></ul></li><li><strong>Expansion of security features</strong><ul><li>The linkage between vulnerability information and SBOMs is expected to be further strengthened.</li><li>Integration with real-time threat intelligence is a possibility.</li></ul></li><li><strong>Improved automation and integration</strong><ul><li>Deeper integration with CI/CD pipelines is expected.</li><li>Automated SBOM generation and update features will become more sophisticated.</li></ul></li><li><strong>Improved user experience</strong><ul><li>More intuitive user interfaces and visualization tools may be developed.</li><li>Simplified versions of SPDX tools for non-technical users may emerge.</li></ul></li></ol><h3 id="global-standardization-trends">Global Standardization Trends</h3><ol><li><strong>Strengthening its position as an ISO standard</strong><ul><li>SPDX has already been adopted as the ISO/IEC 5962:2021 standard, and version 3.0 is also planned to be submitted to ISO[5].</li><li>This is expected to further accelerate the global adoption of SPDX.</li></ul></li><li><strong>Responding to international regulations</strong><ul><li>It is expected to become a core tool for addressing international software supply chain security regulations, such as US Executive Order 14028 and the EU Cyber Resilience Act[6].</li></ul></li><li><strong>Industry-specific standardization</strong><ul><li>Industry-specific standards based on SPDX may be developed across various sectors, including automotive, medical devices, and aerospace.</li></ul></li><li><strong>Strengthening international cooperation</strong><ul><li>The SPDX community is expected to strengthen cooperation with other international standards bodies and open source foundations.</li><li>This could lead to a more unified global approach to software supply chain security.</li></ul></li></ol><p>SPDX 3.0 is an important milestone shaping the future of software management. Through continued community participation, technological advancement, and international standardization efforts, SPDX is expected to continue making a significant contribution to improving software supply chain security and transparency.</p><p>Citations:
[1]<a href="https://spdx.dev/engage/participate/">https://spdx.dev/engage/participate/</a><br>
[2]<a href="https://www.linuxinsider.com/story/spdx-becomes-new-standard-for-open-source-software-security-87265.html">https://www.linuxinsider.com/story/spdx-becomes-new-standard-for-open-source-software-security-87265.html</a><br>
[3]<a href="https://spdx.dev/engage/join/">https://spdx.dev/engage/join/</a><br>
[4]<a href="https://sbomify.com/2024/04/28/exploring-the-new-spdx-3-0-a-game-changer-for-sboms/">https://sbomify.com/2024/04/28/exploring-the-new-spdx-3-0-a-game-changer-for-sboms/</a><br>
[5]<a href="https://www.prnewswire.com/news-releases/spdx-3-0-revolutionizes-software-management-in-systems-with-enhanced-functionality-and-streamlined-use-cases-302118321.html">https://www.prnewswire.com/news-releases/spdx-3-0-revolutionizes-software-management-in-systems-with-enhanced-functionality-and-streamlined-use-cases-302118321.html</a><br>
[6]<a href="https://spdx.dev/spdx-announces-3-0-release-candidate-with-new-use-cases/">https://spdx.dev/spdx-announces-3-0-release-candidate-with-new-use-cases/</a><br>
[7]<a href="https://wiki.spdx.org/view/GSOC/GSOC_ProjectIdeas">https://wiki.spdx.org/view/GSOC/GSOC_ProjectIdeas</a><br>
[8]<a href="https://linuxsecurity.com/news/organizations-events/spdx-3-0">https://linuxsecurity.com/news/organizations-events/spdx-3-0</a><br/><h2 id="12-conclusion-spdx-30-utilization-strategy-for-enterprise-open-source-managers">12. Conclusion: SPDX 3.0 Utilization Strategy for Enterprise Open Source Managers</h2><p>SPDX 3.0 provides enterprise open source managers with a powerful and flexible tool. The following are strategic approaches for making effective use of SPDX 3.0:</p><ol><li><strong>Strategic adoption</strong><ul><li>Recognize SPDX 3.0 not merely as a tool but as a strategic asset.</li><li>Link SPDX 3.0 with the organization&rsquo;s open source policy to build a consistent management system.</li></ul></li><li><strong>Automation first</strong><ul><li>Automate the process of generating and managing SPDX 3.0 documents as much as possible.</li><li>Integrate SPDX 3.0-related steps into the CI/CD pipeline to achieve continuous monitoring.</li></ul></li><li><strong>Strengthened risk management</strong><ul><li>Use the Security and License profiles of SPDX 3.0 to systematically manage the risks of using open source.</li><li>Conduct regular open source audits based on SPDX 3.0 to ensure compliance.</li></ul></li><li><strong>Decision support</strong><ul><li>Use SPDX 3.0 data to support informed decision-making about the adoption and use of open source.</li><li>Use it to develop a data-driven open source strategy.</li></ul></li><li><strong>Promoting collaboration</strong><ul><li>Use SPDX 3.0 to strengthen collaboration between the development, legal, and security teams.</li><li>Use its standardized format to facilitate information exchange with external partners.</li></ul></li><li><strong>Education and capability building</strong><ul><li>Open source managers should lead internal training based on a deep understanding of SPDX 3.0.</li><li>Actively participate in SPDX community activities to keep up with the latest trends and learn best practices.</li></ul></li><li><strong>Preparing for regulatory response</strong><ul><li>Use SPDX 3.0 to proactively address SBOM-related regulatory requirements.</li><li>Build a system that can flexibly respond to future regulatory changes.</li></ul></li><li><strong>Value creation</strong><ul><li>Use SPDX 3.0 to increase the efficiency of open source management and translate this into strengthened organizational competitiveness.</li><li>Document open source contribution activities with SPDX 3.0 to enhance the company&rsquo;s technical capability and reputation.</li></ul></li><li><strong>Continuous improvement</strong><ul><li>Regularly evaluate the current state of SPDX 3.0 utilization and identify areas for improvement.</li><li>Quickly incorporate new profiles or features into the organization&rsquo;s processes as they are added.</li></ul></li><li><strong>Leading innovation</strong><ul><li>Develop an organization-specific open source management model based on SPDX 3.0.</li><li>This helps secure a leading position in open source management within the industry.</li></ul></li></ol><p>In conclusion, SPDX 3.0 provides enterprise open source managers with a powerful tool for effectively managing and leveraging the open source ecosystem. By taking a strategic and systematic approach to using SPDX 3.0, organizations can maximize the benefits of open source while minimizing the associated risks. Through this tool, open source managers can play a central role in driving their organization&rsquo;s digital transformation and strengthening its competitiveness.</p><div class="pageinfo pageinfo-primary"><p><em>This article was written with Perplexity (<a href="https://www.perplexity.ai/">https://www.perplexity.ai/</a>).</em></p><p><em>SK telecom customers can use Perplexity Pro free for one year:<a href="https://perplexity.sktadotevent.com/">https://perplexity.sktadotevent.com/</a></em></p><p><img src="/blog/2024/09/06/spdx-3.0-%EC%86%8C%EA%B0%9C%EC%99%80-%EA%B8%B0%EC%97%85-%EB%8F%84%EC%9E%85-%EC%A0%84%EB%9E%B5/image.png" alt="image.png"/></div>
]]></content:encoded></item><item><title>A Practical Guide to SBOM (Software Bill of Materials)</title><link>https://haksungjang.github.io/en/docs/sbom_guide/</link><pubDate>Sun, 09 Aug 2026 17:03:59 +0900</pubDate><guid>https://haksungjang.github.io/en/docs/sbom_guide/</guid><description>A guide covering the Software Bill of Materials (SBOM), from its concepts and standard formats to regulatory trends, adoption roadmap, tools, vulnerability management, and governance, organized from the perspective of practitioners in Korea.</description><content:encoded>&lt;![CDATA[<p>A Software Bill of Materials (SBOM) is a formal record of what components make up a piece of
software and how those components connect within the supply chain. A US executive order compares
it to the ingredient list on food packaging. Just as an ingredient list is the starting point for
responding to allergies, an SBOM is the data layer on which vulnerability response, license
management, and asset management all rest. An SBOM is not a security tool in itself, but without
one, an organization cannot immediately answer the question, &ldquo;Where in our product is this library
used?&rdquo;</p><p>This guide covers that data layer from beginning to end. Drawing on primary sources, it explains
why SBOM has moved to the forefront of regulation and procurement, what standards and identifiers
underpin it, in what order organizations adopt it and with what tools they automate it, how they
manage vulnerabilities and licenses, and how they share it securely across the supply chain.</p><h2 id="intended-audience">Intended Audience</h2><ul><li>Security, development, procurement, and legal staff at organizations that develop or procure
software</li><li>Practitioners who must respond to the EU Cyber Resilience Act (CRA) or US federal procurement
requirements</li><li>Teams seeking to establish supply chain transparency and open source license compliance systems</li></ul><h2 id="guide-structure">Guide Structure</h2><p>The guide is divided into eight sections. The earlier sections cover concepts, standards, and
regulation, while the later sections cover the practicalities of adoption and operation. You can
read only the sections you need.</p><table><thead><tr><th>Section</th><th>Content</th><th>Link</th></tr></thead><tbody><tr><td>1. Overview</td><td>SBOM definition, supply chain threats and benefits, levels and classification</td><td><a href="/en/docs/sbom_guide/1-overview/">View</a></td></tr><tr><td>2. Standards and Formats</td><td>SPDX, CycloneDX, minimum elements, identifiers and licenses</td><td><a href="/en/docs/sbom_guide/2-standards/">View</a></td></tr><tr><td>3. Regulatory Trends</td><td>United States, EU CRA, India, and Korea</td><td><a href="/en/docs/sbom_guide/3-regulation/">View</a></td></tr><tr><td>4. Adoption Roadmap</td><td>Step-by-step activities from building the foundation to operational maturity</td><td><a href="/en/docs/sbom_guide/4-adoption/">View</a></td></tr><tr><td>5. Tools and Automation</td><td>Generation, management, and scanning tools, and automation maturity</td><td><a href="/en/docs/sbom_guide/5-tools/">View</a></td></tr><tr><td>6. Vulnerability Management</td><td>SBOM-based tracking, VEX, CSAF, the Log4j case</td><td><a href="/en/docs/sbom_guide/6-vulnerability/">View</a></td></tr><tr><td>7. Sharing and Governance</td><td>Access control, disclosure scope, sharing channels, roles and responsibilities</td><td><a href="/en/docs/sbom_guide/7-governance/">View</a></td></tr><tr><td>8. Recommendations and Checklist</td><td>Key recommendations and an adoption checklist</td><td><a href="/en/docs/sbom_guide/8-checklist/">View</a></td></tr></tbody></table><h2 id="quick-starting-points">Quick Starting Points</h2><p>If you already understand SBOM and are looking for where to start, see<a href="/en/docs/sbom_guide/4-adoption/">4. Adoption Roadmap</a> and<a href="/en/docs/sbom_guide/8-checklist/">8. Recommendations and Checklist</a> first.
If you are deciding which format and tools to use,<a href="/en/docs/sbom_guide/2-standards/">2. Standards and Formats</a> and<a href="/en/docs/sbom_guide/5-tools/">5. Tools and Automation</a> are good starting points. If your goal is regulatory
compliance, check the jurisdiction-specific obligations in<a href="/en/docs/sbom_guide/3-regulation/">3. Regulatory Trends</a>.</p><h2 id="sources-and-editorial-basis">Sources and Editorial Basis</h2><p>This guide is not a translation of any single document; it is a reconstruction that synthesizes
current primary sources. It draws on the National Telecommunications and Information
Administration (NTIA)&rsquo;s 2021 minimum elements and its update by the Cybersecurity and
Infrastructure Security Agency (CISA) — the 2024<em>Framing Software Component Transparency</em>, Third
Edition, and the 2025 draft revision of the minimum elements — as well as the SPDX and CycloneDX
standard specifications, the EU Cyber Resilience Act (Regulation (EU) 2024/2847), and the supply
chain security guidelines of India&rsquo;s CERT-In and Korea. The first edition began as a translation of
CERT-In&rsquo;s SBOM technical guidelines; the current edition updates that framework with the sources
above and broadens it to a general practitioner&rsquo;s perspective.</p><p>Every factual claim is cited to a primary source, and the materials cited were accessed on
June 14, 2026.</p><p><strong>Author :<a href="https://haksungjang.github.io/">Haksung Jang</a></strong></p>
]]></content:encoded></item><item><title>3.9 AI SBOM</title><link>https://haksungjang.github.io/en/docs/ai-sbom_guide/2-ai-extension/3-ai-sbom/</link><pubDate>Sun, 09 Aug 2026 22:27:14 +0900</pubDate><guid>https://haksungjang.github.io/en/docs/ai-sbom_guide/2-ai-extension/3-ai-sbom/</guid><description>Explains the procedure and formats for generating and managing an AI SBOM, automation tools, and the verification areas that tools alone struggle to fill.</description><content:encoded>&lt;![CDATA[<div class="alert alert-info" role="alert"><div class="h4 alert-heading" role="heading">Implementation Phase</div><p>This clause is built during<strong>Phase 2 — AI Extension Processes</strong>.<a href="/en/docs/ai-sbom_guide/#phased-implementation-roadmap">View the full implementation roadmap</a></p></div><h2 id="1-clause-overview">1. Clause Overview</h2><p>An AI SBOM (AI System Bill of Materials) is a list capturing the elements that make up an AI
system and the information about them. Where a traditional SBOM records software components, an
AI SBOM adds models, weights, datasets, and hyperparameters on top. 3.9 requires a procedure for
generating and managing the AI SBOM.</p><p>The format is left open. The specification states that SPDX, CycloneDX, or any other format is
acceptable. There is, however, one obligation: the AI SBOM shall account for inbound materials
from third parties. If pre-trained models and datasets brought in from outside are left out, the
basis for tracking license obligations (<a href="/en/docs/ai-sbom_guide/2-ai-extension/1-license-obligations/">3.5</a>) and transparency
obligations disappears.</p><p>The AI SBOM area is where the line &ldquo;generation is automated by tools, but accuracy and compliance
judgment are filled by people&rdquo; is sharpest. This page walks through the procedure along that
line.</p><h2 id="2-activities-to-perform">2. Activities to Perform</h2><ul><li>Establish a procedure for identifying, tracking, reviewing, approving, and archiving the
components of an AI system (models, datasets, etc.).</li><li>Decide on an AI SBOM format (SPDX 3.0 AI Profile or CycloneDX ML-BOM recommended).<em>([Guide Recommendation])</em></li><li>Ensure models and datasets brought in from third parties are always included in the AI SBOM.</li><li>Wire a generation tool into CI/CD to regenerate the AI SBOM repeatedly.<em>([Guide Recommendation])</em></li><li>Have a person review whether the license and provenance fields of the generated AI SBOM are
accurate.<em>([Guide Recommendation])</em></li><li>Retain records (generation history, approval history) demonstrating that the procedure was
followed.</li></ul><h2 id="3-requirement-and-verification-material">3. Requirement and Verification Material</h2><table><thead><tr><th>Clause</th><th>Requirement</th><th>Verification Material</th></tr></thead><tbody><tr><td>3.9</td><td>A procedure shall exist for generating and managing an AI SBOM. Any format — SPDX, CycloneDX, or another — is acceptable. The AI SBOM shall account for inbound materials from third parties.</td><td><strong>3.9.1</strong> A documented procedure for identifying, tracking, reviewing, approving, and archiving information about the components of an AI system (models, datasets, etc.)<br><strong>3.9.2</strong> Records demonstrating the procedure was properly followed for the supplied system</td></tr></tbody></table><details><summary>View original English text</summary><blockquote><p><strong>3.9 AI System Bill of Materials</strong>
A process shall exist for creating and managing an AI SBOM, this can be in any format e.g. SPDX,
CycloneDX, or another format. The AI SBOM shall account for inbound materials from third-parties.</p><p><strong>Verification material(s):</strong></p><ul><li>A documented procedure for identifying, tracking, reviewing, approving, and archiving
information related to the components of an AI system (e.g., model, datasets, etc).</li><li>Records for the supplied system that demonstrates the documented procedure was properly followed.</li></ul></blockquote></details><h2 id="4-how-to-comply-with-each-verification-material-with-samples">4. How to Comply with Each Verification Material, with Samples</h2><h3 id="391-ai-sbom-management-procedure-identification-tracking-review-approval-archiving">3.9.1 AI SBOM Management Procedure (Identification, Tracking, Review, Approval, Archiving)</h3><p><strong>How to Comply</strong></p><p>Design the AI SBOM procedure around four stages: generation, review, approval, and archiving.
Automate the generation stage with tools, and leave the review and approval stages to people.
Even when a tool copies a license field straight from a model card, it cannot judge whether that
license actually fits the use case, or whether something is missing or misstated.</p><p>The figure below shows the flow from AI SBOM generation to archiving.</p><p><img src="/docs/ai-sbom_guide/2-ai-extension/3-ai-sbom/aisbom-lifecycle-en.png" alt="Procedure that generates an AI SBOM, checks inbound material inclusion and accuracy, then approves and archives it. Omissions and inaccuracies loop back to an earlier stage"/><p><strong>Figure 1.</strong> Procedure from AI SBOM generation to archiving</p><p><strong>Tool Mapping</strong></p><p>Below are open source tools usable at each stage. &ldquo;Automation level&rdquo; indicates how far a tool
handles that task on its own.</p><table><thead><tr><th>Stage</th><th>Task</th><th>Automation Level</th><th>Representative Tool</th></tr></thead><tbody><tr><td>Generation</td><td>Code/dependency BOM</td><td>Mature</td><td>cdxgen, Syft</td></tr><tr><td>Generation</td><td>Model/metadata AIBOM</td><td>Tools emerging</td><td>OWASP AIBOM Generator, cdxgen<code>aibom</code></td></tr><tr><td>Analysis</td><td>Static inspection of model binaries</td><td>Tools emerging</td><td>Lab700x AI SBOM Scanner</td></tr><tr><td>Management</td><td>SBOM storage, vulnerability monitoring</td><td>Mature</td><td>Dependency-Track, SW360</td></tr><tr><td>Review</td><td>License/provenance accuracy judgment</td><td>People/policy</td><td>Tool support still developing</td></tr></tbody></table><p>Installation, usage, and execution screens for each tool are covered in detail in the<a href="/en/docs/ai-sbom_guide/5-tools/">Tools</a> section (<a href="/en/docs/ai-sbom_guide/5-tools/1-aibom-generator/">OWASP AIBOM
Generator</a>,<a href="/en/docs/ai-sbom_guide/5-tools/2-cdxgen/">cdxgen</a>,<a href="/en/docs/ai-sbom_guide/5-tools/3-scanners/">Model/Container Scanners</a>).</p><p>The command to generate an AI BOM with cdxgen is as follows. You can pass a Hugging Face model
URL and purl, a Modelfile, or a GGUF artifact directly (<a href="https://github.com/cdxgen/cdxgen/blob/master/docs/AI_BOM.md">cdxgen AI-BOM
docs</a>).</p><div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#8f5902;font-style:italic"># Generate an AI BOM from the AI project directory</span></span></span><span style="display:flex;"><span>cdxgen -t ai -o aibom.json .</span></span><span style="display:flex;"><span/></span><span style="display:flex;"><span><span style="color:#8f5902;font-style:italic"># Generate including AI/ML metadata (formulation)</span></span></span><span style="display:flex;"><span>cdxgen -t ai --include-formulation -o aibom.json .</span></span></code></pre></div><p>The OWASP AIBOM Generator takes a Hugging Face model as input, builds a CycloneDX-format AIBOM,
and scores its completeness. It is maintained by the OWASP Gen AI Security Project and is also
available as a Hugging Face Space (<a href="https://genai.owasp.org/resource/owasp-aibom-generator/">OWASP AIBOM
Generator</a>).</p><p><strong>Hands-On — Generating with cdxgen</strong></p><p>This is the result of actually running cdxgen against a summarization app (depending on<code>transformers</code> and<code>torch</code>) that loads a pre-trained model (<code>facebook/bart-large-cnn</code>). The tool
automatically identifies 5 dependencies and produces a CycloneDX 1.7-format BOM.</p><div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>$ cdxgen -t python --include-formulation -o aibom.json .</span></span><span style="display:flex;"><span>CycloneDX Generator 12.5.1 (Node.js)</span></span><span style="display:flex;"><span/></span><span style="display:flex;"><span>Generated components — 5 items (CycloneDX 1.7):</span></span><span style="display:flex;"><span> transformers 4.44.2 pkg:pypi/transformers@4.44.2 license: empty</span></span><span style="display:flex;"><span> torch 2.4.0 pkg:pypi/torch@2.4.0 license: empty</span></span><span style="display:flex;"><span> numpy 1.26.4 pkg:pypi/numpy@1.26.4 license: empty</span></span><span style="display:flex;"><span> tokenizers 0.19.1 pkg:pypi/tokenizers@0.19.1 license: empty</span></span><span style="display:flex;"><span> huggingface-hub 0.24.6 pkg:pypi/huggingface-hub@0.24.6 license: empty</span></span></code></pre></div><p>One component from the generated BOM looks like this. The identification evidence is filled in,
but the<code>licenses</code> field is empty.</p><div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-json" data-lang="json"><span style="display:flex;"><span><span style="color:#000;font-weight:bold">{</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"name"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"transformers"</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"version"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"4.44.2"</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"purl"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"pkg:pypi/transformers@4.44.2"</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"type"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"library"</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"evidence"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#000;font-weight:bold">{</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"identity"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#000;font-weight:bold">[</span></span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">{</span><span style="color:#204a87;font-weight:bold">"field"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"purl"</span><span style="color:#000;font-weight:bold">,</span><span style="color:#204a87;font-weight:bold">"confidence"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#0000cf;font-weight:bold">0.5</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"methods"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#000;font-weight:bold">[{</span><span style="color:#204a87;font-weight:bold">"technique"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"manifest-analysis"</span><span style="color:#000;font-weight:bold">,</span><span style="color:#204a87;font-weight:bold">"value"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"requirements.txt"</span><span style="color:#000;font-weight:bold">}]</span><span style="color:#000;font-weight:bold">}</span></span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">]</span></span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">}</span></span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">}</span></span></span></code></pre></div><p><strong>Figure 2.</strong> cdxgen 12.5.1 execution output<em>(run on 2026-06-13,<code>-t python --include-formulation</code>)</em></p><div class="alert alert-warning" role="alert"><div class="h4 alert-heading" role="heading">What the Execution Result Shows — Generation by Tool, Verification by People</div><ul><li>The tool automatically identified 5 dependencies from<code>requirements.txt</code> and built a BOM.
Generation is automated.</li><li>But the<code>licenses</code> field of every component is empty. License accuracy has to be checked and
filled in by a person.</li><li>The pre-trained model<code>facebook/bart-large-cnn</code> the app loads was not captured in the BOM by
code scanning alone. It has to be collected separately as an inbound material and added (see
Considerations below).</li></ul><p>The boundary this clause states — &ldquo;generation by tool, accuracy and completeness by people&rdquo; —
shows up directly in the actual tool output here.</p></div><p><strong>Format Sample (CycloneDX ML-BOM)</strong></p><p>Below is a shortened example of the model component structure in a CycloneDX 1.6 ML-BOM. The key
structure follows the<code>machine-learning-model</code> component and<code>modelCard</code> in the<a href="https://cyclonedx.org/capabilities/mlbom/">official
CycloneDX spec</a>. If the license is non-standard (has
no SPDX ID), state it with<code>name</code>.</p><div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-json" data-lang="json"><span style="display:flex;"><span><span style="color:#000;font-weight:bold">{</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"bomFormat"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"CycloneDX"</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"specVersion"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"1.6"</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"components"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#000;font-weight:bold">[</span></span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">{</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"bom-ref"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"model-llama31-8b"</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"type"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"machine-learning-model"</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"group"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"meta-llama"</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"name"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"Llama-3.1-8B"</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"version"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"1.0"</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"licenses"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#000;font-weight:bold">[</span></span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">{</span><span style="color:#204a87;font-weight:bold">"license"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#000;font-weight:bold">{</span><span style="color:#204a87;font-weight:bold">"name"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"Llama 3.1 Community License"</span><span style="color:#000;font-weight:bold">}</span><span style="color:#000;font-weight:bold">}</span></span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">],</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"modelCard"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#000;font-weight:bold">{</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"modelParameters"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#000;font-weight:bold">{</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"task"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"text-generation"</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"architectureFamily"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"llama"</span><span style="color:#000;font-weight:bold">,</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"datasets"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#000;font-weight:bold">[</span></span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">{</span><span style="color:#204a87;font-weight:bold">"type"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"dataset"</span><span style="color:#000;font-weight:bold">,</span><span style="color:#204a87;font-weight:bold">"name"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"Public pretraining corpus"</span><span style="color:#000;font-weight:bold">,</span><span style="color:#204a87;font-weight:bold">"classification"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#4e9a06">"public"</span><span style="color:#000;font-weight:bold">}</span></span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">]</span></span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">},</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"considerations"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#000;font-weight:bold">{</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"useCases"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#000;font-weight:bold">[</span><span style="color:#4e9a06">"Internal document summarization"</span><span style="color:#000;font-weight:bold">],</span></span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">"technicalLimitations"</span><span style="color:#000;font-weight:bold">:</span><span style="color:#000;font-weight:bold">[</span><span style="color:#4e9a06">"Potential for hallucination"</span><span style="color:#000;font-weight:bold">,</span><span style="color:#4e9a06">"Performance variance in Korean"</span><span style="color:#000;font-weight:bold">]</span></span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">}</span></span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">}</span></span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">}</span></span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">]</span></span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">}</span></span></span></code></pre></div><p>If you use SPDX 3.0, the AI Profile and Dataset Profile express the same information (<a href="https://spdx.github.io/spdx-spec/v3.0.1/model/AI/AI/">SPDX 3.0 AI
Profile</a>). The concrete fields of each
format and the technical details of generation tools are covered in the<a href="https://openchain-project.github.io/OpenChain-KWG/guide/iso42001_guide/4-operation/2-ai-sbom/">ISO/IEC 42001 Guide — AI
SBOM</a>.</p><p><strong>Considerations</strong></p><ul><li><strong>Reflect inbound materials (specification obligation)</strong>: Set up a procedure that generates an
SBOM entry at intake time so that models and datasets brought in from outside are never missing
from the AI SBOM. This is a<code>shall</code>-level obligation.</li><li><strong>Generation by tool, review by people</strong>: Generation tools copy the license written on the
model card as-is. Because model cards themselves commonly have missing or incorrect license
information, have a person check the license and provenance fields of the generated AI SBOM
against the original source.</li><li><strong>Format consistency</strong>: Pick either SPDX or CycloneDX as the organization&rsquo;s default format and
operate tools and repositories around it consistently. Both formats treat models and datasets
as first-class components.</li><li><strong>CI/CD integration</strong>: The AI SBOM is not a one-time deliverable. Wire it into the pipeline so
it is regenerated whenever a model or dataset changes.</li></ul><h3 id="392-records-demonstrating-procedure-compliance">3.9.2 Records Demonstrating Procedure Compliance</h3><p><strong>How to Comply</strong></p><p>Verification material 3.9.2 is the record showing the procedure was actually followed. Alongside
the AI SBOM file itself, keep a history of who generated, reviewed, and approved it and when. If
it is generated automatically in CI/CD, the build logs and the generated SBOM artifact become the
record, and the upload history to a management tool such as Dependency-Track also serves as
evidence.</p><p><strong>Considerations</strong></p><ul><li><strong>Retain generation history</strong>: Keep the AI SBOM from each point in time for every version of
the supplied AI system to maintain traceability.</li><li><strong>Approval record</strong>: Record who reviewed and approved it. This connects to the lifecycle review
in<a href="/en/docs/ai-sbom_guide/4-governance/1-governance/">Governance (3.10)</a>.</li></ul><h2 id="5-references">5. References</h2><ul><li>License obligation review procedure:<a href="/en/docs/ai-sbom_guide/2-ai-extension/1-license-obligations/">3.5 License Obligations</a></li><li>Technical details of AI SBOM formats and generation tools:<a href="https://openchain-project.github.io/OpenChain-KWG/guide/iso42001_guide/4-operation/2-ai-sbom/">ISO/IEC 42001 Guide — AI SBOM</a></li><li>SBOM management tools:<a href="https://openchain-project.github.io/OpenChain-KWG/guide/tools/7-dependency-track/">Dependency-Track</a>,<a href="https://openchain-project.github.io/OpenChain-KWG/guide/tools/8-cdxgen-dt/">cdxgen + Dependency-Track integration</a></li><li>Governance and lifecycle review:<a href="/en/docs/ai-sbom_guide/4-governance/1-governance/">3.10 Governance</a></li></ul>
]]></content:encoded></item><item><title>Standards and Formats</title><link>https://haksungjang.github.io/en/docs/sbom_guide/2-standards/</link><pubDate>Sun, 09 Aug 2026 17:03:59 +0900</pubDate><guid>https://haksungjang.github.io/en/docs/sbom_guide/2-standards/</guid><description>Compares SPDX and CycloneDX, the two standard formats for expressing an SBOM in a machine-readable form.</description><content:encoded>&lt;![CDATA[<p>Since an SBOM requires machine readability, a standard format is necessary. Among the three
formats specified by the US NTIA minimum elements, SPDX and CycloneDX split practical use between
them. The third, the SWID tag, is used mainly in asset management; its role as an identifier is
covered in<a href="/en/docs/sbom_guide/2-standards/2-identifiers/">Identifiers and Licenses</a>.</p><h2 id="spdx">SPDX</h2><p>SPDX (System Package Data Exchange) is a project under the Linux Foundation. Version 2.2.1
became an international standard as ISO/IEC 5962:2021 in August 2021. It is worth noting that
the current ISO standard refers strictly to version 2.2.1.</p><p>The Linux Foundation released SPDX 3.0 on April 16, 2024, introducing a structure of
purpose-specific profiles. The approach layers Security, Build, Dataset, and AI profiles on top
of a core model. The AI profile carries model training and characterization information, the
Dataset profile carries data provenance and licensing, and the Security profile carries
vulnerability identification, severity, exploitability, and mitigation plans. A patch release,
3.0.1, followed in December of the same year. Whether SPDX 3.x is being re-standardized with ISO
had not been confirmed as of June 2026.</p><h2 id="cyclonedx">CycloneDX</h2><p>CycloneDX is a full-stack BOM standard that originated at OWASP (Open Worldwide Application
Security Project). Its distinguishing feature is native support for Vulnerability Exploitability
eXchange (VEX) within the format itself. International standardization proceeded through Ecma
International&rsquo;s technical committee TC54. Version 1.6 was published as ECMA-424 1st edition in
June 2024, adding a Cryptographic Bill of Materials (CBOM) and CycloneDX Attestations, and v1.7
was announced in October 2025 and standardized as ECMA-424 2nd edition in December 2025. v1.7
added post-quantum cryptography readiness, structured citations, and support for patent objects.</p><p>CycloneDX can express software (SBOM), hardware (HBOM), services (SaaSBOM), and machine learning
models (ML-BOM) all within a single format.</p><h2 id="comparing-the-two-formats">Comparing the Two Formats</h2><table><thead><tr><th/><th>SPDX</th><th>CycloneDX</th></tr></thead><tbody><tr><td>Steward</td><td>Linux Foundation</td><td>OWASP / Ecma TC54</td></tr><tr><td>International standard</td><td>ISO/IEC 5962:2021 (based on v2.2.1)</td><td>ECMA-424 1st edition (v1.6, 2024-06), 2nd edition (v1.7, 2025-12)</td></tr><tr><td>Latest specification</td><td>3.0 (2024-04), 3.0.1 (2024-12)</td><td>1.7 (2025-10)</td></tr><tr><td>Extension mechanism</td><td>Purpose-specific profiles (Security, Build, Dataset, AI)</td><td>Component types and auxiliary objects, native VEX</td></tr><tr><td>Strengths</td><td>License expression and legal compliance history</td><td>Vulnerability/VEX integration, security-operations friendly</td></tr></tbody></table><p><strong>Table 1.</strong> Comparison of the two major SBOM standard formats<em>(source: ISO/IEC 5962:2021,
Linux Foundation 2024, Ecma International ECMA-424. Retrieved 2026-06-14)</em></p><p>The two standards differ in design philosophy. SPDX extends its scope of application through
profiles, while CycloneDX expresses it through component types and auxiliary objects. Both,
however, target the same problem in that they carry component identification, licensing, and
dependency relationships. Whichever you choose, conversion tools exist between the two formats,
so you can choose based on the format your trading partners require and the format your own tool
chain supports well. If license compliance is the focus, SPDX is the familiar starting point; if
vulnerability operations is the focus, CycloneDX is.</p><p>Next, we look at the<a href="/en/docs/sbom_guide/2-standards/1-minimum-elements/">minimum elements</a> that define what a format must
contain, and<a href="/en/docs/sbom_guide/2-standards/2-identifiers/">identifiers and licenses</a> for consistently pointing to
components.</p><h2 id="sources">Sources</h2><p>ISO/IEC (2021).<em>ISO/IEC 5962:2021 — SPDX Specification V2.2.1</em>. The Linux Foundation (2024).<em>SPDX 3.0 Release</em>.<a href="https://www.linuxfoundation.org/press/spdx-3-revolutionizes-software-management-in-systems-with-enhanced-functionality-and-streamlined-use-cases">https://www.linuxfoundation.org/press/spdx-3-revolutionizes-software-management-in-systems-with-enhanced-functionality-and-streamlined-use-cases</a>.
Ecma International.<em>ECMA-424 — CycloneDX Bill of Materials Specification</em>.<a href="https://ecma-international.org/publications-and-standards/standards/ecma-424/">https://ecma-international.org/publications-and-standards/standards/ecma-424/</a>. CycloneDX (2025).<em>CycloneDX v1.7 Released</em>.<a href="https://cyclonedx.org/news/cyclonedx-v1.7-released/">https://cyclonedx.org/news/cyclonedx-v1.7-released/</a>. (All retrieved: 2026-06-14)</p>
]]></content:encoded></item></channel></rss>