目录
目录README.md

Information Technology—Software Bill of Materials Data Format Specification

前言

本文件按照GB/T 1.1—2020《标准化工作导则 第1部分:标准化文件的结构和起草规则》的规定起草。

信息技术 软件物料清单数据格式规范

**范围**

本文件定义了软件物料清单数据格式,包括:文档基本信息、软件组成信息、环境信息、其他许可证信息和扩展信息。

本文件适用于指导软件物料清单的生成、存储、维护与交付。

**规范性引用文件**

下列文件中的内容通过文中的规范性引用而构成本文件必不可少的条款。其中,注日期的引用文件,仅该日期对应的版本适用于本文件;不注日期的引用文件,其最新版本(包括所有的修改单)适用于本文件。

GB/T 43698-2024 网络安全技术 软件供应链安全要求

ISO 8601:2004 数据存储和交换形式 信息交换 日期和时间的表示方法

**术语和定义**

下列术语和定义适用于本文件。
软件物料清单 software bill of materials
描述软件产品的组成成分、许可证信息、内外部依赖关系等信息的文档。

[来源:GB/T 43698-2024,3.8,有修改]

文档 document
描述整个软件物料清单的基础信息,包括版本、许可证、创建者等。
组件 component
组件是对数据和方法的简单封装,包括定义好的接口或者外在的环境依赖,独立发布并且能够被第三方所集成。
文件 file
软件包中存在零个或任意数量的文件,每个文件都应存在一个文件信息实例。每个文件信息实例为对应文件的重要元信息,包括许可证和版权等。
代码片段 snippet
表示文件的某些部分最初可能是根据其他许可证创建的,或从已知漏洞的地方复制而来。
运行环境 runtime
定义了运行当前软件包的目标环境要求,包括CPU架构、操作系统以及软件运行所必需的系统组件、网络服务等必要环境条件信息。
构建环境 building environment
构建当前软件包的环境信息,包括CPU架构、操作系统等。
组件溯源信息 component url
是一个URL字符串,它以一种通用和统一的方式在编程语言、软件包管理器、工具、API和数据库中标识软件包。

**缩略语**

下列缩略语适用于本文件。

SBOM 软件物料清单(Software Bill of Materials)

URI 统一资源标识符(Uniform Resource Identifier)

**软件物料清单组成**

**概述**
SBOM由文档基本信息、软件组成信息、环境信息、其他许可证信息和扩展信息等元素组成,如图1所示。

图1 SBOM组成

每个组成元素的说明如下:

1. 文档基本信息(Document Basic Information):SBOM文档所涉及的版本号、标识、创建者、创建时间等信息,为处理工具的前向和后向兼容性提供了必要的信息。
2. 软件组成信息(Software Compostition Information):软件中具体组成成分的信息,包括:组件信息、文件信息、代码片段信息和关系。其中,组件与文件为非强关联,文件可以独立存在,不归属任何组件;代码片段则属于某个特定文件,如图2所示。
    * 组件信息(Component Information):SBOM文档所描述的软件产品涉及的软件组件的相关信息。
    * 文件信息(File Information):SBOM文档所描述的软件产品涉及的文件的相关信息。
    * 代码片段信息(Snippet Information):与SBOM文档中所描述的某一特定文件相关。当已知文件中某些内容包含在另一原始源文件时,可选择使用代码片段信息进行标注。当文件的某些内容可能是在另一个许可证下创建的,也可用代码片段信息进行标注。
    * 关系(Relationships):描述SBOM文档中组件、文件和代码片段等元素之间的关系。
3. 环境信息(Environment Information):对软件运行环境和构建环境的主要信息进行说明,提升软件供应链的追溯性,包括:运行环境信息和构建环境信息。
4. 其他许可证信息(Other Licensing Information):描述SBOM许可证列表以外的许可证信息。

注:指不常见或无源的许可证

5. 扩展信息(Extended Information):描述本文件中未定义的其他软件物料信息,以便更全面的描述和管理软件供应链。

图2 SBOM组件、文件与代码片段之间的层次关系

软件物料清单各元素按照“应、宜、可”的方式进行分层级管理(一级指标要求),各元素中具体字段按照“必选、可选”的必要性提出要求(二级指标要求),具体如表1所示:

表1 软件物料清单元素与字段总表

