2. 制品签名基础:数字签名原理、哈希算法、非对称加密在签名中的应用
在平台工程中,制品签名是保障软件供应链安全的核心防线。本章从密码学基础出发,拆解数字签名的完整链路,重点阐述哈希算法与非对称加密在签名中的协同作用,为后续自动化回滚验证奠定理论基础。
2.1 数字签名核心原理
数字签名并非对原始数据进行加密,而是通过哈希摘要与非对称加密的组合,实现完整性验证、身份认证和不可否认性。其核心流程可概括为“签名者生成-验证者校验”两个阶段。
关键概念:数字签名 ≠ 数据加密。签名证明“谁写了什么”,加密保护“写了什么不被看到”。在制品签名场景中,我们只关心前者。
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 制品签名完整链路
将上述组件串联,形成制品签名的完整操作链路:
- 计算摘要:对制品文件(如 Docker 镜像、JAR 包、Helm Chart)使用 SHA-256 计算哈希值。
- 私钥签名:使用签名者的私钥(ECDSA P-256)对摘要进行加密,生成数字签名。
- 打包分发:将原始制品、数字签名、签名者公钥证书一并分发至制品仓库(如 Harbor、Nexus)。
- 接收验证:验证者下载制品与签名,使用相同哈希算法计算本地摘要。
- 公钥解密:使用签名者公钥解密签名,提取原始摘要。
- 比对确认:比对本地摘要与解密摘要,一致则签名有效,否则拒绝部署。
2.6 安全实践与常见陷阱
⚠️ 常见陷阱:
- 私钥泄露:私钥存储在CI/CD变量中未加密,或硬编码在代码仓库中。
- 哈希算法降级:为了兼容旧系统使用MD5或SHA-1,导致签名可被伪造。
- 公钥信任缺失:未建立公钥证书链,验证者无法确认公钥来源可信。
- 签名绕过:验证逻辑存在缺陷,允许未签名制品通过部署。
推荐实践:
- 使用硬件安全模块(HSM)或密钥管理服务(KMS)保护私钥。
- 在IDP流水线中强制签名验证步骤,失败即阻断部署。
- 定期轮换签名密钥,并维护公钥信任锚点。
- 使用
cosign(Sigstore)或gpg等成熟工具实现签名自动化。
2.7 本章小结
数字签名通过哈希算法与非对称加密的协同,为制品提供了完整性、身份认证和不可否认性保障。在平台工程IDP中,选择 SHA-256 + ECDSA P-256 作为签名算法组合,能够平衡安全性与性能。理解签名链路中的每个环节,是后续实现自动化回滚验证的基础。