4. 数字签名技术原理:非对称加密、哈希算法、数字签名生成与验证流程、公钥基础设施(PKI)基础
在平台工程 IDP 的制品签名链路中,数字签名是确保制品完整性、真实性和不可否认性的核心技术。理解其底层原理,是正确设计 CI/CD 流水线签名策略的前提。本节将系统拆解数字签名的四大支柱:非对称加密、哈希算法、签名生成与验证流程,以及支撑信任体系的公钥基础设施(PKI)。
4.1 非对称加密:密钥对与数学基础
非对称加密使用一对数学上关联但无法互相推导的密钥:私钥(Private Key) 和 公钥(Public Key)。私钥必须由签名方秘密保管,公钥可以公开发布。
| 特性 | 私钥 | 公钥 |
|---|---|---|
| 保密性 | 保密,仅持有者知晓 | 公开分发,任何人可获取 |
| 用途 | 签名、解密 | 验签、加密 |
| 泄露风险 | 导致签名伪造、身份冒用 | 泄露无安全影响 |
| 典型算法 | RSA、ECDSA、Ed25519 | 与私钥算法对应 |
关键认知: 非对称加密的核心优势在于——用私钥签名的数据,只能用对应的公钥验证;反之,用公钥加密的数据,只能用对应的私钥解密。这种单向性构成了数字签名的基础。
4.2 哈希算法:数据指纹与完整性保证
哈希算法(Hash Function)将任意长度的输入数据映射为固定长度的输出(摘要/指纹)。在数字签名中,哈希算法用于将原始制品压缩为固定长度的摘要,再对摘要进行签名,从而大幅提升签名效率并保证数据完整性。
| 算法 | 输出长度(位) | 安全性状态 | 推荐场景 |
|---|---|---|---|
| SHA-256 | 256 | 安全 | 通用制品签名 |
| SHA-384 | 384 | 安全 | 高安全等级场景 |
| SHA-512 | 512 | 安全 | 合规要求严格的环境 |
| SHA-1 | 160 | 已废弃(碰撞攻击) | 禁止使用 |
| MD5 | 128 | 已破解 | 禁止使用 |
避坑提示: 在 CI/CD 流水线中,务必使用 SHA-256 或更高强度的哈希算法。SHA-1 和 MD5 已被证明存在实际碰撞攻击,攻击者可构造两个不同制品产生相同哈希值,从而绕过签名验证。
4.3 数字签名生成与验证流程
数字签名的完整流程分为签名生成和签名验证两个阶段。以下 SVG 图展示了制品从构建到验证的完整链路。
4.4 签名生成步骤详解
- 计算制品哈希:对原始制品(如 Docker 镜像、JAR 包、Helm Chart)使用 SHA-256 算法计算固定长度的摘要。
- 私钥加密摘要:签名方使用自己的私钥对哈希摘要进行加密操作,生成数字签名。
- 附加签名:将生成的数字签名附加到原始制品上,形成签名制品(通常以 .sig、.asc 或内嵌元数据形式存在)。
4.5 签名验证步骤详解
- 分离制品与签名:验证方从签名制品中提取原始制品和数字签名。
- 计算制品哈希:对提取的原始制品使用相同的哈希算法(SHA-256)计算摘要。
- 公钥解密签名:使用签名方的公钥对数字签名进行解密,得到原始哈希摘要。
- 比较摘要:将计算得到的哈希摘要与解密得到的哈希摘要进行比对。如果一致,则验证通过,证明制品未被篡改且确实由私钥持有者签名。
核心结论: 数字签名不是对原始数据加密,而是对数据的哈希摘要进行私钥签名。这保证了:1)完整性——任何篡改都会导致哈希变化;2)真实性——只有私钥持有者能生成有效签名;3)不可否认性——签名方无法否认自己的签名行为。
4.6 公钥基础设施(PKI)基础
PKI 是支撑数字签名信任体系的骨架。在 IDP 制品签名链路中,PKI 解决了“如何信任公钥”的核心问题。
4.6.1 PKI 核心组件
| 组件 | 角色 | 在制品签名中的作用 |
|---|---|---|
| 证书颁发机构(CA) | 签发和管理数字证书 | 为签名方签发代码签名证书 |
| 注册机构(RA) | 验证申请者身份 | 确认签名方组织身份的真实性 |
| 证书吊销列表(CRL) | 发布已吊销证书列表 | 验证签名证书是否仍有效 |
| 在线证书状态协议(OCSP) | 实时查询证书状态 | 替代 CRL 实现实时吊销检查 |
| 证书存储库 | 存储和分发证书 | CI/CD 流水线获取信任锚点 |
4.6.2 证书链与信任锚
PKI 采用层级信任模型:根 CA 自签名作为信任锚,中间 CA 由根 CA 签发,最终实体证书由中间 CA 签发。验证时,验证方沿着证书链向上追溯,直到信任的根证书。
4.7 在 CI/CD 流水线中的实践要点
- 私钥保护:签名私钥绝不能明文存储在 CI/CD 配置或代码仓库中。应使用硬件安全模块(HSM)、密钥管理服务(KMS)或专用签名服务(如 Sigstore、Notary)进行管理。
- 证书轮换:代码签名证书有有效期,CI/CD 流水线应集成证书到期监控和自动轮换机制。
- 吊销检查:验证阶段必须检查签名证书是否被吊销(CRL/OCSP),防止使用已泄露证书签名的制品。
- 时间戳:在签名时附加可信时间戳,确保签名在证书过期后仍可验证其有效性。
安全红线: 永远不要在 CI/CD 流水线日志、环境变量或制品元数据中暴露私钥。一旦私钥泄露,攻击者可以伪造任何制品签名,整个信任体系将崩溃。建议使用短期证书 + 在线签名服务(如 Sigstore 的 Fulcio)来最小化私钥暴露面。