<?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>CycloneDX | Haksung</title><link>https://haksungjang.github.io/en/tags/cyclonedx/</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/cyclonedx/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>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>cdxgen</title><link>https://haksungjang.github.io/en/docs/ai-sbom_guide/5-tools/2-cdxgen/</link><pubDate>Sun, 09 Aug 2026 17:03:59 +0900</pubDate><guid>https://haksungjang.github.io/en/docs/ai-sbom_guide/5-tools/2-cdxgen/</guid><description>Explains how to use the AI BOM mode of OWASP cdxgen, which generates a CycloneDX SBOM from projects and models, together with actual execution output.</description><content:encoded>&lt;![CDATA[<h2 id="overview">Overview</h2><p>cdxgen is the official SBOM generator of the OWASP CycloneDX project. It supports more than 20
languages and package managers, and the latest version offers a dedicated AI BOM mode. It
automatically identifies the dependencies of AI applications (PyTorch, Transformers, and so on) and
integrates well with CI/CD pipelines.</p><p>From an AI SBOM standpoint, cdxgen&rsquo;s strength is speed and automation. Its weakness is that it does
not fill in license information in a default run. This trait shows up in the execution result below.
Where OWASP AIBOM Generator centers on model card metadata, cdxgen centers on code and dependencies.
Using both together covers both models and dependencies.</p><h2 id="key-features">Key Features</h2><ul><li>Identifies dependencies from source code and container images to generate a CycloneDX SBOM.</li><li>Includes AI/ML metadata (formulation) with AI BOM mode (<code>-t ai</code>).</li><li>Takes Hugging Face model URLs, Modelfiles, and GGUF artifacts directly as input.</li><li>Automatically submits SBOMs to a Dependency-Track server for continuous management.</li></ul><h2 id="installation">Installation</h2><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"># One-off run (requires Node.js)</span></span></span><span style="display:flex;"><span>npx @cyclonedx/cdxgen@latest --version</span></span><span style="display:flex;"><span/></span><span style="display:flex;"><span><span style="color:#8f5902;font-style:italic"># Global install</span></span></span><span style="display:flex;"><span>npm install -g @cyclonedx/cdxgen</span></span></code></pre></div><h2 id="usage--generating-an-ai-bom">Usage — Generating an AI BOM</h2><p>Run in AI BOM mode from the AI project directory.</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</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>Below is the actual result of running cdxgen against a summarization app (<code>transformers</code>,<code>torch</code>
dependencies) that loads a pretrained model (<code>facebook/bart-large-cnn</code>). It automatically identifies
5 dependencies and produces a CycloneDX 1.7 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 entries (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><strong>Figure 1.</strong> cdxgen execution output<em>(cdxgen 12.5.1, run 2026-06-13)</em></p><p>One of the generated components 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><h2 id="what-the-execution-result-shows">What the Execution Result Shows</h2><div class="alert alert-warning" role="alert"><div class="h4 alert-heading" role="heading">cdxgen identifies quickly, but a human must fill in the license</div><p>cdxgen quickly identified 5 dependencies from<code>requirements.txt</code>, but the<code>licenses</code> field of each
component is empty. Also, the pretrained model<code>facebook/bart-large-cnn</code> that the app loads was not
captured in the BOM by code scanning alone. It must be collected separately as inbound material and
added. A realistic combination is to build the dependency skeleton quickly with cdxgen, have a human
verify and fill in the licenses, and generate the model separately with OWASP AIBOM Generator before
merging.</p></div><h2 id="see-also">See Also</h2><ul><li>AI SBOM generation and management procedure:<a href="/en/docs/ai-sbom_guide/2-ai-extension/3-ai-sbom/">3.9 AI SBOM</a></li><li>Generator centered on model metadata:<a href="/en/docs/ai-sbom_guide/5-tools/1-aibom-generator/">OWASP AIBOM Generator</a></li><li>SBOM management:<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>Official:<a href="https://github.com/cdxgen/cdxgen/blob/master/docs/AI_BOM.md">cdxgen AI-BOM documentation</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><item><title>OWASP AIBOM Generator</title><link>https://haksungjang.github.io/en/docs/ai-sbom_guide/5-tools/1-aibom-generator/</link><pubDate>Sun, 09 Aug 2026 17:03:59 +0900</pubDate><guid>https://haksungjang.github.io/en/docs/ai-sbom_guide/5-tools/1-aibom-generator/</guid><description>Explains how to use the OWASP tool that generates a CycloneDX-format AI SBOM from a Hugging Face model and scores its completeness, together with actual execution screens.</description><content:encoded>&lt;![CDATA[<h2 id="overview">Overview</h2><p>OWASP AIBOM Generator is an open source tool that takes a Hugging Face model ID as input, fetches
model card metadata, and generates an AI SBOM in CycloneDX format. It is maintained by the OWASP
Gen AI Security Project, and its distinguishing feature is scoring how complete the generated BOM is.</p><p>Where cdxgen identifies dependencies quickly but leaves the license fields empty, this tool fills in
the license, author, and external references recorded in the model card. It works well as a
starting point for the license review required by<a href="/en/docs/ai-sbom_guide/2-ai-extension/1-license-obligations/">3.5 License Obligations</a>.</p><h2 id="key-features">Key Features</h2><ul><li>Fetches metadata from Hugging Face models and generates an AIBOM in both CycloneDX 1.6 and 1.7
format.</li><li>Evaluates the completeness of the generated BOM with a score (0–100) and a profile, broken down
section by section.</li><li>Displays model information, the model card, license, and external references in a human-readable
view.</li><li>Available both as a web UI and a command-line interface (CLI).</li></ul><h2 id="usage-a--web-ui">Usage A — Web UI</h2><p>The simplest approach: just enter a model ID in the browser. Use the Hugging Face Space provided by
the OWASP Gen AI Security Project, or clone the repository and run it locally.</p><p>First, enter a Hugging Face model ID (e.g.,<code>facebook/bart-large-cnn</code>) on the input screen and click
generate.</p><p><img src="/docs/ai-sbom_guide/5-tools/1-aibom-generator/images/input-form.png" alt="OWASP AIBOM Generator input screen"/><p><strong>Figure 1.</strong> OWASP AIBOM Generator input screen<em>(GenAI Security Project, captured 2026-06-13)</em></p><p>Once generation finishes, the result screen shows an AIBOM summary, the completeness assessment,
download buttons (CycloneDX 1.6 and 1.7), AI model information, and the model card. The completeness
assessment at the top of the screen shows at a glance whether the BOM has the minimum fields needed
for identification.</p><p><img src="/docs/ai-sbom_guide/5-tools/1-aibom-generator/images/result-view.png" alt="OWASP AIBOM Generator result screen"/><p><strong>Figure 2.</strong> Generation result screen — model information, license (MIT), completeness assessment
(Basic)<em>(captured 2026-06-13)</em></p><p>The result screen offers a Human-Friendly View along with a field checklist, a score report, and a
JSON view tab. Check the items needed for license obligation review and AI SBOM retention directly
on screen, and download the CycloneDX file.</p><h2 id="usage-b--command-line-cli">Usage B — Command Line (CLI)</h2><p>The CLI is convenient for embedding in CI/CD or batch-processing multiple models. After
installation, pass the model ID as an argument.</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"># Install (a Python virtual environment is recommended)</span></span></span><span style="display:flex;"><span>pip install<span style="color:#4e9a06">"git+https://github.com/GenAI-Security-Project/aibom-generator"</span></span></span><span style="display:flex;"><span/></span><span style="display:flex;"><span><span style="color:#8f5902;font-style:italic"># Generate an AIBOM from a model ID</span></span></span><span style="display:flex;"><span>aibom facebook/bart-large-cnn -o aibom.json</span></span></code></pre></div><p>Below is the actual execution result. It generates CycloneDX 1.6 and 1.7, passes schema
validation, and shows the completeness score broken down by section.</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>$ aibom facebook/bart-large-cnn -o aibom.json</span></span><span style="display:flex;"><span/></span><span style="display:flex;"><span>✅ Successfully generated CycloneDX 1.6 SBOM — Schema Validation (1.6): Valid</span></span><span style="display:flex;"><span>✅ Successfully generated CycloneDX 1.7 SBOM — Schema Validation (1.7): Valid</span></span><span style="display:flex;"><span/></span><span style="display:flex;"><span>📊 Completeness Score: 58.7/100 Profile: Basic</span></span><span style="display:flex;"><span> - Required Fields: 20/20</span></span><span style="display:flex;"><span> - Metadata: 8/20</span></span><span style="display:flex;"><span> - Component Basic: 17.1/20</span></span><span style="display:flex;"><span> - Component Model Card: 6.7/30</span></span><span style="display:flex;"><span> - External References: 10/10</span></span></code></pre></div><p><strong>Figure 3.</strong> CLI execution output<em>(aibom CLI, model facebook/bart-large-cnn, run 2026-06-13)</em></p><p>The model component in the generated BOM has its license and model card filled in. Unlike cdxgen&rsquo;s
output, the<code>licenses</code> field is not 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">"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">"bart-large-cnn"</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:huggingface/facebook/bart-large-cnn"</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">"MIT"</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">"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">"facebook"</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 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 style="color:#000;font-weight:bold">},</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 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="what-the-execution-result-shows">What the Execution Result Shows</h2><div class="alert alert-info" role="alert"><div class="h4 alert-heading" role="heading">The completeness score depends on the quality of the input metadata</div><p>In the actual run, the completeness score was 58.7/100 (Basic). Required Fields and External
References scored full marks, but the model card score was low at 6.7/30. This is not a limitation
of the tool but a result of the model provider not filling in enough information in the Hugging
Face model card. The tool faithfully fetches whatever metadata exists, but it cannot invent
information that isn&rsquo;t there. When the model card is sparse, a human must verify the source and
supplement it.</p></div><h2 id="see-also">See Also</h2><ul><li>AI SBOM generation and management procedure:<a href="/en/docs/ai-sbom_guide/2-ai-extension/3-ai-sbom/">3.9 AI SBOM</a></li><li>License obligation review:<a href="/en/docs/ai-sbom_guide/2-ai-extension/1-license-obligations/">3.5 License Obligations</a></li><li>Another generation tool:<a href="/en/docs/ai-sbom_guide/5-tools/2-cdxgen/">cdxgen</a></li><li>Official:<a href="https://genai.owasp.org/resource/owasp-aibom-generator/">OWASP AIBOM Generator</a></li></ul>
]]></content:encoded></item></channel></rss>