3. Cosign 签名协议简介

3.1 Cosign 的起源与定位

Cosign 是由 Chainguard 公司于 2021 年发起、现由 sigstore 社区维护的开源容器镜像签名工具。它的诞生直接回应了云原生生态中两个长期痛点:

  • 密钥管理复杂:传统 PGP/GPG 签名要求开发者自行生成、保管、轮换私钥,且公钥分发缺乏可信渠道。
  • 签名验证门槛高:验证方需要预先获取签名者的公钥,并维护信任锚点,在大规模 CI/CD 流水线中难以落地。

Cosign 的定位是 “零配置、无密钥” 的容器镜像签名方案。它利用 sigstore 生态中的 Fulcio 证书颁发机构和 Rekor 透明日志,使开发者无需管理私钥即可完成签名,验证方也无需预先配置公钥即可验证签名有效性。

核心设计哲学:Cosign 将签名操作从“密钥持有证明”转变为“身份认证证明”。开发者通过 OIDC 身份(如 GitHub、Google、Microsoft 账号)向 Fulcio 申请短期签名证书,私钥仅在签名过程中存在于内存,签名后立即销毁。

3.2 Cosign 在容器镜像签名中的应用

Cosign 支持两种主要的签名模式,分别对应不同的安全等级和运维场景:

签名模式 密钥来源 私钥生命周期 适用场景
密钥对模式 本地生成(cosign generate-key-pair) 持久化存储,需自行保护 离线环境、私有仓库、无 OIDC 支持
密钥免模式 Fulcio CA 签发短期证书 仅存在于签名进程内存中 CI/CD 流水线、公有云、多团队协作

无论使用哪种模式,Cosign 的签名流程都遵循以下步骤:

  1. 计算镜像摘要:对容器镜像的 manifest 进行 SHA-256 哈希,得到不可变的摘要值。
  2. 生成签名载荷:将摘要值与签名元数据(签名时间、签名者身份、证书链)打包成 DSSE(Dead Simple Signing Envelope)格式。
  3. 签名并上传:使用私钥或短期证书对载荷签名,将签名产物以 cosign.sig 标签的形式推送到镜像仓库。
  4. 记录透明日志:将签名摘要和证书信息提交到 Rekor 透明日志,提供公开可审计的签名记录。
关键指标:Cosign 签名操作的平均耗时约为 1.2 秒(含 Rekor 日志提交),验证操作平均耗时 0.3 秒。相比传统 GPG 签名(约 3-5 秒),性能提升显著。
Cosign 签名与验证流程 签名阶段 1. 计算镜像摘要 2. 生成 DSSE 载荷 3. 签名并上传 4. 记录 Rekor 日志 推送 验证阶段 1. 拉取签名与镜像 2. 验证证书链 3. 校验签名摘要 4. 查询 Rekor 日志 验证通过 / 拒绝 说明: • 签名阶段使用 Fulcio 短期证书时,私钥仅存在于内存,签名后立即销毁。 • 验证阶段无需预先配置公钥,Fulcio 证书链和 Rekor 日志提供信任锚点。 • 整个流程可在 CI/CD 流水线中自动化完成,无需人工干预。

3.3 Cosign 与传统签名方案对比

为了更直观地理解 Cosign 的优势,下表从多个维度对比 Cosign 与 GPG/PGP 签名方案:

对比维度 GPG/PGP 签名 Cosign 密钥对模式 Cosign 密钥免模式
密钥管理 开发者自行生成、保管、轮换私钥 开发者生成密钥对,需安全存储私钥 无需管理私钥,Fulcio 签发短期证书
公钥分发 需通过密钥服务器或带外渠道分发 需将公钥嵌入 CI/CD 配置或仓库 无需分发,Fulcio 证书链提供信任
签名验证 验证方需导入签名者公钥 验证方需配置公钥 验证方自动获取证书链,零配置
透明审计 无内置透明日志 可选提交 Rekor 日志 强制提交 Rekor 日志
签名性能 3-5 秒(含密钥查找) 1-2 秒 1.2 秒(含证书申请)
CI/CD 集成 需额外脚本处理密钥注入 需安全传递私钥 原生支持,无密钥泄露风险
离线支持 完全支持 完全支持 不支持(需访问 Fulcio/Rekor)
选型建议:对于公有云或 CI/CD 环境,优先选择 Cosign 密钥免模式,可彻底消除密钥泄露风险。对于离线环境或私有数据中心,使用密钥对模式并配合硬件安全模块(HSM)保护私钥。
Cosign 与传统签名方案架构对比 传统 GPG/PGP 签名 开发者管理私钥 公钥分发到验证方 验证方导入公钥 无透明审计日志 Cosign 密钥免签名 OIDC 身份认证 Fulcio 签发短期证书 验证方自动信任 Rekor 透明日志审计 vs 核心差异总结: 1. 密钥管理:传统方案依赖开发者自行管理私钥;Cosign 通过 OIDC + 短期证书消除私钥存储。 2. 信任模型:传统方案需要验证方预先获取公钥;Cosign 利用 Fulcio 证书链实现零配置信任。 3. 审计能力:传统方案无内置审计;Cosign 强制提交 Rekor 日志,提供公开可验证的签名记录。 4. 运维成本:传统方案需要额外的密钥轮换和分发流程;Cosign 可完全集成到 CI/CD 流水线。

3.4 冷启动场景下的签名策略选择

在冷启动削峰场景中,签名策略的选择直接影响镜像拉取和验证的性能。以下是针对不同冷启动阶段的建议:

  • 预热阶段:使用 Cosign 密钥免模式,利用 CI/CD 流水线自动签名,避免人工介入。签名操作可与镜像构建并行执行,不增加冷启动延迟。
  • 爆发阶段:启用 Cosign 的 --allow-insecure-registry 选项(仅限内部网络),跳过 Rekor 日志提交,将签名验证耗时从 0.3 秒降至 0.05 秒。
  • 稳定阶段:恢复完整签名验证流程,确保安全合规。利用 Cosign 的缓存机制,对已验证的镜像摘要进行缓存,避免重复验证。
性能优化技巧:在冷启动场景中,建议将 Cosign 验证操作与镜像拉取并行执行。使用 cosign verify --attachment 参数,在镜像层下载的同时验证签名,可将整体延迟降低 15%-20%。