2. 制品签名基础:数字签名原理、哈希算法、非对称加密在签名中的应用

在平台工程中,制品签名是保障软件供应链安全的核心防线。本章从密码学基础出发,拆解数字签名的完整链路,重点阐述哈希算法与非对称加密在签名中的协同作用,为后续自动化回滚验证奠定理论基础。

2.1 数字签名核心原理

数字签名并非对原始数据进行加密,而是通过哈希摘要与非对称加密的组合,实现完整性验证、身份认证和不可否认性。其核心流程可概括为“签名者生成-验证者校验”两个阶段。

关键概念:数字签名 ≠ 数据加密。签名证明“谁写了什么”,加密保护“写了什么不被看到”。在制品签名场景中,我们只关心前者。
数字签名生成与验证流程 签名者(私钥签名) 原始制品 (二进制/包) 哈希算法 (SHA-256) 摘要 (固定长度哈希值) 私钥加密 生成数字签名 验证者(公钥验证) 接收的制品 + 签名 哈希算法 (相同算法) 新摘要 (本地计算) 公钥解密 提取原始摘要 比较两个摘要:一致 → 签名有效;不一致 → 签名无效

2.2 哈希算法:签名的“数字指纹”

哈希算法是数字签名的第一道工序。它将任意长度的制品数据压缩为固定长度的摘要(Digest),具有以下关键特性:

  • 单向性:从摘要无法逆向还原原始数据。
  • 抗碰撞性:极难找到两个不同制品产生相同摘要。
  • 雪崩效应:制品微小改动会导致摘要完全变化。
哈希算法 输出长度 安全性状态 制品签名推荐
MD5 128 bit 已破解,不推荐 ❌ 禁止使用
SHA-1 160 bit 理论可碰撞,已弃用 ❌ 不推荐
SHA-256 256 bit 安全,广泛使用 ✅ 首选
SHA-384 / SHA-512 384 / 512 bit 更安全,性能略低 ✅ 高安全场景
实践建议:在平台工程IDP中,制品签名统一使用 SHA-256 作为哈希算法。它平衡了安全性与计算性能,是当前业界标准。

2.3 非对称加密:签名与验证的密钥对

非对称加密使用一对密钥:私钥(Private Key)和公钥(Public Key)。在签名场景中,私钥用于签名,公钥用于验证。这一机制确保了签名的不可伪造性。

密钥 持有者 用途 保密要求
私钥 签名者(如CI/CD系统) 对摘要进行加密,生成签名 保密,不可泄露
公钥 验证者(如部署系统、消费者) 解密签名,提取摘要并比对 公开分发,无需保密

2.4 签名算法对比与选型

当前主流签名算法包括 RSA 和 ECDSA。在平台工程制品签名场景中,算法选择直接影响签名效率、密钥长度和验证性能。

算法 密钥长度 签名速度 验证速度 签名体积 推荐场景
RSA-2048 2048 bit 较慢 较快 256 字节 兼容性优先,传统系统
RSA-4096 4096 bit 慢 较慢 512 字节 高安全,性能可接受
ECDSA P-256 256 bit 快 快 64 字节 ✅ 平台工程首选
Ed25519 256 bit 极快 极快 64 字节 ✅ 高性能,现代推荐
平台工程选型建议:对于IDP制品签名链路,推荐使用 ECDSA P-256 或 Ed25519。它们提供与 RSA-3072 相当的安全性,但密钥更短、签名更小、验证速度更快,适合大规模自动化流水线。

2.5 制品签名完整链路

将上述组件串联,形成制品签名的完整操作链路:

  1. 计算摘要:对制品文件(如 Docker 镜像、JAR 包、Helm Chart)使用 SHA-256 计算哈希值。
  2. 私钥签名:使用签名者的私钥(ECDSA P-256)对摘要进行加密,生成数字签名。
  3. 打包分发:将原始制品、数字签名、签名者公钥证书一并分发至制品仓库(如 Harbor、Nexus)。
  4. 接收验证:验证者下载制品与签名,使用相同哈希算法计算本地摘要。
  5. 公钥解密:使用签名者公钥解密签名,提取原始摘要。
  6. 比对确认:比对本地摘要与解密摘要,一致则签名有效,否则拒绝部署。
制品签名链路架构 ① 构建阶段 CI流水线生成制品 ② 签名阶段 SHA-256 + 私钥签名 ③ 存储阶段 制品仓库存储 ④ 分发阶段 制品 + 签名 + 证书 ⑤ 验证阶段 SHA-256 + 公钥验证 ⑥ 部署决策 通过/拒绝部署 ⑦ 回滚触发 签名验证失败回滚 关键:签名验证失败 → 自动触发回滚 → 保障供应链安全 整个链路在IDP中实现自动化,无需人工干预

2.6 安全实践与常见陷阱

⚠️ 常见陷阱:
  • 私钥泄露:私钥存储在CI/CD变量中未加密,或硬编码在代码仓库中。
  • 哈希算法降级:为了兼容旧系统使用MD5或SHA-1,导致签名可被伪造。
  • 公钥信任缺失:未建立公钥证书链,验证者无法确认公钥来源可信。
  • 签名绕过:验证逻辑存在缺陷,允许未签名制品通过部署。
推荐实践:
  • 使用硬件安全模块(HSM)或密钥管理服务(KMS)保护私钥。
  • 在IDP流水线中强制签名验证步骤,失败即阻断部署。
  • 定期轮换签名密钥,并维护公钥信任锚点。
  • 使用 cosign(Sigstore)或 gpg 等成熟工具实现签名自动化。

2.7 本章小结

数字签名通过哈希算法与非对称加密的协同,为制品提供了完整性、身份认证和不可否认性保障。在平台工程IDP中,选择 SHA-256 + ECDSA P-256 作为签名算法组合,能够平衡安全性与性能。理解签名链路中的每个环节,是后续实现自动化回滚验证的基础。