3. 签名基础概念:数字签名原理、公钥基础设施(PKI)、Cosign的签名模型

在深入 Cosign 的模板化配置之前,必须建立对数字签名、公钥基础设施(PKI)以及 Cosign 签名模型的扎实理解。这三层概念构成了整个软件供应链安全验证的基石。本章将逐一拆解,确保你在后续实战中能够准确判断签名行为、密钥管理和验证逻辑。

3.1 数字签名原理

数字签名并非对原始数据进行加密,而是通过哈希算法与非对称加密的组合,提供完整性、真实性和不可否认性。其核心流程分为签名与验证两个阶段。

核心公式: 数字签名 = 私钥加密(哈希(原始数据))

3.1.1 签名生成流程

  1. 哈希摘要: 对原始工件(如容器镜像)使用 SHA-256 等算法生成固定长度的摘要(Digest)。
  2. 私钥签名: 签名者使用自己的私钥对摘要进行加密,生成签名数据。
  3. 打包输出: 将原始工件、签名数据以及签名者的公钥(或公钥证书)一同发布。

3.1.2 签名验证流程

  1. 提取公钥: 验证者获取签名者的公钥。
  2. 解密签名: 使用公钥解密签名数据,得到原始的哈希摘要。
  3. 重新哈希: 对收到的原始工件重新计算哈希摘要。
  4. 比对摘要: 如果两个摘要完全一致,则验证通过;否则,说明工件或签名已被篡改。
关键点: 私钥永远只能由签名者持有;公钥可以公开分发。验证者不需要私钥,只需信任公钥即可。
数字签名原理流程图 数字签名原理:签名与验证流程 签名阶段(签名者) 验证阶段(验证者) 原始工件 SHA-256 哈希 摘要 私钥 签名数据 接收的工件 重新哈希 摘要 B 公钥 解密得摘要 A 比对 摘要 A == 摘要 B → 验证通过

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,降低了私钥泄露的灾难性风险。
PKI 信任链结构图 PKI 信任链:从根 CA 到最终实体 根 CA(自签名) 中间 CA 最终实体证书 信任锚点 由根 CA 签发 由中间 CA 签发

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 最具创新性的模式,也是模板化配置的核心。它消除了管理长期私钥的负担。流程如下:

  1. 身份认证: 用户通过 OIDC(如 GitHub、Google、Microsoft)进行身份认证。
  2. 临时证书: Fulcio(无根 CA)根据 OIDC 签发一个短期(通常 10 分钟)的签名证书。
  3. 签名与记录: 使用临时证书的私钥签名,并将签名和证书上传到 Rekor 透明度日志。
  4. 验证: 验证者从 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 交互,完成签名与验证的完整链路。

Cosign 密钥less模式架构图 Cosign 密钥less模式:签名与验证架构 用户 / CI 流水线 OIDC 提供商 Fulcio CA Rekor 日志 OCI 仓库 验证者 1. 身份认证 2. OIDC 3. 返回临时证书 4. 推送签名 5. 记录签名 6. 拉取工件与签名 7. 查询签名记录 验证流程说明 验证者从 OCI 仓库获取签名,从 Rekor 获取证书链,验证证书是否由 Fulcio 签发, 并检查 OIDC 身份(如 email)是否与策略匹配。整个过程无需预先分发公钥。

3.4 本章小结

  • 数字签名 通过哈希和非对称加密保证工件的完整性与真实性。
  • PKI 提供了公钥信任的层级结构,Cosign 的 Fulcio 实现了轻量级无根 PKI。
  • Cosign 签名模型 分为密钥对和密钥less两种模式,后者通过 OIDC + Fulcio + Rekor 实现了无需管理私钥的安全签名链路。
  • 在后续章节中,我们将基于密钥less模式,构建模板化的签名配置,实现流水线的自动化集成。