供应链完整性
NextPDF 的供应链控制在两个环节生效:一是运行于每个涉及依赖变更的拉取请求与每个版本标签上的 CI 门禁;二是发布工作流,其中配置了来源证明(provenance)生成、 无密钥签名与 SBOM 生成。
| 控制项 | 类型 |
|---|---|
构建的 CycloneDX 1.7 SBOM | CI 门禁,硬性 |
| 绑定构建输入的 in-toto 声明 | CI 门禁,硬性 |
| SHA-256 依赖指纹与固定基线的差异比对 | CI 门禁,硬性 |
| 针对依赖安全公告策略的 OpenVEX 一致性检查 | CI 门禁,硬性 |
| 跨夹具确定性检查 | CI 检查,尽力而为 |
固定版本的 slsa-github-generator 来源证明生成 | 工作流配置——发布工作流 |
带 Rekor 透明日志的 Sigstore cosign 无密钥签名 | 工作流配置——发布工作流 |
CycloneDX 1.7 与 SPDX 2.3 SBOM 生成 | 工作流配置——发布工作流 |
每夜在解析器与写入器路径上运行的 php-fuzzer 矩阵 | 定时 CI |
CI 门禁
标题为“CI 门禁”的章节每个涉及依赖的拉取请求与每个版本标签都会运行:
| 检查 | 作用 | 门禁 |
|---|---|---|
| 清单 | 生成构建的 CycloneDX 1.7 SBOM | 硬性 |
| 构建输入记录 | 生成一份绑定构建输入的 in-toto 声明 | 硬性 |
| 依赖完整性 | 将 SHA-256 字节指纹与固定基线做差异比对 | 硬性 |
| VEX 一致性 | 要求依赖安全公告策略中的每一条目在仓库的 OpenVEX v0.2.0 文档中都有对应声明 | 硬性 |
| 可复现性 | 在各测试夹具上运行确定性检查 | 尽力而为 |
依赖完整性门禁将依赖树的 SHA-256 字节指纹与固定在仓库中的基线做差异比对, 不依赖包元数据。
发布工作流配置
标题为“发布工作流配置”的章节来源证明——工作流配置
标题为“来源证明——工作流配置”的章节发布工作流固定引用规范的 slsa-github-generator 可复用工作流——该工作流被配置为在隔离的临时构建器中生成 in-toto 来源证明——并配置 slsa-verifier 内联运行,
以校验生成器的输出。
签名与透明日志——工作流配置
标题为“签名与透明日志——工作流配置”的章节发布工作流为制品包配置了 Sigstore cosign 无密钥签名,并将透明日志记录到
Rekor。无密钥签名从工作流的 OIDC 身份
(https://token.actions.githubusercontent.com)派生短期证书,因此该发布签名路径的配置中不使用长期制品签名密钥。
SBOM——工作流配置
标题为“SBOM——工作流配置”的章节发布工作流配置了双 SBOM 生成——一份 CycloneDX 1.7 文档与一份 SPDX 2.3 文档。
模糊测试
标题为“模糊测试”的章节每夜运行的 php-fuzzer 矩阵与 AST/结构树测试装置一起,对解析器与写入器路径进行检验。