3. 密钥管理与身份:短期密钥对、OIDC身份认证、无密钥签名原理

在传统软件供应链中,签名密钥的长期存储、轮换与泄露风险是核心痛点。Sigstore 通过引入 短期密钥对(Ephemeral Key Pair)、OIDC 身份认证 与 无密钥签名(Keyless Signing) 机制,从根本上消除了长期密钥的管理负担。本章将深入剖析这三项技术的原理与协作流程。

3.1 短期密钥对:签名即销毁

短期密钥对是 Sigstore 无密钥签名的底层密码学基础。每次签名操作都会在客户端本地生成一对全新的密钥,签名完成后私钥立即被销毁,公钥则通过证书绑定到用户身份后上传至透明日志。

核心优势: 私钥生命周期极短(通常仅持续数秒),即使签名客户端被攻破,攻击者也无法获取历史私钥来伪造过去的签名。
特性 传统长期密钥 Sigstore 短期密钥对
私钥生命周期 月 / 年 秒 / 分钟
存储方式 HSM / 文件 / 环境变量 内存(签名后销毁)
泄露影响 可伪造历史所有签名 仅影响单次签名
轮换策略 手动或半自动 无需轮换(每次自动生成)
短期密钥对生命周期 1. 生成密钥对 ECDSA P-256 2. 签名制品 私钥签名 3. 请求证书 Fulcio CA 4. 销毁私钥 内存清零 关键设计要点 • 密钥算法:ECDSA P-256,由 Go 标准库 crypto/ecdsa 生成。 • 私钥仅存在于内存中,不落盘、不序列化、不传输。 • 公钥嵌入 X.509 证书,通过 Rekor 透明日志全局可验证。 • 即使私钥被截获,也只能伪造当前时间窗口内的签名。

3.2 OIDC 身份认证:身份即密钥

Sigstore 使用 OpenID Connect(OIDC) 将签名者的数字身份(如邮箱、GitHub 账号、Google 账号)直接绑定到签名证书上。用户无需预先注册或管理密钥材料,身份认证由受信任的 OIDC 提供商(如 GitHub、Google、Microsoft)完成。

支持的 OIDC 提供商

提供商 身份类型 典型使用场景
GitHub GitHub Actions / 用户 CI/CD 流水线自动签名
Google Google 账号 开发者本地签名
Microsoft Azure AD / 个人账号 企业身份集成
GitLab GitLab CI / 用户 GitLab 流水线签名
OIDC 令牌内容: 令牌中包含 sub(用户唯一标识)、email、iss(签发者)等声明。Sigstore 的 Fulcio 证书颁发机构会验证这些声明的签名,并将其嵌入证书的 SAN(Subject Alternative Name)字段。

3.3 无密钥签名原理:完整流程拆解

无密钥签名(Keyless Signing)是 Sigstore 的核心创新。它将短期密钥对、OIDC 身份认证、Fulcio 证书颁发和 Rekor 透明日志整合为一个原子操作。用户只需执行一条命令,即可完成签名并生成可公开验证的证据。

无密钥签名完整流程 客户端 (cosign) 生成短期密钥对 OIDC 提供商 GitHub / Google Fulcio CA 签发短期证书 Rekor 透明日志 存储证书 + 签名 制品仓库 存储签名 + 证书 ① OIDC 令牌请求 ② 返回 ID ③ CSR + OIDC ④ 短期 X.509 证书 ⑤ 证书 + 签名 ⑥ 日志索引 ⑦ 签名 + 证书 无密钥签名核心保证 • 验证者无需信任签名者,只需信任 Sigstore 基础设施(Fulcio + Rekor)。 • 证书绑定 OIDC 身份,任何验证者均可通过 Rekor 查询签名时的身份信息。 • 私钥从未离开客户端内存,不存在密钥分发或存储问题。

无密钥签名步骤详解

  1. 生成短期密钥对: 客户端(cosign)在本地生成 ECDSA P-256 密钥对。
  2. 获取 OIDC 令牌: 客户端通过浏览器或环境变量向 OIDC 提供商请求身份令牌。
  3. 构造证书签名请求(CSR): 客户端将公钥与 OIDC 令牌打包为 CSR,发送至 Fulcio CA。
  4. Fulcio 签发证书: Fulcio 验证 OIDC 令牌的有效性,签发包含用户身份的短期 X.509 证书。
  5. 签名制品: 使用短期私钥对制品进行签名,生成签名载荷。
  6. 上传至 Rekor: 将证书、签名和制品摘要上传至 Rekor 透明日志,获取日志索引。
  7. 存储签名: 将签名、证书和日志索引与制品一同存储(如 OCI 仓库)。
安全注意事项: OIDC 令牌具有时效性(通常 10 分钟),Fulcio 证书有效期通常为 10 分钟。如果签名流程中断,需要重新获取 OIDC 令牌。建议在 CI/CD 环境中使用 GitHub Actions 的 OIDC 令牌自动注入,避免手动交互。

3.4 无密钥签名 vs 传统签名

对比维度 传统签名 Sigstore 无密钥签名
密钥管理 需要安全存储私钥 无需管理私钥
身份绑定 通过证书链或信任锚 通过 OIDC 身份直接绑定
验证方式 需要公钥或根证书 通过 Rekor 透明日志
密钥泄露风险 高(长期密钥) 低(短期密钥)
用户注册 需要 PKI 注册流程 无需注册,使用现有 OIDC 账号

通过短期密钥对、OIDC 身份认证与无密钥签名三者的结合,Sigstore 将软件签名的安全门槛从“管理密钥”降低为“拥有身份”。任何拥有 GitHub、Google 或 Microsoft 账号的开发者,都可以在数秒内完成可公开验证的签名,而无需接触任何长期密钥材料。