2. Cosign 架构基础:组件架构、签名与验证流程、密钥管理模型

Cosign 是 Sigstore 项目下的核心签名工具,专为容器镜像及 OCI 制品提供免密钥(或无摩擦)的代码签名与验证能力。理解其组件架构、签名验证流程以及密钥管理模型,是后续优化信任边界数据传输性能的前提。

2.1 Cosign 组件架构

Cosign 采用模块化设计,核心组件包括客户端 CLI、签名后端(Signing Backend)、透明日志(Rekor)以及 OCI 仓库。下图展示了各组件之间的协作关系:

Cosign 组件架构图 Cosign 组件架构与数据流 Cosign CLI OCI 仓库 Rekor 透明日志 密钥 / 身份源 签名对象 (Bundle) 说明:Cosign CLI 作为编排中心,协调 OCI 仓库、Rekor 日志与密钥源,最终生成或验证签名 Bundle。
组件职责速览:
  • Cosign CLI:用户交互入口,负责签名、验证、上传与下载操作。
  • OCI 仓库:存储镜像及签名制品(.sig、.att、.sbom 等),是信任边界的数据载体。
  • Rekor 透明日志:不可篡改的公共审计日志,记录签名元数据,提供可追溯性。
  • 密钥/身份源:支持本地密钥对、云 KMS、硬件令牌及 OIDC 身份(如 GitHub、Google)。
  • 签名对象 (Bundle):包含签名、证书链及可选日志证明的封装结构,是验证的最小单元。

2.2 签名与验证流程

Cosign 的签名与验证流程遵循“先签名、后存储、再验证”的线性模型。以下表格对比了签名与验证两个阶段的关键差异:

阶段 输入 核心操作 输出 网络依赖
签名 镜像摘要 + 私钥/身份 计算摘要 → 签名 → 上传签名到 OCI 仓库 → 可选上传 Rekor 签名 Bundle + 日志条目 高(需写入仓库与日志)
验证 镜像摘要 + 公钥/信任根 拉取签名 → 验证签名 → 可选查询 Rekor 证明 通过/失败状态 中(需读取仓库与日志)

以下 SVG 图详细展示了签名与验证的完整流程:

Cosign 签名与验证流程 Cosign 签名与验证流程 签名流程 计算镜像摘要 私钥签名 上传签名到仓库 可选上传 Rekor 验证流程 拉取签名 Bundle 提取公钥/证书 验证签名摘要 可选查询 Rekor 验证通过 / 失败 性能关键点 • 签名阶段:计算摘要(CPU 密集型)+ 上传签名到仓库(网络 I/O 密集型)。 • 验证阶段:拉取签名 Bundle(网络 I/O 密集型)+ 验证签名(CPU 密集型)。 • 可选 Rekor 交互:增加一次网络往返,但提供更强的审计保证。 • 优化方向:减少网络往返次数、压缩签名数据、缓存验证结果。

2.3 密钥管理模型

Cosign 支持多种密钥管理模型,以适应不同安全等级与运维场景。下表对比了三种主流模型:

模型 密钥存储位置 签名方式 适用场景 性能特征
本地密钥对 本地文件系统(.key / .pub) 直接使用私钥签名 开发测试、小规模部署 低延迟,无网络依赖
云 KMS AWS KMS / GCP Cloud KMS / Azure Key Vault 通过 KMS API 签名 生产环境、合规要求 中等延迟,依赖网络 API
OIDC 免密钥 临时密钥(由 Fulcio 签发) 通过 OIDC 令牌获取短期证书签名 CI/CD 流水线、自动化 高延迟(需 OIDC 交互 + 证书签发)
最佳实践建议:
  • CI/CD 环境优先使用 OIDC 免密钥模型,避免密钥泄露风险。
  • 生产环境建议使用 云 KMS,结合硬件安全模块(HSM)保护私钥。
  • 本地密钥对仅用于快速原型验证,不应长期用于生产。