坚持坚持,方知何为坚持
算法分析
- RSA签名方案是目前使用较多的一个签名方案,它的安全性是基于大整数因式分解的困难性。
- 主要包括算法:
- 秘钥生成算法:
- 签名算法:
- 验证算法:
算法实现
1 | # 直接导入之前写好的RSA算法和hash函数的hashlib库 |
签名与验证过程
如下图所示,消息m = “helloworld” , 使用RSA算法中生成的公钥和私钥,Alice通过私钥对消息摘要进行签名得到s , Bob通过公钥根据签名s计算出消息摘要,并将其与Alice发来的消息摘要进行对比,如果相等,则打印出签名有效,否则打印出签名无效。
正确性
签名验证过程的正确性证明如下:
安全性分析
- 签名中使用了hash函数,哈希函数的使用使签名具有更好的抗攻击性。如果不使用,则可根据RSA方案所具有的同态特性,根据已知的两个签名,生成伪造的消息签名。具体如下:如果消息𝑀1、𝑀2的签名分别是𝑆1和𝑆2,则任何知道𝑀1,𝑆1,𝑀2,𝑆2的人可以伪造对消息𝑀1𝑀2的签名𝑆1𝑆2,因为
𝑆𝑖𝑔(𝑀1𝑀2) = 𝑆𝑖𝑔(𝑀1)𝑆𝑖𝑔(𝑀2) - 若未使用hash函数,还可以尝试一般攻击:攻击者任选一个数据𝑌,用A的公钥计算𝑋=Y^e𝑚𝑜𝑑 𝑛 于是便可以用Y伪造A对消息X的签名,因为
- 存在签名的可重用性问题,即对同一消息在不同时刻签名是相同的。这个问题可通过在每次签名中引入不同随机数来解决。