数字签名标准(Digital Signature Standard,DSS)是美国NIST于1991年8月公布的数字签名标准。DSS的核心是数字签名算法(Digital Signature Algorithm,DSA),它实际上是El-Gamal的变形,设计中使用了SHA-1算法。DSS的安全性还是基于求解离散对数的困难性。DSS的签名与验证过程如图6-10所示。
1.DSS签名的生成与验证算法
(1)参数定义和密钥生成
●x是随机或者伪随机整数,满足0<x<q;
●p是一个满足2L-1<p<2L的大素数,其中L为512~1024bit且是64的倍数;
●q是长160bit的素数,满足q|(p-1);
●g≡h(p-1)/q(mod p),其中h满足1<h<p-1,因此h(p-1)/q(mod p)>1;
●计算
y≡gx(mod p)
取公钥k1=(p,q,g,y);私钥k2=x。
图6-10 DSS签名与验证过程
(2)签名算法
签名者选取一个随机或者伪随机整数k,满足0<k<q;拥有私钥x;使用SHA-1算法计算出消息摘要h(m);进一步使用签名算法生成的签名为(r,s)。
这里
r≡gk(mod p)(mod q)
s≡(h(m)+xr)k-1(mod q)
(3)验证算法
验证者拥有公钥k1=(p,q,g,y),收到的明文m和签名(r,s),验证
其中
(www.xing528.com)
若等式成立,则签名有效;否则,签名无效。
实际上,由k≡(h(m)+xr)s-1(mod q)知
【例6-3】 在DSS中,假设取q=101,p=78×101+1=7879,h=3,所以
g≡378(mod 7879)≡170
又假设x=75,则
y≡gx(mod 7879)≡4567
如果发送者A想签名的消息摘要为h(m)=1234,且他选择了随机值k=50,可算得
k-1(mod 101)≡99
计算签名得
所以签名为(94,97),A将签名发送给接收者B。
接收者B收到签名后计算
有v=r,验证了该签名的有效性。
2.DSS的安全性
DSS的公布引起了学术界和商业界的强烈反应:赞成的人认为它长度小、速度快、成本低,对金融业特别有用;反对的人则认为它不与国际标准(以RSA为标准的ISO、CCITT、SWIFT等)兼容。从技术上讲,DSS的安全性体现在以下方面。
1)DSS的安全性也是乘法群上的求离散对数的困难性,其安全性与RSA相比差不多。但DSS将两个素数公开,这样,当使用别人的p和q时,即使不知道私钥,也能确认它们是否是随机产生的,还是做了手脚,RSA签名却做不到这一点。
2)鉴于有限域上计算离散对数问题的进展,一般认为512bit的DSS无法提供长期的安全性,而1024bit DSS的安全性值得信赖。
3)DSS签名算法也是一个非确定性的数字签名算法,对消息M的签名依赖于随机数r,这样相同的消息就可能产生不同的签名。因求r的模指数运算r≡gk(mod p)(mod q)与待签的消息无关,所以用户可预先计算出很多r和k-1以备以后的签名使用,从而大大加快产生签名的速度。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。