元素名 一级指标要求 字段名 中文名称 二级指标要求
文档基本信息
(Document Basic Information)
Document Version 文档版本 必选
Document License 文档许可证 可选
Document Identifier 文档标识符 必选
Document Name 文档名称 必选
Document Namespace 文档命名空间 可选
External Document Reference 其他文档引用 可选
Document Creator 文档创建者 必选
Document Creation Time 文档创建时间 必选
Document Comments 文档注释 可选
软件组成信息
(Software Compostition Information)
组件信息
(Component Information)
Component Identifier 组件标识符 必选
Component Name 组件名称 必选
Component Version 组件版本 可选
Component Originator Name 组件发起方名称 可选
Component Supplier 组件提供者 可选
Component Home Page 组件主页 可选
Component Download Location 组件下载位置 必选
Component URL 组件溯源信息 可选
Component License 组件的许可证 必选
Comments on Component License 组件许可证其他信息 可选
Component Copyright Text 组件版权文本 可选
Component Checksums 组件校验和 可选
Component Platform 组件平台架构 必选
Component Comments 组件其他信息 可选
文件信息
(File Information)
File Identifier 文件标识符 必选
File Name 文件名 必选
File Type 文件类型 可选
File License 文件许可证 必选
Comments on File License 文件许可证其他信息 可选
File Copyright Text 文件版权文本 可选
File Contributor 文件贡献者 可选
File URL 文件溯源信息 可选
File Checksums 文件校验和 必选
File Comments 文件其他信息 可选
代码片段信息
(Snippet Information)
Snippet Identifier 代码片段标识符 必选
Snippet Name 代码片段名称 可选
Snippet from File Identifier 代码片段来源文件标识符 必选
Snippet Byte Range 代码片段字节范围 必选
Snippet Line Range 代码片段行范围 可选
Snippet License 代码片段许可证 必选
Comments on Snippet License 代码片段许可证其他信息 可选
Snippet Copyright Text 代码片段版权文本 必选
Snippet Comments 代码片段其他信息 可选
关系(Relationships) Relationship 关系 必选
环境信息
(Environment Information)
运行环境信息
(Runtime Information)
Runtime Architecture 运行时CPU架构 必选
Runtime OS 运行时操作系统 必选
Runtime Software Dependencies 运行时第三方软件依赖 可选
Runtime Network Services Dependencies 运行时网络服务依赖 可选
构建环境信息
(Building Environment Information)
Building Environment Architecture 构建时CPU架构 必选
Building Environment OS 构建时操作系统 必选
Building Environment Software Dependencies 构建时第三方软件依赖 可选
Build Target Architecture 构建目标CPU架构 可选
Build Timestamp 构建时间 可选
Build Pipeline Number 构建时流水线号 可选
Build Tool 构建工具 可选
其他许可证信息
(Other License Information)
License Identifier 许可证标识符 必选
License Text 许可证文本 必选
License Short Name 许可证简称 可选
License Full Name 许可证全名 可选
License URL 许可证的官方地址 可选
Comments on License 许可证其他信息 可选
扩展信息
(Extended Information)
ExtendedpropertyName 扩展属性名称 必选
ExtendedpropertyValue 扩展属性值 必选
**格式基本要求**
SBOM文档符合以下要求:
1. 应具有可读性,采用明确清晰的层次结构,包含适当的标题、描述和注释。
2. 应采用软件工具可以读写的语法,如JSON、YAML或XML等标准化的机器可读格式。
3. 应支持语法自动检查。
4. SBOM文档字符集应支持UTF-8编码,宜在SBOM文档开头包含声明编码的机制。
5. 信息可使用的文件格式:
- RDF 
- JSON
- XML
- YAML
- tag:value
文档基本信息(Document Basic Information)
概述
文档基本信息包括的字段如表2所示:

表2 文档基本信息字段

字段名 中文名称 必要性
Document Version 文档版本 必选
Document License 文档许可证 可选
Document Identifier 文档标识符 必选
Document Name 文档名称 必选
Document Namespace 文档命名空间 可选
External Document Reference 其他文档引用 可选
Document Creator 文档创建者 必选
Document Creation Time 文档创建时间 必选
Document Comments 文档注释 可选
文档版本(Document Version)
文档版本由主要版本字段、次要版本字段和修订版本字段组成。

数据格式为:SBOM-M.N.P,其中,M是主要版本号,N是次要版本号,P是修订号。

示例:DocumentVersion:SBOM-2.2.1

文档许可证(Document License)
文档许可证约束的范围包括填入SBOM文档的数据。

SBOM文档创建者和接收者可选择许可证或签订协议,限制SBOM文档或特定元数据的发布和识别。

数据格式为:许可证文本,或其他多行文本。

示例:DocumentLicense: CC0-1.0

文档标识符(Document Identifier)
标识当前的SBOM文档,此SBOM文档可能在关系中被其他内部的文件、组件和外部的文档引用。具体请参阅“5.4.4 关系(Relationships)”部分。

数据格式为:SERef-DOCUMENT。

示例:DocumentIdentifier:SERef-DOCUMENT

文档名称(Document Name)
由创建者指定此SBOM文档的名称。

数据格式为:单行文本。

示例:DocumentName:glibc-v2.3

文档命名空间(Document Namespace)
提供SBOM文档特定的命名空间作为唯一的统一资源标识符(URI),其中不应包含“#”分隔符。

SBOM文档的每一个版本都应对应一个唯一的URI。

数据格式为:唯一的统一资源标识符(URI)。

示例:DocumentNamespace:http://license.coscl.org.cn/MulanOWLBYSAv1

其他文档引用(External Document Reference)
标识在SBOM文档中引用的任何外部文档。

数据格式为:DocumentRef-[idstring] [Document URI],其中,

- [idstring]是一个包含字母、数字、“.”、“+”的唯一字符串;
- [Document URI]是外部文档的唯一ID。

示例:ExternalDocumentRef:DocumentRef-MulanPSL2 http://license.coscl.org.cn/MulanPSL2

文档创建者(Document Creator)
确定SBOM文档创建者可能出现的情况如下:
- SBOM文档是由个人创建的,应指明此人的姓名;
- SBOM文档是代表一个公司或组织创建的,应指明实体名称;
- SBOM文档是使用软件工具创建的,应指明该工具的名称和版本;
- 涉及到多个参与者或工具,应使用此字段的多个实例。

注:人员名称或组织名称也可指定为“匿名”。

数据格式为:

