Signature数字签名验证过程

wen java案例 2

本文目录导读:

Signature数字签名验证过程

  1. 前提假设
  2. 验证过程四步走
  3. 完整流程图

数字签名验证过程的核心目的是确认消息的完整性和来源的真实性,这个过程依赖于公钥密码学(非对称加密),通常涉及哈希函数公钥/私钥对

下面以最常用的方法——“先哈希,后签名”为例,详细拆解验证步骤。

前提假设

  • 发送方(签名者)拥有:
    • 私钥:严格保密,用于签名。
    • 公钥:公开,分发给所有接收方。
  • 验证者拥有:
    • 发送方的公钥(通过可信渠道获得,如CA证书)。
    • 接收到的原始消息 M
    • 接收到的数字签名 S

验证过程四步走

假设发送方已经使用其私钥 K_priv 对消息 M 生成了签名 S,并将 (M, S) 一起发送,验证者现在要做以下事情:

第一步:计算消息摘要

验证者使用与发送方相同的哈希函数(SHA-256),对接收到的原始消息 M 进行哈希运算,生成一个定长的“消息摘要” H'

H' = Hash(M)
  • 目的:将任意长度的消息压缩成一个固定长度的“指纹”,这一步确保了消息的任何微小改动都会导致 H' 完全不同。

第二步:解密签名

验证者使用发送方的公钥 K_pub 对接收到的数字签名 S 进行解密运算。

  • 这个解密过程对应着签名创建时的加密过程,由于签名是发送方用其私钥加密消息摘要生成的,所以用公钥解密就能还原出原始的摘要值,记为 H
H = Decrypt(K_pub, S)
  • 注意:在标准算法(如 RSA)中,这是解密,在椭圆曲线签名算法(如 ECDSA, EdDSA)中,这是一个验证方程求解,但逻辑上等价于“提取出签名中蕴含的原始哈希值”。

第三步:比较两个摘要

验证者将第一步计算出的摘要 H'第二步解密出的摘要 H 进行比较。

比较 H' 是否等于 H?

第四步:得出结论

  • H' == H => 验证成功

    • 证明来源真实性:因为签名 S 是用私钥加密的,而只有对应的公钥能解密成功,能成功解密,说明该签名必然是由持有该私钥的唯一实体(发送方)创建的,不可抵赖。
    • 证明消息完整性:因为 H'(从收到的消息算出)和 H(从签名中解出)完全一致,说明消息在传输过程中没有被篡改。
  • H' != H => 验证失败

    • 可能原因
      1. 消息被篡改:收到的消息 M 与签名时不同。
      2. 签名被伪造:签名不是用对应私钥生成的。
      3. 公钥错误:使用的公钥与签名用的私钥不匹配。
      4. 哈希算法不一致:发送方和接收方用了不同的哈希函数(这种情况应被协议避免)。

完整流程图

发送方(已发送消息M和签名S)                          验证方(收到M和S)
    |                                                  |
    |                                                  |   1. 计算消息摘要
    |                                                  |      H' = Hash(收到的M)
    |                                                  |
    |                                                  |   2. 解密签名
    |                -------- 公钥 K_pub -------->     |      H = Decrypt(K_pub, 收到的S)
    |                                                  |
    |                                                  |   3. 比较两个哈希
    |                                                  |      H'  ?=  H
    |                                                  |
    |                                                  |   4. 输出结果
    |                                                  |      True (成功) 或 False (失败)
  • 工作流程哈希 + 非对称加解密,哈希解决长度和效率问题,非对称加密提供身份认证。
  • 验证关键用公钥能解密成功,且解密出的内容与消息的哈希一致
  • 安全基石:私钥的安全性,任何人只要拿到私钥,就能伪造签名。
  • 常见算法:RSA(通常配合 SHA-256),DSA,ECDSA(如比特币、TLS证书使用),EdDSA(如Ed25519,现代更安全高效的算法)。

这个验证过程是数字证书(如SSL/TLS证书)、软件签名、电子合同、区块链交易等几乎所有现代安全系统的核心基础。

抱歉,评论功能暂时关闭!