返回列表
RSA签名与验签原理
自由客七维 2026-03-26 21:43 28

数字签名概述

数字签名用于验证消息的完整性和身份认证。RSA签名利用私钥生成签名,公钥验证,满足:

  • 不可否认性:只有私钥持有者能生成有效签名。
  • 完整性:签名可证明消息未被篡改。
  • 真实性:验证方可确认消息来源。

RSA签名算法

基本流程:

  1. 哈希:对消息m进行哈希,得到固定长度摘要H(m)。
  2. 签名:使用私钥(d, n)对哈希值进行模幂运算:s ≡ H(m)^d (mod n)。
  3. 验证:使用公钥(e, n)计算H'(m) ≡ s^e (mod n),若等于H(m)则签名有效。

实际实现中,哈希值在签名前会经过填充(如PSS或PKCS#1 v1.5),以防止伪造。

签名与加密的区别

特性加密签名
密钥使用公钥加密,私钥解密私钥签名,公钥验签
目的保密性完整性、身份认证
输出密文签名值
填充OAEPPSS / PKCS#1 v1.5

实际应用中的签名格式

在PKCS#7/CMS、JWT、X.509证书等标准中,RSA签名通常以ASN.1 DER编码存储,包含签名算法标识和签名值。常见算法标识如:

  • sha256WithRSAEncryption
  • sha384WithRSAEncryption
  • sha512WithRSAEncryption

安全注意事项

  • 避免使用弱哈希(MD5、SHA-1)生成签名。
  • 验证签名时需检查哈希算法是否安全。
  • 使用标准库的签名验证函数,避免自行实现比较。
  • 注意时序攻击,使用常量时间比较。

RSA签名是数字身份验证的基础,广泛应用于SSL证书、代码签名、软件更新等场景。正确使用签名算法可有效防止伪造和篡改。