- “Person: person name” and optional “(email)”
- “Organization: organization” and optional “(email)”
- “Tool: toolidentifier-version”

分别表示如下内容:

- 人员:人员姓名、电子邮件(可选)
- 组织:组织、电子邮件(可选)
- 工具:工具标识符版本

示例1:DocumentCreator: Person: Jane Doe ()

示例2:DocumentCreator: Organization: ExampleCodeInspect ()

示例3:DocumentCreator: Tool: LicenseFind-1.0

文档创建时间(Document Creation Time)
确定最初创建SBOM文档的时间,应按ISO 8601标准中规定的UTC格式的合并日期和时间指定。

数据格式为:YYYY-MM-DDThh:mm:ssZ。

示例:DocumentCreationTime: 2023-03-29T18:30:22Z

文档注释(Document Comments)
用来对SBOM文档进行附加的说明解释或描述。

数据格式为:多行文本。

示例:DocumentComments: no remarks

软件组成信息(Software Compostition Information)
组件信息(Component Information)
5.4.1.1. 概述
组件信息包括的字段如表3所示:
  1. 组件信息字段
字段名 中文名称 必要性
Component Identifier 组件标识符 必选
Component Name 组件名称 必选
Component Version 组件版本 可选
Component Originator Name 组件发起方名称 可选
Component Supplier 组件提供者 可选
Component Home Page 组件主页 可选
Component Download Location 组件下载位置 必选
Component URL 组件溯源信息 可选
Component License 组件的许可证 必选
Comments on Component License 组件许可证其他信息 可选
Component Copyright Text 组件版权文本 可选
Component Checksums 组件校验和 可选
Component Platform 组件平台架构 必选
Component Comments 组件其他信息 可选
            1. 组件标识符(Component Identifier)

组件的唯一标识,可被其他元素引用。在添加组件标识符后,组件可以在内部和外部被引用。

数据格式为:SERef-[idstring],其中,

  1. [idstring]是唯一的字串,包含字母、数字、“.”。
  2. ComponentIdentifier: SERef-1
             1. 组件名称(Component Name)

标识组件发起方应提供的组件的全名。

数据格式为:单行文本。

  1. ComponentName: glibc
  2. ComponentName:log4j-src
             1. 组件版本(Component Version)

标识组件的版本,用于识别组件版本和指示组件版本的后续更改,应至少包含主版本号与次版本号。

数据格式为:单行文本。

  1. ComponentVersion: 2.11.1
             1. 组件发起方名称(Component Originator Name)

组件发起方的名称。例如Maven中的Group ID、NPM中的Scope、Docker Hub中的镜像所有者、GitHub用户或组织。

数据格式为:单行文本。

  1. ComponentOriginatorName: gnu
  2. ComponentOriginatorName: org.springframework
  3. ComponentOriginatorName: angular
             1. 组件提供者(Component Supplier)

标识组件的实际分发者,不一定与原始分发者一致,分发者应对应组织名。

数据格式为:单行文本。

  1. ComponentSupplier: Li Hua(lihua@example.com)
             1. 组件主页(Component Home Page)

为SBOM文档创建者提供记录组件主页网站的位置。

数据格式为:URL,或NONE,或NOASSERTION,其中,

  1. NONE,如果不存在组件主页;
  2. NOASSERTION,如果SBOM文档创建者未提供任何信息。
  3. ComponentHomePage: http://ftp.gnu.org/gnu/glibc
             1. 组件下载位置(Component Download Location)

标识创建时用于下载组件的统一资源定位符(URL)或在版本控制系统(VCS)中的特定位置。

数据格式为:URL,或VCS位置,或NONE,或NOASSERTION,其中,

  1. NONE,如果没有任何下载位置;
  2. NOASSERTION,如果SBOM文档创建者未提供任何信息。
  3. ComponentDownloadLocation: http://ftp.gnu.org/gnu/glibc/glibc-ports-2.15.tar.gz
             1. 组件溯源信息(Component URL)

为SBOM文档创建者提供记录软件组件溯源信息的位置。

数据格式为:ComponentURL: schema:type/namespace/name@version?qualifiers#subpath,其中,

  1. schema:常量值“pkg”。必填。
  2. type:组件的“类型”或组件的“协议”,如maven、npm、nuget、gem、pypi等。必填。
  3. namespace:某些名称前缀,例如例如Maven中的Group ID、NPM中的Scope、Docker Hub中的镜像所有者、GitHub用户或组织。可选,且依赖于type。
  4. name:组件的名称。必填。
  5. version:组件的版本。可选。
  6. qualifiers:组件的额外限定数据,例如操作系统、架构、发行版等。可选,且依赖于type。
  7. subpath:组件内的额外子路径,相对于组件根目录,可选。
  8. ComponentURL:deb/debian/curl@7.50.3-1?arch=i386&distro=jessie
             1. 组件的许可证(Component License)

列出组件作者已声明的许可证。

数据格式为:许可证表达式,或NONE,或NOASSERTION,其中,

  1. NONE,如果组件中不包含任何许可证信息;
  2. NOASSERTION,如果SBOM文档创建者未提供任何信息。
  3. ComponentLicense: LGPL-2.0-only
             1. 组件许可证其他信息(Comments on Component License)

记录组件许可证原文信息。

数据格式为:多行文本,或NONE,或NOASSERTION,其中,

  1. NONE,如果组件中不包含任何许可证信息;
  2. NOASSERTION,如果SBOM文档创建者未提供任何信息。
  3. CommentsOnComponentLicense: Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
             1. 组件版权文本(Component Copyright Text)

