rsa数字签名过程

TIME:2019-03-21   click: 775 次

设RSA算法的私钥为d,公钥为(e,n),则RSA签名算法的思想就是:签名者用自已的私钥d加密文件摘要,其他人用签名者的公钥e就可以验证签名。

RSA算法签名过程是:用户A对消息M进行签名,他先计算M的摘要H(M),再用私钥d签名:

SA=Sig(H(m)=(H(m))d mod n

最后将SA附在M后,作为用户A对消息M的签名。

RSA算法验证签名过程是:如果其他用户要验证用户A对消息M的签名,则他们用A的公钥e计算

M'=SAe mod n

如果M'与M相等,则确定签名是用户A所产生的。可见,RSA签名算法的计算过程就是RSA加密算法的逆过程。

RSA数字签名需要注意以下事项:若用RSA算法达到数字签名,先对消息求消息摘要是必须的,再用私钥签名;或签名的密钥对专用于签名,而用另外一对公钥/私钥对进行加/解密。

这是因为,签名者的公钥e和n是公开的,攻击者如果截获别人发给签名者的密文c(c是别人用签名者的公钥e加密得到的,即c=me mod n),则攻击者可以任选一个与n互素且小于n的数r,计算

x=re mod n

y=xc mod n

将y发给签名者签名,如果他随意就用自己的私钥d给攻击者发来的y签名,即

u=yd mod n

则攻击者获得签名u后,就可以轻松地恢复出c对应的明文m。他首先计算r的乘

法逆元t,即t=r-1 mod n,再把t和u相乘即得到m,这是因为

tu=r-1ymod n

=r-1(xc)d mod n=r-1xdcd mod n

=r-1redcd mod n=r-1rk∂(n)+1cd mod n

=r-1rcd mod n=cd mod n=m

而如果先对消息y求消息摘要H(y)再签名则不存在该问题,或者签名和加密使用不同的密钥对也能避免该问题。

 

上一篇:公钥的分配方法 下一篇:盲签名数学原理