2. 数字签名基础:对称加密与非对称加密、哈希函数、数字签名的生成与验证流程

数字签名是身份提供商(IDP)门户实现签名证据校验的核心技术。要理解数字签名,必须先掌握其底层三大支柱:对称加密、非对称加密和哈希函数。本节将逐一拆解这些基础概念,并完整呈现数字签名的生成与验证流程。

2.1 对称加密与非对称加密

加密算法是保护数据机密性的工具。根据密钥的使用方式,可分为对称加密和非对称加密两大类。

特性 对称加密 非对称加密
密钥数量 1 个密钥(加密和解密使用相同密钥) 2 个密钥(公钥 + 私钥,密钥对)
密钥管理 密钥分发困难,需安全通道传递 公钥可公开分发,私钥本地保管
计算性能 快(适合大量数据加密) 慢(适合小数据量或密钥交换)
典型算法 AES、DES、SM4 RSA、ECC、SM2
主要用途 数据加密、批量加密 数字签名、密钥交换、身份认证
关键认知: 数字签名不使用对称加密,而是依赖非对称加密的私钥签名、公钥验签特性。对称加密在 IDP 门户中主要用于保护传输通道(如 TLS)或加密大型断言负载。

2.2 哈希函数

哈希函数(Hash Function)是数字签名的“数字指纹”生成器。它将任意长度的输入数据,通过数学变换,输出一个固定长度的、不可逆的摘要值。

  • 单向性: 从哈希值无法反推出原始数据。
  • 抗碰撞性: 极难找到两个不同的输入,产生相同的哈希值。
  • 固定输出长度: 无论输入多大,输出长度固定(如 SHA-256 输出 256 位)。
  • 雪崩效应: 输入微小的改变,会导致输出哈希值发生巨大变化。
IDP 场景提示: 在 SAML 或 OIDC 协议中,IDP 对断言(Assertion)或令牌()的哈希值进行签名,而不是对整个文档签名。这大幅提升了签名效率。

2.3 数字签名的生成与验证流程

数字签名结合了哈希函数和非对称加密,实现了完整性、真实性和不可否认性。以下是标准流程:

2.3.1 签名生成流程(签名方)

  1. 计算哈希: 对原始消息(Message)使用哈希函数(如 SHA-256),生成固定长度的消息摘要(Digest)。
  2. 私钥加密: 签名方使用自己的私钥对消息摘要进行加密,生成数字签名(Signature)。
  3. 发送: 将原始消息和数字签名一起发送给接收方。

2.3.2 签名验证流程(验证方)

  1. 分离签名: 从接收到的数据中分离出原始消息和数字签名。
  2. 公钥解密: 验证方使用签名方的公钥对数字签名进行解密,得到解密后的摘要值(Digest1)。
  3. 重新计算哈希: 对原始消息使用相同的哈希函数,计算出一个新的消息摘要(Digest2)。
  4. 比对摘要: 比较 Digest1 和 Digest2。如果两者相等,则签名验证通过;否则,签名无效。
常见误区: 数字签名不是对消息本身加密,而是对消息的哈希值加密。这样做既保证了效率,又确保了任何对消息的篡改都会导致哈希值不匹配,从而被验证方发现。
数字签名生成与验证流程 签名方(Signer) 原始消息 (Message) 哈希函数 (SHA-256) 消息摘要 (Digest) 私钥加密 (签名) 数字签名 (Signature) 验证方(Verifier) 接收消息 + 签名 分离消息与签名 哈希函数 (SHA-256) Digest2 (新摘要) 公钥解密 (验签) Digest1 (原摘要) 比对 Digest1 == Digest2 ? 相等则验证通过,否则无效

2.4 对称加密 vs 非对称加密:在 IDP 场景中的分工

在 IDP 门户中,两种加密算法各司其职,共同构建安全体系:

  • 非对称加密:用于数字签名(私钥签名,公钥验签)和密钥交换(如 TLS 握手阶段使用 RSA 或 ECDHE 交换对称密钥)。
  • 对称加密:用于大量数据的加密传输(如 TLS 记录层使用 AES 加密 HTTP 请求),以及加密 JWT 中的敏感声明(使用 AES-GCM 进行加密)。
IDP 架构启示: 在 SAML 断言签名中,IDP 使用其私钥对断言摘要进行签名;服务提供商(SP)使用 IDP 的公钥验证签名。这个过程中,非对称加密保证了签名的不可伪造性,哈希函数保证了断言的完整性。