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,其中,
与版权声明有关的任何文本,即使该文本不完整;
NONE,如果软件组件不包含任何版权信息;
NOASSERTION,如果SBOM文档创建者未提供任何信息。
ComponentCopyrightText: Copyright 2008-2010 John Smith
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,其中,
任何与版权声明相关的文本,无论完整与否;
None,如果文件不包含任何版权信息;
NOASSERTION,如果SBOM文档创建者未提供任何信息。
SnippetCopyrightText: Copyright 2008-2010 John Smith
1. 代码片段其他信息(Snippet Comments)
本字段为SBOM文档创建者提供代码片段注释的位置,以提供更多代码片段的确切信息。
数据格式为:多行文本。
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.
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所示:
表1 软件物料清单元素与字段总表
(Document Basic Information)
(Software Compostition Information)
(Component Information)
(File Information)
(Snippet Information)
(Environment Information)
(Runtime Information)
(Building Environment Information)
(Other License Information)
(Extended Information)
**格式基本要求**
SBOM文档符合以下要求:文档基本信息(Document Basic Information)
概述
文档基本信息包括的字段如表2所示:表2 文档基本信息字段
文档版本(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],其中,
示例:ExternalDocumentRef:DocumentRef-MulanPSL2 http://license.coscl.org.cn/MulanPSL2
文档创建者(Document Creator)
确定SBOM文档创建者可能出现的情况如下:注:人员名称或组织名称也可指定为“匿名”。
数据格式为:
分别表示如下内容:
示例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所示:组件的唯一标识,可被其他元素引用。在添加组件标识符后,组件可以在内部和外部被引用。
数据格式为:SERef-[idstring],其中,
标识组件发起方应提供的组件的全名。
数据格式为:单行文本。
标识组件的版本,用于识别组件版本和指示组件版本的后续更改,应至少包含主版本号与次版本号。
数据格式为:单行文本。
组件发起方的名称。例如Maven中的Group ID、NPM中的Scope、Docker Hub中的镜像所有者、GitHub用户或组织。
数据格式为:单行文本。
标识组件的实际分发者,不一定与原始分发者一致,分发者应对应组织名。
数据格式为:单行文本。
为SBOM文档创建者提供记录组件主页网站的位置。
数据格式为:URL,或NONE,或NOASSERTION,其中,
标识创建时用于下载组件的统一资源定位符(URL)或在版本控制系统(VCS)中的特定位置。
数据格式为:URL,或VCS位置,或NONE,或NOASSERTION,其中,
为SBOM文档创建者提供记录软件组件溯源信息的位置。
数据格式为:ComponentURL: schema:type/namespace/name@version?qualifiers#subpath,其中,
列出组件作者已声明的许可证。
数据格式为:许可证表达式,或NONE,或NOASSERTION,其中,
记录组件许可证原文信息。
数据格式为:多行文本,或NONE,或NOASSERTION,其中,
确定组件的版权所有者,以及存在的任何日期。该字段的内容是从组件信息文件中提取的自由形式的文本。
数据格式为:可以跨多行的自由格式文本,或NONE,或NOASSERTION,其中,
提供与本SBOM文档中的数据相关的特定组件的唯一标识符,避免在引用特定组件的某个版本或修订时发生混淆。可使用的算法如下:SHA224、SHA256、SHA384、SHA512。
数据格式为:一个算法标识符(例如SHA256)、一个冒号分隔符“:”和一个表示为小写十六进制数字的位值(适合作为算法的输出)。
用来指定软件组件所支持的操作系统与CPU架构。
数据格式为:多行文本,其中,
用来对软件组件进行附加的说明解释或描述。
数据格式为:多行文本。
文件信息包括的字段如表4所示:
唯一标识SBOM文档中可能被其他元素引用的文件,应确保每个文件标识符在SBOM文档内的唯一性。
数据格式为:“SERef-”[idstring],其中,
标识文件的完整路径、文件名以及文件扩展名。
数据格式为:具有包存档或目录根的相对文件名,其中,
该字段提供有关文件类型的信息。一个文件可能分配多个文件类型。
数据格式为:SOURCE,或BINARY,或ARCHIVE,或APPLICATION,或ML_MODEL,或AUDIO,或IMAGE,或TEXT,或VIDEO,或DOCUMENTATION,或SBOM,或OTHER,其中,
该字段包含SBOM文档创建者推断出的用于管理文件的许可证或如果无法确定管理许可证的替代值。
数据格式为:,或NONE,或NOASSERTION,其中,
该字段为SBOM文档创建者提供一个文件所采用的许可证相关的补充说明。
如果SBOM文档创建者对于文件所采取的许可证特定条款有补充或因为某些原因对文件采取了有别于其他元素的许可证声明,可以在此处进行补充:
数据格式为:多行文本,或NONE,或NOASSERTION,其中,
确定文件的版权所有者,以及日期信息。
数据格式为:多行文本,或NONE,或NOASSERTION,其中,
该字段为SBOM文档创建者提供一个记录文件贡献者的位置。贡献者可以包括版权所有者或可能不是版权所有者但对文件内容做出贡献的作者的姓名。
数据格式为:多行文本。
记录文件的可追溯信息。
a) NONE,如果不存在文件下载地址;
b) NOASSERTION,如果SBOM文档创建者未提供任何信息;
c) 如果通过URL直接溯源文件,应填写文件URL;
d) 如果通过VCS溯源文件,应填写文件所属项目地址、版本及其相对路径。
数据格式为:URL,或NONE,或NOASSERTION,其中,
用于提供文件的唯一标识符,避免在引用特定文件的某个版本或修订时发生混淆。该字段的值应采用安全的摘要算法(例如:SHA224、SHA256、SHA384、SHA512)对该文件的完整内容进行摘要计算,将算法和摘要值共同作为文件的哈希值。
数据格式为:一个算法标识符(例如SHA256)、一个英文冒号分隔符(:)和一个表示为小写十六进制数字的位值(适合作为算法的输出)。
用来对文件进行附加的说明解释或描述。
数据格式为:多行文本。
代码片段信息包括的字段如表5所示:
在一个SBOM文档中,同一个代码片段可能被多次引用。每个代码片段都是一个需要能够被唯一引用的元素,以便能够清楚地表达该代码片段与其他元素之间的关系。代码片段标识符应保证代码片段引用的唯一性。
数据格式为:Ref-[idstring],其中,
本字段记录代码片段名称,以提供便捷的方式识别特定的代码片段。
数据格式为:单行文本。
在一个SBOM文档中可能存在同一文件的多个版本。代码片段来源文件标识符应保证与此代码片段关联SBOM文档中的文件被标识出来。
数据格式为:[“DocumentRef-”[idstring]”:”] ID,其中,
本字段定义了代码片段信息应用于的原始文件(见5.6.3)中的字节范围。字节范围独立于各种格式问题,是指代差异最准确的方式。
数据格式为:number1:number2,其中,
本字段定义了代码片段信息应用于的原始文件(见5.6.3)中的行范围。对于有已知行分隔符的文件,行范围更容易参考。如果字节范围和行范围之间存在不一致,优先考虑字节范围值。
数据格式为:number1:number2,其中,
本字段包含SBOM文档创建者认为该代码片段所使用的许可证。如果无法确定或者不愿意给出该代码片段所使用的许可证,则使用替代值。
数据格式为:,或NONE,或NOASSERTION,其中,
本字段是向SBOM文档的接收者提供详细的解释。
数据格式为:多行文本,其中,
The concluded license information was found in the COPYING.txt file in package xyz.
本字段提供代码片段的版权所有者,以及任何出现的日期。该字段是一个自由格式的文本字段,内容包括:
数据格式为:多行文本,或NONE,或NOASSERTION,其中,
本字段为SBOM文档创建者提供代码片段注释的位置,以提供更多代码片段的确切信息。
数据格式为:多行文本。
这个字段可以用来提供两个元素之间关系的信息。例如,可以表示代码段、文件、组件或SBOM文档之间的关系。这套关系是通过研究供应链中的常见用例而确定的。
两个元素之间的关系表达式如下:
A Relationship B。
所支持的两个元素之间的关系如下:
运行环境信息包括的字段如表6所示:
提供软件运行时可支持的CPU架构范围。
数据格式为:多行文本,其中,
提供软件运行时可支持的操作系统清单。
数据格式为:多行文本,其中,
——若支持多种操作系统时,用“,”分割;
——若是没有操作系统要求,则填NOOS。
提供软件运行时所依赖的的第三方软件列表。
数据格式为:多行文本,其中,
——每个第三方软件依赖采用{软件发起方标识}:{软件名称}:{软件版本}的格式进行标识
——若包含多个第三方软件依赖时,用“,”分割;
——若是没有第三方软件依赖要求,则填NOTRDDEPS。
提供软件运行时所依赖的网络服务或网络API接口列表。
数据格式为:键值对组合的列表,其中具体的键值定义如下:
——网络服务标识(Identity),数据格式为SBOM文档内唯一的网络服务标识单行文本
——网络服务名称(Name),数据格式为单行文本
——网络服务供应商(Vendor),数据格式为单行文本
——网络服务必要性(Required),数据格式为true 或 false
——网络服务协议类型(Protocol),数据格式为单行文本
——网络服务地址(Address),数据格式为单行文本
name: 发票识别服务
vendor: Example
required: true
protocol: HTTPS
address: https://api.example.com/ocr
name: 大模型服务
vendor: Example
required: false
protocol: WebSocket
address: wss://api.example.com/llm
构建环境信息包括的字段如表7所示:
提供软件构建环境所使用的CPU架构列表。
数据格式为:多行文本,其中,
——若支持多种架构时,用“,”分割;
提供软件构建环境使用的操作系统清单。
数据格式为:多行文本,其中,
——若支持多种操作系统时,用“,”分割
提供软件构建时所需的第三方软件列表。
数据格式为:多行文本,其中,
——每个第三方软件依赖采用{软件发起方标识}:{软件名称}:{软件版本}的格式进行标识
——若包含多个第三方软件依赖时,用“,”分割;
——若是没有第三方软件依赖要求,则填NOTRDDEPS。
提供软件构建过程指定的CPU架构列表。
数据格式为:多行文本,其中,
——若支持多种架构时,用“,”分割;
提供软件构建开始的时间,需符合 ISO8601 规范要求的时间日期格式
数据格式为:YYYY-MM-DDThh:mm:ssZ。
提供软件构建当次流水线编号
数据格式为:单行文本
提供软件构建工具列表,包含每个工具的基本信息
数据格式为:键值对,其中包括:
——构建工具名称(Name),数据格式为单行文本,例如:maven,npm,docker,go
——构建工具版本(Version),数据格式为单行文本
version: 3.6.5
version: 10.5.0
其他许可证信息包括的字段如表8所示:
提供其它许可证唯一标识符,可在SBOM文档的组件、文件和代码片段部分使用。
数据格式为:LicenseRef-[idstring],其中,
提供一份从组件、文件或代码片段中提取的、与许可证标识符相关的许可证参考的实际文本,为后续的分析提供便利。文本可以来自源代码文件的注释中,解释了代码文件的许可证信息,也可以是独立的许可证文件(如LICENSE文件)中的内容。
数据格式为:多行文本。
该字段提供许可证的简称。
数据格式为:仅允许字母、数字、点号和连字符,其中,
本字段提供许可证的全称。
数据格式为:仅允许字母、数字、空格、点号、连字符和逗号,其中,
本字段用于提供该许可证的官方URL地址,方便用户查阅许可证的完整信息及其最新版本。通过提供官方URL,用户可以确保获取到最新的、官方认可的许可证内容。
数据格式为:单行文本(URL格式)。
用于提供对许可证的额外说明或注释。这些注释可能包括关于许可证的特定用例、许可证的适用性或任何其他相关信息。
数据格式为:多行文本。
扩展信息可能因企业需求、行业标准和法规要求的不同而有所差异,可根据自身情况选择合适的扩展信息。扩展信息包括的字段如表9所示:
扩展信息字段的描述和数据格式如下:
描述:自定义的属性名称;
数据格式:包含字母、数字的唯一字符串。
描述:扩展属性的具体取值;
数据格式:多行文本。