数字签名技术概述

1.简介

由于前面介绍的MAC相关问题,出现了用于数字签名的数字签名标准(Digital Signature Standard,DSS)。DSS利用SHA-1算法计算初始消息的消息摘要,并对消息摘要进行数字签名。DSS利用数字签名算法(DSA)。注意DSS是标准,而DSA是实际算法。
和RSA一样,DSA也基于非对称密钥加密,但是目的不同。RSA也可以对消息进行数字签名,而DSA则不能用于加密,只能对消息进行数字签名。

2.数字签名的争论

DSA的接受不是一帆风顺的,我们知道,RSA也可以对消息进行数字签名,NIST开发DSA的主要目的之一是使DSA成为免费的数字签名算法软件。但RSA数据安全公司
(RSADSI)控制了所有RSA产品的许可证(不是免费的),其在RSA算法上投入了大量精力和经费。因此,他们竭力推荐RSA(而不是DSA)作为数字签名算法。此外,IBM、
Neovll、Lotus、Apple Microsoft 、DEC 、Sun Nortbern Telecom之类的大公司也投人大量资金实现RSA算法,它们也反对使用DSA。它们对DSA的强度提出了许多责难和怀疑,但一一得到解决,使DSA成为可靠的算法。但是,所有问题并没有全部解决。
尽管NIST持有DSA的专利,但至少还有三个部门也声称持有DSA的专利,这个问题
至今还没有得到解决。
介绍DSA工作原理之前,先要介绍如何用RSA进行数字签名。

3.RSA与数字签名

假设发送方A要向接收方B发送一个消息M,并对消息M计算数字签名(S)。
第1步:发送方A用SHA-1消息摘要算法对消息M计算消息摘要(MD1),如下图所示:
在这里插入图片描述
第2步:发送方A用私钥加密这个消息摘要,这个过程的输出是A的数字签名(DS),如下图所示:
在这里插入图片描述
第3步:发送方A将消息M和数字签名DS一起发送给接收方B。
在这里插入图片描述
第4步:接收方B收到消息M和发送方的数字签名后,使用与A相同的消息摘要算法计算消息摘要MD2。
在这里插入图片描述
第5步:接收方B用发送方的公钥解密数字签名。注意A用私钥加密消息摘要,得到数字签名,因此只能用A的公钥解密。这个过程得到原先的消息摘要,和第1步求出A的一样MD1,如下图所示:
在这里插入图片描述
第6步:这时比较两个消息摘要如下:MD2,第4步求出;MD1,第5步从A的数字签名求出。
如果MD1和MD2一样,则表明:B接收初始消息M,是A发来的正确消息,未经篡改;B也保证消息来自A而不是别人伪装A。如果MD1和MD2不一样,则拒绝原始消息M。
攻击者完全可以改变消息、重新计算消息摘要,但是不能再次签名,因为攻击者没有A的私钥。由于只有A知道自己的私钥,因此攻击者无法用A的私钥再次将消息摘要加密(即签名消息)。这样,数字签名的原理是相当强大、安全和可靠的。

4.对RSA数字签名的攻击

攻击者试图对RSA数字签名进行一些攻击:
(1)选定部分消息的攻击:在这种攻击中,攻击者创建两个不同的消息M1和M2,这两个消息不需要很相似。攻击者诱使真实用户使用RSA数字签名技术对消息M1和M2进行数字签名。诱使签名成功后,攻击者计算新消息M = M1 × \times ×M2,然后声称消息M已经经过了真实用户的数字签名。
(2)只有密钥的攻击。在这种攻击中,假设攻击者只有真实用户的公钥。攻击者先想办法获得真实的消息M及其签名S。然后,攻击者试图创建另一个消息MM,这样,同一个签名S看上去对MM也是有效的。然而,这是一种不容易发起的攻击,因为其背后的数学知识要求非常高。
(3)已知部分消息的攻击。在这种攻击中,攻击者使用了RSA的一个特性,即具有不同签名的两个不同消息可以组合在一起,这样它们的签名也是可以组合的。例如,假设有两个不同的消息M1和M2,分别有签名S1和S2。这样,如果M= (M1 × \times ×M2) mod n成立,那么在数学上S= (S1 × \times ×S2) mod n也成立。因此,攻击者可以计算M = (M1xM2) mod n,然后计算S = (S1xS2) mod n来伪造签名。

5.DSA与数字签名

DSA算法利用下列变量:
p=长度为L位的素数,L=64的倍数,在512~ 1024之间。在原标准中,p总是512位。
q=(p-1)的160位素数因子。
g= h ( p − 1 ) / q h^{(p-1)/q} h(p1)/qmod p,h是小于(p-1)的数,使得 h ( p − 1 ) / q h^{(p-1)/q} h(p1)/qmod p大于1。
x=小于q的数。
y= g x g^{x} gxmod p。
H=消息摘要算法(通常是SHA-1)。
前三个变量(p,q,g)是公开的,可以在非安全网络上任意发送。x是私钥,而相应的公钥是y。
假设发送方要将消息m签名,将签名消息发送给接收方,则会执行下列步骤:
(1)发送方产生小于q的随机数k。
(2)发送方计算如下: r = ( g k m o d p ) m o d q r=(g^k mod p)mod q r=(gkmodp)modq s = ( k − 1 ( H ( m ) + x r ) ) m o d q s=(k^{-1}(H(m)+xr))mod q s=(k1(H(m)+xr))modq,r和s是发送方的签名,发送方把这些值发送给接收方,为了验证签名,接收方计算如下步骤。
(3) w = s − 1 m o d p w=s^{-1}mod p w=s1modp u 1 = ( H ( m ) ∗ w ) m o d q u1=(H(m)*w)mod q u1=(H(m)w)modq u 2 = ( r w ) m o d q u2=(rw)mod q u2=(rw)modq v = ( ( g u 1 ∗ y u 2 ) m o d p ) m o d q v=((g^{u1}*y^{u2})mod p)mod q v=((gu1yu2)modp)modq。如果v=r,则签名正确,否则将其拒绝。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZhInen丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值