证据和审计

证明每个决定。几个月后重播。

决策胶囊密封证据,以便审核员可以验证任何发布 — 离线、独立、逐位相同。

审计视角:你将获得什么

导出决策胶囊会生成一个签名且按内容寻址的包,包含发布决策的精确输入与输出。

  • 用于扫描的准确 SBOM
  • 冻结的漏洞 feed 快照(NVD、OSV、厂商通告)
  • 可达性证据(静态调用图工件与运行时跟踪)
  • 用于门禁的策略版本与 lattice 规则
  • 附带理由的派生 VEX 声明
  • 覆盖胶囊内容的 DSSE 签名

来源: 决策胶囊文档

什么是证据包?

内容

每个决策胶囊包含确切的 SBOM、冻结的漏洞源、可达性图、策略版本、派生的 VEX 和审批元数据。

签名

DSSE/in-toto 签名使包防篡改。选择 FIPS-140-3、GOST R 34.10、SM2/SM3 或 eIDAS 加密配置文件。

导出

在任何推进步骤导出胶囊。使用 WORM 语义存储在证据锁柜中,以满足合规保留期要求。

重放

使用 stella replay 重新运行任何历史决策。相同的输入产生相同的输出,离线或在线均可。

示例胶囊结构

每个 Decision Capsule 都是一个包含签名工件的独立目录:

decision-capsule-20260126-prod-a1b2/
├── manifest.json           # 胶囊元数据 + 签名
├── sbom.cdx.json           # CycloneDX 1.7 SBOM
├── sbom.cdx.json.sig       # DSSE 签名
├── reachability/
│   ├── analysis.json       # 可达性裁决
│   ├── call-graph.json     # 静态分析证据
│   └── analysis.json.sig   # DSSE 签名
├── policy/
│   ├── rules.rego          # 策略快照
│   └── verdict.json        # 门禁决定 + 理由
├── approvals/
│   └── jsmith.sig          # 人工批准签名
└── feeds/
    └── snapshot.json       # 冻结的 CVE/通告状态

胶囊清单摘录

胶囊清单以 digest 固定每个输入与输出,便于日后重放决策。

apiVersion: capsule.stellaops.dev/v1
metadata:
  id: "cap-2025-12-11-abc123"
  timestamp: "2025-12-11T14:30:00Z"
  scan_id: "scan-xyz789"
inputs:
  sbom:
    format: "cyclonedx@1.6"
    digest: "sha256:..."
  feeds:
    - name: "nvd"
      snapshot: "2025-12-11"
      digest: "sha256:..."
  policy:
    version: "corp-policy@2025-12-01"
    digest: "sha256:..."
outputs:
  vex:
    format: "openvex"
    digest: "sha256:..."
signatures:
  - scheme: "DSSE"
    profile: "FIPS-140-3"
    signer: "build-ca@corp"

证据链

证据如何流经 Stella
证据流镜像SBOM可达性策略裁决DSSE 签名DSSE 签名DSSE 签名

决策胶囊包含什么

工件摘要

SHA-256 内容地址

已签名

SBOM 快照

CycloneDX 1.7 / SPDX 3.0

已签名

可达性证据

图 + 边缘证明

已签名

VEX 状态

格解析判定

已签名

策略版本

内容寻址的 Rego/DSL

已签名

审批记录

签名的审批记录

已签名

合规工作流

审计员可以在数月后重放决策
审计回放流决策胶囊6 个月前恒星回放相同裁决逐位一致
  1. 1

    审计员询问

    "向我展示证据,证明这个 CVE 在一月发布中被正确处理。"

  2. 2

    操作员导出

    stella 胶囊导出 jan-release-capsule.yaml --format审核包

  3. 3

    包验证

    审计员运行 stella capsule verify jan-release-capsule.yaml — 签名验证通过,摘要匹配。

  4. 4

    重放确认

    stella replay jan-release-capsule.yaml 使用冻结的输入产生相同的判决。

确定性重放

6个月后运行相同的决策 - 相同的冻结输入产生相同的结论。无需网络,无状态漂移,无歧义。

  • 使用固定密钥验证胶囊签名。
  • 确认 SBOM 与 feed 快照的 digest 与清单一致。
  • 使用相同 policy bundle 和可达性输入重放。
  • 导出含裁决、VEX 与证据的审计包。
终端
$ stella replay capsule.json --verify
重放 2025-07-15T14:32:00Z 的决策...
策略版本:sha256:e5f6g7h8... (匹配)
Feed 快照:  sha256:i9j0k1l2... (匹配)
裁决:ALLOW(与原始一致)
确定性检查:PASS

格式和互操作性

SBOM

CycloneDX 1.7 和 SPDX 3.0.1。从 Trivy、Grype、Syft 导入或本地生成。

VEX

OpenVEX 和 CSAF 2.0。具有冲突检测功能的多发行者点阵解析。

SARIF

用于 IDE 和 CI 集成的静态分析结果交换格式导出。

气隙验证

审核员无需任何网络访问即可验证签名、检查摘要完整性并重播决策。所有加密材料都随胶囊一起传输。

终端
$ stella capsule verify decision-capsule.yaml --offline
签名校验:PASS(ECDSA-P256)
Digest 匹配:           PASS(sha256:abc123...)
策略版本:         VALID(v3.2.1)
证据完整性:     全部组件已签名
裁决:                ALLOW — 无需网络

准备好让发布可审计了吗?

阅读决策胶囊规范 · 查看所有功能