3. 签名基础概念:数字签名原理、公钥基础设施(PKI)、Cosign的签名模型
在深入 Cosign 的模板化配置之前,必须建立对数字签名、公钥基础设施(PKI)以及 Cosign 签名模型的扎实理解。这三层概念构成了整个软件供应链安全验证的基石。本章将逐一拆解,确保你在后续实战中能够准确判断签名行为、密钥管理和验证逻辑。
3.1 数字签名原理
数字签名并非对原始数据进行加密,而是通过哈希算法与非对称加密的组合,提供完整性、真实性和不可否认性。其核心流程分为签名与验证两个阶段。
核心公式: 数字签名 = 私钥加密(哈希(原始数据))
3.1.1 签名生成流程
- 哈希摘要: 对原始工件(如容器镜像)使用 SHA-256 等算法生成固定长度的摘要(Digest)。
- 私钥签名: 签名者使用自己的私钥对摘要进行加密,生成签名数据。
- 打包输出: 将原始工件、签名数据以及签名者的公钥(或公钥证书)一同发布。
3.1.2 签名验证流程
- 提取公钥: 验证者获取签名者的公钥。
- 解密签名: 使用公钥解密签名数据,得到原始的哈希摘要。
- 重新哈希: 对收到的原始工件重新计算哈希摘要。
- 比对摘要: 如果两个摘要完全一致,则验证通过;否则,说明工件或签名已被篡改。
关键点: 私钥永远只能由签名者持有;公钥可以公开分发。验证者不需要私钥,只需信任公钥即可。
3.2 公钥基础设施(PKI)
PKI 是一套用于管理公钥加密和数字证书的完整体系。它解决了“如何信任一个公钥”的核心问题。在 Cosign 生态中,PKI 主要用于密钥的签发、分发和撤销。
3.2.1 PKI 核心组件
| 组件 | 角色 | 在 Cosign 中的对应 |
|---|---|---|
| 证书颁发机构(CA) | 签发、吊销数字证书的可信第三方 | Fulcio(无根证书颁发机构) |
| 注册机构(RA) | 验证申请者身份,向 CA 转发请求 | OIDC 身份提供商(如 GitHub、Google) |
| 证书吊销列表(CRL) | 列出已被吊销的证书序列号 | TUF 仓库 / Rekor 透明度日志 |
| 最终实体证书 | 绑定公钥与身份信息 | Cosign 生成的短期签名证书 |
3.2.2 信任链模型
PKI 通过证书链建立信任。根 CA 自签名,中间 CA 由根 CA 签发,最终实体证书由中间 CA 签发。验证者只需信任根 CA 的公钥,即可递归验证整个链上的所有证书。
注意: 在传统的 PKI 中,根 CA 私钥是最高机密。Cosign 采用的 Fulcio 模型则通过 OIDC 和透明度日志,实现了“无根”的轻量级 PKI,降低了私钥泄露的灾难性风险。
3.3 Cosign 的签名模型
Cosign 在传统数字签名和 PKI 的基础上,针对容器镜像和云原生工件进行了优化。它支持两种主要的签名模式:密钥对模式和密钥less模式。
3.3.1 密钥对模式(Key-Pair Mode)
这是最传统的模式。用户使用 cosign generate-key-pair 生成私钥和公钥。私钥必须安全保管,公钥分发给验证者。签名时,Cosign 将签名数据存储在 OCI 仓库的标签(Tag)或镜像索引中。
3.3.2 密钥less模式(Keyless Mode)
这是 Cosign 最具创新性的模式,也是模板化配置的核心。它消除了管理长期私钥的负担。流程如下:
- 身份认证: 用户通过 OIDC(如 GitHub、Google、Microsoft)进行身份认证。
- 临时证书: Fulcio(无根 CA)根据 OIDC 签发一个短期(通常 10 分钟)的签名证书。
- 签名与记录: 使用临时证书的私钥签名,并将签名和证书上传到 Rekor 透明度日志。
- 验证: 验证者从 Rekor 获取签名和证书,验证证书链,并检查 OIDC 身份是否匹配。
最佳实践: 在 CI/CD 流水线中,强烈推荐使用密钥less模式。它避免了在构建环境中存储敏感私钥,同时通过 Rekor 日志提供了全局可审计性。
3.3.3 两种模式对比
| 特性 | 密钥对模式 | 密钥less模式 |
|---|---|---|
| 私钥管理 | 需要安全存储长期私钥 | 无需管理私钥(临时生成) |
| 身份绑定 | 通过公钥指纹绑定 | 通过 OIDC 身份绑定 |
| 可审计性 | 依赖外部日志 | 内置 Rekor 透明度日志 |
| 适用场景 | 离线环境、自有 PKI | CI/CD、云原生环境 |
| 验证复杂度 | 低(仅需公钥) | 中(需访问 Rekor 和 Fulcio) |
3.3.4 Cosign 签名模型架构
下图展示了密钥less模式下,Cosign 如何与 OIDC、Fulcio、Rekor 交互,完成签名与验证的完整链路。
3.4 本章小结
- 数字签名 通过哈希和非对称加密保证工件的完整性与真实性。
- PKI 提供了公钥信任的层级结构,Cosign 的 Fulcio 实现了轻量级无根 PKI。
- Cosign 签名模型 分为密钥对和密钥less两种模式,后者通过 OIDC + Fulcio + Rekor 实现了无需管理私钥的安全签名链路。
- 在后续章节中,我们将基于密钥less模式,构建模板化的签名配置,实现流水线的自动化集成。