疑问&解答
-
Q为什么 RSA 签名算法使用私钥对 hash 值做加密,而不是用公钥对 hash 做加密?
A: 签名的目的是为了保证内容不被篡改,如果用公钥做加密,对方用私钥去解密验证,因为公钥是公开的,有泄漏风险,所以签名内容是会被伪造的。
RSA 签名算法
以 SHA1WITHRSA 算法为例
https://baike.baidu.com/item/sha1withrsa/19520247?fr=aladdin
SHA1安全哈希算法(Secure Hash Algorithm)主要适用于数字签名标准 (Digital Signature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA)
RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的绝大多数密码攻击,已被ISO推荐为公钥数据加密标准。
SHA1WithRSA:用SHA算法进行签名,用RSA算法进行加密。
算法说明:
在对进行SHA1算法进行签名后,要求对签名后的数据进行处理,而不是直接进行RSA算法进行加密。
要求把SHA1签名后的数据进行压缩到20个字节(BCD TO HEX);
在前面插入15个字节标示数据(ASN.结构)
30(数据类型结构)21(总长度)30(数据类型)09(长度)06 05 2B 0E 03 02 1A 0500【数据具体类型不清楚-请专家指正】 04 (数据类型) 14 (长度) + SHA1签名数据
然后进行RSA加密,采用RSA_PKCS1_PADDING。
加签过程
- 对源数据进行 SHA1 签名
- 对签名值进行处理,压缩到 20 个字节
- 对处理后的值进行RSA 加密
验签过程
- 对密文进行 RSA 解密
- 对源值进行 SHA1签名,并进行处理,得到 20 个字节,与解密后的值比对