SHA256-RSA 数字签名算法是基于 RSA 公钥密码体制和 SHA-256 哈希算法的一种数字签名技术。它用于确保消息的完整性、认证发送者身份以及防止消息被篡改。
基本流程
-
生成哈希值 (SHA-256):
- 对要签名的消息进行 SHA-256 哈希运算,得到一个固定长度(256位)的哈希值。这个哈希值代表消息的内容摘要。
-
私钥签名 (RSA 签名):
- 使用签名者的私钥对生成的哈希值进行 RSA 加密,得到签名值。这一过程保证只有拥有私钥的人可以生成该签名。
-
生成的签名:
- 生成的签名连同原始消息一起发送给接收者。
验证过程
-
生成哈希值:
- 接收者对收到的原始消息再次使用 SHA-256 生成哈希值。
-
公钥解密签名:
- 使用签名者的公钥对收到的签名进行 RSA 解密,得到签名时生成的哈希值。
-
对比哈希值:
- 比较解密得到的哈希值与接收者自己生成的哈希值是否一致。如果一致,说明消息未被篡改且确实是由拥有私钥的人签名的。
示例步骤
-
签名方:
message = "Hello World" hash = SHA256(message) # 计算消息的哈希值 signature = RSA(private_key, hash) # 使用私钥对哈希值进行签名
-
验证方:
received_message = "Hello World" received_signature = ... # 收到的签名 received_hash = SHA256(received_message) # 计算收到消息的哈希值 decrypted_hash = RSA(public_key, received_signature) # 使用公钥解密签名 if received_hash == decrypted_hash: print("签名验证成功") else: print("签名验证失败")
优点
- 安全性:SHA-256 提供了强哈希函数的特性,而 RSA 通过私钥加密确保只有合法的签名者才能生成有效的签名。
- 非对称加密:RSA 的非对称加密机制确保了签名者无法否认其签名,接收者可以验证签名的真实性。
应用场景
- 电子邮件签名
- 文件签名与验证
- 数字证书