确定组件的版权所有者,以及存在的任何日期。该字段的内容是从组件信息文件中提取的自由形式的文本。

数据格式为:可以跨多行的自由格式文本,或NONE,或NOASSERTION,其中,

  1. 与版权声明有关的任何文本,即使该文本不完整;
  2. NONE,如果软件组件不包含任何版权信息;
  3. NOASSERTION,如果SBOM文档创建者未提供任何信息。
  4. ComponentCopyrightText: Copyright 2008-2010 John Smith
             1. 组件校验和(Component Checksums)

提供与本SBOM文档中的数据相关的特定组件的唯一标识符,避免在引用特定组件的某个版本或修订时发生混淆。可使用的算法如下:SHA224、SHA256、SHA384、SHA512。

数据格式为:一个算法标识符(例如SHA256)、一个冒号分隔符“:”和一个表示为小写十六进制数字的位值(适合作为算法的输出)。

  1. ComponentChecksums: SHA256:60fd2bc1c230c958706ee28bbdf37a94d6ceef8ac79dfe82a42464401ce75381
             1. 组件平台架构(Component Platform)

用来指定软件组件所支持的操作系统与CPU架构。

数据格式为:多行文本,其中,

  1. 若支持多种架构时,用“,”分割;
  2. 若是没有平台架构要求,则填NOARCH。
  3. ComponentPlatform: linux/amd64,linux/aarch64,darwin/arm64,windows/i386
             1. 组件注释(Component Comments)

用来对软件组件进行附加的说明解释或描述。

数据格式为:多行文本。

  1. ComponentComments: no remarks
         1. 文件信息(File Information)
             1. 概述

文件信息包括的字段如表4所示:

  1. 文件信息字段
字段名 中文名称 必要性
File Identifier 文件标识符 必选
File Name 文件名 必选
File Type 文件类型 可选
File License 文件许可证 必选
Comments on File License 文件许可证其他信息 可选
File Copyright Text 文件版权文本 可选
File Contributor 文件贡献者 可选
File URL 文件溯源信息 可选
File Checksums 文件校验和 必选
File Comments 文件其他信息 可选
            1. 文件标识符(File Identifier)

唯一标识SBOM文档中可能被其他元素引用的文件,应确保每个文件标识符在SBOM文档内的唯一性。

数据格式为:“SERef-”[idstring],其中,

  1. [idstring] 是包含字母、数字、“.”、“-”的唯一字符串。
  2. FileIdentifier: SERef-1
             1. 文件名(File Name)

标识文件的完整路径、文件名以及文件扩展名。

数据格式为:具有包存档或目录根的相对文件名,其中,

  1. 每个文件名都以 ./ 开头,每个文件的路径应为该文件相对于当前SBOM文档的相对路径。
  2. FileName: ./package/foo.c
             1. 文件类型(File Type)

该字段提供有关文件类型的信息。一个文件可能分配多个文件类型。

