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 图展示了制品从构建到验证的完整链路。

数字签名生成与验证流程 数字签名生成与验证流程 签名生成阶段(签名方) 原始制品(Artifact) 哈希计算 哈希摘要(Digest) 私钥加密 数字签名(Signature) 签名方私钥 签名制品(Artifact + Signature) 签名验证阶段(验证方) 接收签名制品 提取制品 提取签名 计算制品哈希 公钥解密签名 比较两个摘要 摘要一致 → 验证通过 ✅ 签名方公钥(来自 PKI) 信任链:根 CA → 中间 CA → 签名证书

4.4 签名生成步骤详解

  1. 计算制品哈希:对原始制品(如 Docker 镜像、JAR 包、Helm Chart)使用 SHA-256 算法计算固定长度的摘要。
  2. 私钥加密摘要:签名方使用自己的私钥对哈希摘要进行加密操作,生成数字签名。
  3. 附加签名:将生成的数字签名附加到原始制品上,形成签名制品(通常以 .sig、.asc 或内嵌元数据形式存在)。

4.5 签名验证步骤详解

  1. 分离制品与签名:验证方从签名制品中提取原始制品和数字签名。
  2. 计算制品哈希:对提取的原始制品使用相同的哈希算法(SHA-256)计算摘要。
  3. 公钥解密签名:使用签名方的公钥对数字签名进行解密,得到原始哈希摘要。
  4. 比较摘要:将计算得到的哈希摘要与解密得到的哈希摘要进行比对。如果一致,则验证通过,证明制品未被篡改且确实由私钥持有者签名。
核心结论: 数字签名不是对原始数据加密,而是对数据的哈希摘要进行私钥签名。这保证了: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 签发。验证时,验证方沿着证书链向上追溯,直到信任的根证书。

PKI 证书链信任模型 PKI 证书链信任模型 根 CA(信任锚) 签发 中间 CA 签发 签名实体证书 信任传递 验证方预置根 CA 证书 ↓ 验证中间 CA 证书签名 ↓ 验证实体证书签名 → 信任链建立 ✅

4.7 在 CI/CD 流水线中的实践要点

  • 私钥保护:签名私钥绝不能明文存储在 CI/CD 配置或代码仓库中。应使用硬件安全模块(HSM)、密钥管理服务(KMS)或专用签名服务(如 Sigstore、Notary)进行管理。
  • 证书轮换:代码签名证书有有效期,CI/CD 流水线应集成证书到期监控和自动轮换机制。
  • 吊销检查:验证阶段必须检查签名证书是否被吊销(CRL/OCSP),防止使用已泄露证书签名的制品。
  • 时间戳:在签名时附加可信时间戳,确保签名在证书过期后仍可验证其有效性。
安全红线: 永远不要在 CI/CD 流水线日志、环境变量或制品元数据中暴露私钥。一旦私钥泄露,攻击者可以伪造任何制品签名,整个信任体系将崩溃。建议使用短期证书 + 在线签名服务(如 Sigstore 的 Fulcio)来最小化私钥暴露面。