本文档正在积极开发中,尚未最终定稿。
Skip to content

SBOM 与签名

概述

软件物料清单 (Software Bill of Materials, SBOM) 和软件制品的签名是 CRA 合规的核心支柱。SBOM 提供了产品中包含的所有组件的透明清单,而签名则确保 SBOM 本身及所有交付制品的完整性 (Integrity) 和真实性 (Authenticity)。

法律依据

Art. 13(23) CRA: "制造商应识别和记录含有数字元素的产品中的漏洞和组件,包括以常用的、机器可读的格式编制软件物料清单,至少涵盖产品的顶层依赖项。"

Art. 10(12) CRA: "制造商应确保向用户提供的安全更新以安全的方式分发,并在安装此类安全更新时确保产品的完整性。"

Annex I, Part I, No. 3: "含有数字元素的产品 [...] 应确保对存储、传输或以其他方式处理的数据 [...] 的完整性保护,防止篡改或更改。"

SBOM 生命周期

根据 Art. 13(23) CRA,制造商必须创建至少涵盖产品顶层依赖项的 SBOM。SBOM 随每次发布自动生成,并经历以下生命周期:

发布触发器 (Git Tag)
    |
    v
构建制品
    |
    v
生成 SBOM (Trivy/Syft -> CycloneDX JSON)
    |
    |-->  将 SBOM 作为发布资产附加
    |-->  签名 SBOM (Cosign)
    |-->  生成 SHA256 哈希
    |-->  将哈希 + 签名作为发布资产附加
    +-->  归档 SBOM (合规仓库)

签名架构

发布过程中产生的所有制品均经过签名,以保证完整性和真实性。签名架构覆盖每个交付物:

构建流水线
    |
    +-- 构建制品 (二进制文件、镜像、固件)
    |   +-- 生成 SHA256 哈希
    |   +-- 使用 Cosign 签名
    |
    +-- SBOM (CycloneDX JSON)
    |   +-- 生成 SHA256 哈希
    |   +-- 使用 Cosign 签名
    |
    +-- 发布
        +-- 制品 + 签名 + 哈希
        +-- SBOM + 签名 + 哈希
        +-- 公钥 (cosign.pub)
        +-- SHA256SUMS.txt

要求

要求实现方式CRA 条款
机器可读的 SBOM 格式CycloneDX JSONArt. 13(23)
顶层依赖项通过 Syft/Trivy 自动检测Art. 13(23)
每次发布的 SBOM每个发布标签生成 SBOM最佳实践
完整性保护使用 Cosign 签名(所有制品和 SBOM)Art. 10(12)
可追溯性Git 历史 + 发布资产Annex VII
可用性归档至合规仓库 + 发布资产Art. 13(23)

签名制品类型

制品签名方式工具状态
Docker/容器镜像Cosign(镜像签名)docker-build.yml已实现
发布二进制文件Cosign(Blob 签名)cra-release.yml已实现
SBOMCosign(Blob 签名,无密钥 OIDC)cra-release.yml / cra-sbom-sign已实现
固件二进制文件Cosign(Blob 签名)构建工作流计划中

工具

工具功能格式
Trivy从容器镜像和文件系统生成 SBOMCycloneDX, SPDX
Syft从源代码和二进制文件生成 SBOMCycloneDX, SPDX
Cosign制品和 SBOM 的签名与验证Sigstore
GitHub Actions生成、签名和归档的自动化-

工作流集成

SBOM 生成和签名通过两种路径执行:

1. 自动化模板(现有): SBOM 生成通过 modules-license-compliance.yml 模块集成到现有的发布工作流 (automatic-release.yml) 中。

yaml
# 在工作流调用中激活
license-compliance:
  generate-sbom: true
  sbom-format: cyclonedx-json

2. CRA 合规工作流(新增): 专用的 CRA 发布工作流负责 SBOM 的生成、签名和归档为发布资产——独立于现有的发布工作流。

yaml
# 在任何仓库中使用(零配置)
jobs:
  cra-release:
    uses: bauer-group/SEC-CRACompliance/.github/workflows/cra-release.yml@main
    permissions:
      contents: write
      id-token: write
      security-events: write

该工作流使用组合动作 cra-sbom-generate(Trivy,自动检测)和 cra-sbom-sign(Cosign,无密钥 OIDC)。

章节结构

章节主题描述
1SBOM 生成生成流程、触发器和特定类型的工具
2格式规范CycloneDX JSON 格式、必填字段和命名约定
3归档与保留存储位置、保留策略和访问
4签名SBOM 签名、制品签名和 Cosign 流程
5密钥管理密钥生成、存储、轮换和应急流程
6验证面向最终用户、系统和监管机构的验证流程

文档基于 CC BY-NC 4.0 许可 · 代码基于 MIT 许可