2. Cosign 架构基础:组件架构、签名与验证流程、密钥管理模型
Cosign 是 Sigstore 项目下的核心签名工具,专为容器镜像及 OCI 制品提供免密钥(或无摩擦)的代码签名与验证能力。理解其组件架构、签名验证流程以及密钥管理模型,是后续优化信任边界数据传输性能的前提。
2.1 Cosign 组件架构
Cosign 采用模块化设计,核心组件包括客户端 CLI、签名后端(Signing Backend)、透明日志(Rekor)以及 OCI 仓库。下图展示了各组件之间的协作关系:
组件职责速览:
- Cosign CLI:用户交互入口,负责签名、验证、上传与下载操作。
- OCI 仓库:存储镜像及签名制品(.sig、.att、.sbom 等),是信任边界的数据载体。
- Rekor 透明日志:不可篡改的公共审计日志,记录签名元数据,提供可追溯性。
- 密钥/身份源:支持本地密钥对、云 KMS、硬件令牌及 OIDC 身份(如 GitHub、Google)。
- 签名对象 (Bundle):包含签名、证书链及可选日志证明的封装结构,是验证的最小单元。
2.2 签名与验证流程
Cosign 的签名与验证流程遵循“先签名、后存储、再验证”的线性模型。以下表格对比了签名与验证两个阶段的关键差异:
| 阶段 | 输入 | 核心操作 | 输出 | 网络依赖 |
|---|---|---|---|---|
| 签名 | 镜像摘要 + 私钥/身份 | 计算摘要 → 签名 → 上传签名到 OCI 仓库 → 可选上传 Rekor | 签名 Bundle + 日志条目 | 高(需写入仓库与日志) |
| 验证 | 镜像摘要 + 公钥/信任根 | 拉取签名 → 验证签名 → 可选查询 Rekor 证明 | 通过/失败状态 | 中(需读取仓库与日志) |
以下 SVG 图详细展示了签名与验证的完整流程:
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)保护私钥。
- 本地密钥对仅用于快速原型验证,不应长期用于生产。