数据格式为:SOURCE,或BINARY,或ARCHIVE,或APPLICATION,或ML_MODEL,或AUDIO,或IMAGE,或TEXT,或VIDEO,或DOCUMENTATION,或SBOM,或OTHER,其中,

  1. SOURCE,如果文件是可读的源代码(.c、.html等);
  2. BINARY,如果文件是编译对象、目标映像或二进制可执行文件(.o、.a等);
  3. ARCHIVE,如果文件代表存档(.tar、.jar 等);
  4. APPLICATION,如果文件与特定的应用程序(应用类 MIME/*)相关联;
  5. ML_MODEL,如果文件代表机器学习模型(机器学习模型类文件,例如:.bin、.safetensors等);
  6. AUDIO,如果文件与音频文件相关联(音频类 MIME,例如 .mp3);
  7. IMAGE 如果文件与图片图像文件相关联(图像类MIME,例如 .jpg、.gif);
  8. TEXT 如果文件是可读的文本文件(文本类MIME);
  9. VIDEO 如果文件与视频文件类型(视频类MIME);
  10. DOCUMENTATION,如果该文件用作文档;
  11. SBOM 如果该文件用作软件物料清单;
  12. OTHER 如果文件不属于上述类别(生成的工件、数据文件等)。
  13. FileType: BINARY
  14. FileType: ML_MODEL
            1. 文件许可证(File License)

该字段包含SBOM文档创建者推断出的用于管理文件的许可证或如果无法确定管理许可证的替代值。

数据格式为:,或NONE,或NOASSERTION,其中,

  1. 是许可证标识符组成的有效许可证表达式;
  2. NONE,如果SBOM文档创建者认为该文件没有可用的许可证;
  3. NOASSERTION,如果SBOM文档创建者未提供任何信息。
  4. FileLicense: LGPL-2.0-only
             1. 文件许可证其他信息(Comments on File License)

该字段为SBOM文档创建者提供一个文件所采用的许可证相关的补充说明。

如果SBOM文档创建者对于文件所采取的许可证特定条款有补充或因为某些原因对文件采取了有别于其他元素的许可证声明,可以在此处进行补充:

数据格式为:多行文本,或NONE,或NOASSERTION,其中,

  1. 澄清特定许可证条款:如果许可证中有特别需要注意的条款;
  2. 记录许可证兼容性信息:如果文件的许可证与项目中其他部分的许可证有兼容性方面的考虑;
  3. 解释许可证冲突:如果某个文件的许可证可能与整体项目的许可证冲突;
  4. NONE,如果SBOM文档创建者认为该文件没有需要补充说明的信息;
  5. NOASSERTION,如果SBOM文档创建者未提供任何信息。
  6. CommentsOnFileLicense: 许可证继承自上游开源项目 GCC 的 GPL 许可证
             1. 文件版权文本(File Copyright Text)

确定文件的版权所有者,以及日期信息。

数据格式为:多行文本,或NONE,或NOASSERTION,其中,

  1. 任何与版权声明相关的文本,即使不完整;
  2. NONE,如果文件不包含任何版权信息;
  3. NOASSERTION,如果SBOM文档创建者未提供任何信息。
  4. FileCopyrightText: 版权所有 2008-2010 John Smith
             1. 文件贡献者(File Contributor)

该字段为SBOM文档创建者提供一个记录文件贡献者的位置。贡献者可以包括版权所有者或可能不是版权所有者但对文件内容做出贡献的作者的姓名。

数据格式为:多行文本。

  1. FileContributor: Paul Mundt lethal@linux-sh.org
  2. FileContributor: The Regents of the University of California
  3. FileContributor: IBM Corporation
             1. 文件溯源信息(File URL)

记录文件的可追溯信息。

a) NONE,如果不存在文件下载地址;

b) NOASSERTION,如果SBOM文档创建者未提供任何信息;

c) 如果通过URL直接溯源文件,应填写文件URL;

d) 如果通过VCS溯源文件,应填写文件所属项目地址、版本及其相对路径。

数据格式为:URL,或NONE,或NOASSERTION,其中,

  1. 当通过VCS溯源文件时,URL的具体格式为:?version=&path=
  2. repository_root_url: 文件所属仓库根路径的完整URL;
  3. file_path:文件在所属仓库下的地址;
  4. version:当前文件内容所属的版本号,可以是仓库的 Tag 或 Commit ID。
  5. FileURL: http://ftp.gnu.org/gnu/glibc
  6. FileURL: https://github.com/kubernetes/minikube.git?version=v1.33.1&path=/cmd/gvisor/gvisor.go
  7. FileURL: git@github.com:kubernetes/minikube.git?version=v1.33.1&path=/cmd/gvisor/gvisor.go
             1. 文件校验和(File Checksums)

用于提供文件的唯一标识符,避免在引用特定文件的某个版本或修订时发生混淆。该字段的值应采用安全的摘要算法(例如:SHA224、SHA256、SHA384、SHA512)对该文件的完整内容进行摘要计算,将算法和摘要值共同作为文件的哈希值。

数据格式为:一个算法标识符(例如SHA256)、一个英文冒号分隔符(:)和一个表示为小写十六进制数字的位值(适合作为算法的输出)。

  1. FileChecksums: SHA256:60fd2bc1c230c958706ee28bbdf37a94d6ceef8ac79dfe82a42464401ce75385
             1. 文件其他信息(File Comments)

用来对文件进行附加的说明解释或描述。

数据格式为:多行文本。

  1. FileComments: no remarks
         1. 代码片段信息(Snippet Information)
             1. 概述

代码片段信息包括的字段如表5所示:

  1. 代码段信息字段
字段名 中文名称 必要性
Snippet Identifier 代码片段标识符 必选
Snippet Name 代码片段名称 可选
Snippet from File Identifier 代码片段来源文件标识符 必选
Snippet Byte Range 代码片段字节范围 必选
Snippet Line Range 代码片段行范围 可选
Snippet License 代码片段许可证 必选
Comments on Snippet License 代码片段许可证其他信息 可选
Snippet Copyright Text 代码片段版权文本 必选
Snippet Comments 代码片段其他信息 可选
            1. 代码片段标识符(Snippet Identifier)

在一个SBOM文档中,同一个代码片段可能被多次引用。每个代码片段都是一个需要能够被唯一引用的元素,以便能够清楚地表达该代码片段与其他元素之间的关系。代码片段标识符应保证代码片段引用的唯一性。

数据格式为:Ref-[idstring],其中,

  1. [idstirting]是一个包含字母、数字、“-”的唯一字符串。
  2. SnippetIdentifier:Ref-1
             1. 代码片段名称(Snippet Name)

本字段记录代码片段名称,以提供便捷的方式识别特定的代码片段。

数据格式为:单行文本。

  1. SnippetName: from Linux kernel
             1. 代码片段来源文件标识符(Snippet from File Identifier)

在一个SBOM文档中可能存在同一文件的多个版本。代码片段来源文件标识符应保证与此代码片段关联SBOM文档中的文件被标识出来。

数据格式为:[“DocumentRef-”[idstring]”:”] ID,其中,

  1. DocumentRef-[idstring]:是对外部档的可选引用;
  2. ID是一个包含字母、数字、“-”的字符串。
  3. SnippetFromFileIdenti­er: Ref-filecontainingsnippet
             1. 代码片段字节范围(Snippet Byte Range)

本字段定义了代码片段信息应用于的原始文件(见5.6.3)中的字节范围。字节范围独立于各种格式问题,是指代差异最准确的方式。

数据格式为:number1:number2,其中,

  1. number1大于等于1,小于等于number2,且number2小于或等于文件的字节总数;
  2. number1和number2的字节应包含在该范围内。
  3. SnippetByteRange: 310:420
             1. 代码片段行范围(Snippet Line Range)

本字段定义了代码片段信息应用于的原始文件(见5.6.3)中的行范围。对于有已知行分隔符的文件,行范围更容易参考。如果字节范围和行范围之间存在不一致,优先考虑字节范围值。

数据格式为:number1:number2,其中,

  1. number1大于等于1,小于等于number2,且number2小于或等于文件的总行数。
  2. SnippetLineRange: 5:23
             1. 代码片段许可证(Snippet License)

本字段包含SBOM文档创建者认为该代码片段所使用的许可证。如果无法确定或者不愿意给出该代码片段所使用的许可证,则使用替代值。

数据格式为:,或NONE,或NOASSERTION,其中,

  1. NONE,如果SBOM文档创建者认为该代码片段没有可用的许可证;
  2. NOASSERTION,如果SBOM文档创建者未提供任何信息。
  3. SnippetLicense:GPL-2.0-only
             1. 代码片段许可证其他信息(Comments on Snippet License)

本字段是向SBOM文档的接收者提供详细的解释。

数据格式为:多行文本,其中,

  1. NOASSERTION,如果代码片段与文件中的许可证信息不匹配。
  2. CommentsOnSnippetLicense: The concluded license was taken from package xyz, from which the snippet was copied into the current file.

The concluded license information was found in the COPYING.txt file in package xyz.

            1. 代码片段版权文本(Snippet Copyright Text)

本字段提供代码片段的版权所有者,以及任何出现的日期。该字段是一个自由格式的文本字段,内容包括:

数据格式为:多行文本,或NONE,或NOASSERTION,其中,

  1. 任何与版权声明相关的文本,无论完整与否;
  2. None,如果文件不包含任何版权信息;
  3. NOASSERTION,如果SBOM文档创建者未提供任何信息。
  4. SnippetCopyrightText: Copyright 2008-2010 John Smith
             1. 代码片段其他信息(Snippet Comments)

本字段为SBOM文档创建者提供代码片段注释的位置,以提供更多代码片段的确切信息。

数据格式为:多行文本。

  1. SnippetComments:This snippet was identified as significant and highlighted in this Apache-2.0 file, when a commercial scanner identified it as being derived from file fooin package xyz which is licensed under GPL-2.0.
         1. 关系(Relationships)

这个字段可以用来提供两个元素之间关系的信息。例如,可以表示代码段、文件、组件或SBOM文档之间的关系。这套关系是通过研究供应链中的常见用例而确定的。

两个元素之间的关系表达式如下:

A Relationship B。

所支持的两个元素之间的关系如下:

  1. 包含关系
    1. CONTAINS:A包含B
    2. HAS_OPTIONAL_COMPONENT:B是A的可选组件
    3. HAS_DOCUMENTATION:A有SBOM文档B / B是A的SBOM文档
    4. HAS_METADATA:B是A的元数据
    5. HAS_SPECIFICATION:B是A的功能说明
    6. HAS_DATA_FILE:A将B看做数据文件
    7. SERIALIZED_IN_ARTIFACT:A以序列化的形式存在于B中
  2. 继承关系
    1. ANCESTOR_OF:A是B的祖先,即A与B存在(一级或多级)继承关系
    2. DESCENDANT_OF:A是B的后代,即A与B存在(一级或多级)继承关系
  3. 生成关系
    1. GENERATES:A生成B
    2. EXPANDS_TO:A扩充为B
    3. COPIED_TO:A被拷贝到B
    4. PACKAGED_BY:B是A的一个打包实例 / A被打成一个包B
  4. 依赖关系
    1. DEPENDS_ON:A依赖于B
    2. HAS_OPTIONAL_DEPENDENCY:B是A的可选依赖
    3. HAS_PROVIDED_DEPENDENCY:B是A的依赖,且B不包含在分发物中,而是被认为会在运行环境中已经被提供了的
    4. HAS_DEPENDENCY_MANIFEST:A有依赖清单B / B是一个清单,包含了A的依赖信息
  5. 修改关系
    1. MODIFIED_BY:A被B修改
    2. AMENDED_BY:A(文字类文件,如描述,许可证等)被B所修订
    3. HAS_ADDED_FILE:A中增加了文件B
    4. HAS_DELETED_FILE:B是被从A中删除的文件
    5. HAS_VARIANT:B是A的变体
    6. PATCHED_BY:B是打到A上的一个补丁
  6. 连接关系:
    1. HAS_DYNAMIC_LINK:A动态链接B
    2. HAS_STATIC_LINK:A静态链接B
  7. 使用/调用关系
    1. DELEGATED_TO:A授权给B
    2. INVOKED_BY:A被B调用
    3. USES_TOOL:A将B作为工具来使用。
  8. 许可证关系
    1. HAS_CONCLUDED_LICENSE:A被推断为使用了B许可证
    2. HAS_DECLARED_LICENSE:A确定使用了B许可证
  9. 运行关系
    1. HAS_HOST:A被托管运行于B
    2. CONFIGURATION_ON:A是用于B上的配置
    3. HAS_PREREQUSITE:A对B有预置前提条件(?)
    4. HAS_REQUIREMENT:A对B有要求
  10. 输入输出关系
    1. HAS_INPUTS:B是A的输入
    2. HAS_OUTPUTS:B是A的输出
  11. 测试关系
    1. HAS_TEST:B是用于测试A的制品
    2. HAS_TEST_CASE:B是用于测试A的测试用例
  12. 安全漏洞相关关系
    1. AFFECTS:A(安全漏洞)影响了B
    2. DOES_NOT_AFFECT:A(安全漏洞)对B没有影响
    3. UNDER_INVESTIGATION_FOR:A(安全漏洞)对B是否有影响正在调查中
    4. FOUND_BY:A(安全漏洞)被B首次发现
    5. COORDINATED_BY:A(安全漏洞)被B(个人,厂商,研究机构等)披露
    6. REPORTED_BY:A(安全漏洞)被B报告
    7. PUBLISHED_BY:A(安全漏洞)被B向公众公开
    8. REPUBLISHED_BY:A(安全漏洞)被B向公众再公开,用于安全漏洞的详细信息有修改等情况。
    9. EXPLOIT_CREATED_BY:B通过创建一些手段,以利用A(安全漏洞)实现侵害。
    10. FIXED_BY:A(安全漏洞)被B所修复 / B提供了对A(安全漏洞)的修复方法
    11. FIXED_IN:A(安全漏洞)在B中已经得到修复 / A(安全漏洞)在B中已经不存在
    12. HAS_ASSESSMENT_FOR:对B做关于A(安全漏洞)的评估
    13. HAS_ASSOCIATED_VULNERABILITY:A与B(安全漏洞)存在关联。
  13. AI/数据集相关关系
    1. HAS_EVIDENCE:数据集相关,B是A的证据
    2. TESTED_ON:AI/数据集相关,A被在B上进行测试
    3. TRAINED_ON:AI/数据集相关,A是基于B训练的
  14. 其他关系
    1. HAS_EXAMPLE:B是A的例子
    2. DESCRIBES:A描述B
    3. AVAILABLE_FROM:A从B处得到供应 / B提供A
    4. HAS_DISTRIBUTION_ARTIFACT:A有发布形式B(如RPM包,源码压缩包等)
    5. OTHER:其他关系
      1. 环境信息(Environment Information)
        1. 运行环境信息(Runtime Information)
          1. 概述

运行环境信息包括的字段如表6所示:

  1. 运行环境信息字段
字段名 中文名称 必要性
Runtime Architecture 运行时CPU架构 必选
Runtime OS 运行时操作系统 必选
Runtime Software Dependencies 运行时第三方软件依赖 可选
Runtime Network Services Dependencies 运行时网络服务依赖 可选
            1. 运行时CPU架构(Runtime Architecture)

提供软件运行时可支持的CPU架构范围。

数据格式为:多行文本,其中,

  1. 若支持多种架构时,用“,”分割;
  2. 若是没有CPU架构要求,则填NOARCH。
  3. RuntimeArchitecture: amd64,AArch64
             1. 运行时操作系统(Runtime OS)

提供软件运行时可支持的操作系统清单。

数据格式为:多行文本,其中,

——若支持多种操作系统时,用“,”分割;

——若是没有操作系统要求,则填NOOS。

  1. RuntimeOS: Lylin Linux Server V10 SP3, UnionTech OS Server 1050d
             1. 运行时第三方软件依赖(Runtime Software Dependencies)

提供软件运行时所依赖的的第三方软件列表。

数据格式为:多行文本,其中,

——每个第三方软件依赖采用{软件发起方标识}:{软件名称}:{软件版本}的格式进行标识

——若包含多个第三方软件依赖时,用“,”分割;

——若是没有第三方软件依赖要求,则填NOTRDDEPS。

  1. RuntimeSoftwareDependencies:gnu.org:gcc:9.1,git.io:git:2.39.3
             1. 运行时网络服务依赖(Runtime Network Services Dependencies)

提供软件运行时所依赖的网络服务或网络API接口列表。

数据格式为:键值对组合的列表,其中具体的键值定义如下:

——网络服务标识(Identity),数据格式为SBOM文档内唯一的网络服务标识单行文本

——网络服务名称(Name),数据格式为单行文本

——网络服务供应商(Vendor),数据格式为单行文本

——网络服务必要性(Required),数据格式为true 或 false

——网络服务协议类型(Protocol),数据格式为单行文本

——网络服务地址(Address),数据格式为单行文本

  1. RuntimeNetworkServicesDependencies:
  • identity: ocr-service

name: 发票识别服务

vendor: Example

required: true

protocol: HTTPS

address: https://api.example.com/ocr

  • identity: llm-service

name: 大模型服务

vendor: Example

required: false

protocol: WebSocket

address: wss://api.example.com/llm

        1. 构建环境信息(Building Environment Information)
            1. 概述

构建环境信息包括的字段如表7所示:

  1. 构建环境信息字段
字段名 中文名称 必要性
Building Environment Architecture 构建时CPU架构 必选
Building Environment OS 构建时操作系统 必选
Building Environment Software Dependencies 构建时第三方软件依赖 可选
Build Target Architecture 构建目标CPU架构 可选
Build Timestamp 构建时间 可选
Build Pipeline Number 构建时流水线号 可选
Build Tool 构建工具 可选
            1. 构建时CPU架构(Building Environment Architecture)

提供软件构建环境所使用的CPU架构列表。

数据格式为:多行文本,其中,

——若支持多种架构时,用“,”分割;

  1. BuildingArchitecture: amd64,AArch64
             1. 构建时操作系统(Building Environment OS)

提供软件构建环境使用的操作系统清单。

数据格式为:多行文本,其中,

——若支持多种操作系统时,用“,”分割

  1. BuildingOS: Lylin Linux Server V10 SP3, UnionTech OS Server 1050d
             1. 构建时第三方软件依赖(Building Environment Software Dependencies)

提供软件构建时所需的第三方软件列表。

数据格式为:多行文本,其中,

——每个第三方软件依赖采用{软件发起方标识}:{软件名称}:{软件版本}的格式进行标识

——若包含多个第三方软件依赖时,用“,”分割;

——若是没有第三方软件依赖要求,则填NOTRDDEPS。

  1. BuildingSoftwareDependencies:gnu.org:gcc:9.1,git.io:git:2.39.3
             1. 构建目标CPU架构(Build Target Architecture)

提供软件构建过程指定的CPU架构列表。

数据格式为:多行文本,其中,

——若支持多种架构时,用“,”分割;

  1. BuildTargetArchitecture: amd64,AArch64
             1. 构建时间(Build Timestamp)

提供软件构建开始的时间,需符合 ISO8601 规范要求的时间日期格式

数据格式为:YYYY-MM-DDThh:mm:ssZ。

  1. BuildTimestamp: 2023-03-29T18:30:22Z
             1. 构建时流水线号(Build Pipeline Number)

提供软件构建当次流水线编号

数据格式为:单行文本

  1. BuildPipelineNumber: 399827
             1. 构建工具(Build Tool)

提供软件构建工具列表,包含每个工具的基本信息

数据格式为:键值对,其中包括:

——构建工具名称(Name),数据格式为单行文本,例如:maven,npm,docker,go

——构建工具版本(Version),数据格式为单行文本

  1. BuildTool:
  • name: maven

version: 3.6.5

  • name: npm

version: 10.5.0

    1. 其他许可证信息(Other License Information)
        1. 概述

其他许可证信息包括的字段如表8所示:

  1. 其他许可证信息字段
字段名 中文名称 必要性
License Identifier 许可证标识符 必选
License Text 许可证文本 必选
License Short Name 许可证简称 可选
License Full Name 许可证全名 可选
License URL 许可证的官方地址 可选
Comments on License 许可证其他信息 可选
        1. 其它许可证标识符(License Identifier)

提供其它许可证唯一标识符,可在SBOM文档的组件、文件和代码片段部分使用。

数据格式为:LicenseRef-[idstring],其中,

  1. [idstring]是一个包含字母、数字、“.”、“-”的字符串,确保在同一项目范围内的每个 idstring 是唯一的,idstring中仅允许字母、数字、点号和连字符。
  2. LicenseIdentifier:LicenseRef-Beerware-4.2
         1. 许可证文本(License Text)

提供一份从组件、文件或代码片段中提取的、与许可证标识符相关的许可证参考的实际文本,为后续的分析提供便利。文本可以来自源代码文件的注释中,解释了代码文件的许可证信息,也可以是独立的许可证文件(如LICENSE文件)中的内容。

数据格式为:多行文本。

  1. LicenseText:This software is licensed under the Beer License.
         1. 许可证简称(License Short Name)

该字段提供许可证的简称。

数据格式为:仅允许字母、数字、点号和连字符,其中,

  1. 优先从当前许可证的官方网站找许可证的简称,如果找不到已定义的简称,可以自行按以上要求编写;
  2. 如果没有常用名称或不确定名称,可以使用NOASSERTION表示。
  3. LicenseShortName: GPL-2.0-only
         1. 许可证全称(License Full Name)

本字段提供许可证的全称。

数据格式为:仅允许字母、数字、空格、点号、连字符和逗号,其中,

  1. 优先从当前许可证的官方网站找许可证的全称,如果找不到已定义的全称,可以自行按以上要求定制;
  2. 如果没有通用的名称或者不确定名称,可以使用NOASSETION进行表示。
  3. LicenseFullName: GNU General Public License v2.0 only
         1. 许可证的官方地址(License URL)

本字段用于提供该许可证的官方URL地址,方便用户查阅许可证的完整信息及其最新版本。通过提供官方URL,用户可以确保获取到最新的、官方认可的许可证内容。

数据格式为:单行文本(URL格式)。

  1. LicenseURL: https://www.gnu.org/licenses/gpl-3.0.html
         1. 许可证注释(License Comments)

用于提供对许可证的额外说明或注释。这些注释可能包括关于许可证的特定用例、许可证的适用性或任何其他相关信息。

数据格式为:多行文本。

  1. LicenseComments:The Whiskey-Ware License has a couple of other standard variants.
     1. 扩展信息(Extended Information)

扩展信息可能因企业需求、‌行业标准和法规要求的不同而有所差异,可根据自身情况选择合适的扩展信息。扩展信息包括的字段如表9所示:

  1. 扩展信息字段
字段名 中文名称 必要性
ExtendedpropertyName 扩展属性名称 必选
ExtendedpropertyValue 扩展属性值 必选

扩展信息字段的描述和数据格式如下:

  1. 扩展属性名称

描述:自定义的属性名称;

数据格式:包含字母、数字的唯一字符串。

  1. 扩展属性值

描述:扩展属性的具体取值;

数据格式:多行文本。

  1. ExtendedpropertyName: HasPatent
  2. ExtendedpropertyValue: No
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

©Copyright 2023 CCF 开源发展委员会
Powered by Trustie& IntelliDE 京ICP备13000930号