5.5.4 DSA数字签名

5.5.4 DSA数字签名

DSA是ElGamal签名方案的一种演变方案,它由Kravitz提出,被美国国家标准技术研究所在1991年8月提议成为美国联邦信息处理标准(FIPS 186),即数字签名标准(DSS)。DSS的安全性是基于离散对数问题的,DSA是DSS的签名算法。DSA数字签名的原理如图5-4所示。

图5-4 DSA数字签名的原理

1.发送方密钥的生成

(1)选择一个大素数q,满足2159<q<2160

(2)选取t,使得0≤t≤8,并选择素数p满足2511+64t<p<2512+64t,且q整除(p-1);

(3)计算g=h(p-1)/q mod p,其中h是一个整数,1<h<(p-1),且要求h(p-1)/q mod p>1;

(4)随机选择一个数值a,使得1≤a≤q-1,用户的私钥是a;

(5)计算y=ga mod p,用户的公钥是(p,q,g,y)。

2.签名过程

(1)选择一个随机整数k,满足0<k<q,计算r=(gk mod p)mod q;

(2)计算k-1 mod q;

(3)计算s=k-1{h(m)+ar}mod q,则消息m的签名为(r,s)。

3.验证过程

(1)验证者获得发送方的公钥(p,q,g,y),验证0<r<q和0<s<q,否则拒绝该签名;

(2)计算w=s-1 mod q和h(m);

(3)计算u1=wh(m)mod p和u2=rw mod p;

(4)计算v=(gu1 yu2 mod p)mod q,当且仅当v=r时接受签名。

例5-7 利用DSA签名方案完成签名。

发送方密钥的生成过程如下。

(1)发送方选择素数p=124 540 019,q=17 389,满足q整除(p-1);

(2)选择h=110 217 528,计算

g=h7162 mod p=10 083 255

(3)选择随机数a=12 496,满足1≤a≤q-1,计算

y=ga mod p=10 083 25512496 mod 124 540 019=119 946 265

则生成的私钥是a=12 496,公钥是

p=124 540 019,q=17 389,g=10 083 255,y=119 946 265

签名生成过程如下。

(1)选择随机数k=9 557,计算

r=(gk mod p)mod q=(10 083 2559557 mod 124 540 019)mod 17 839

=27 039 929 mod 17 389=34

(2)计算k-1 mod q=7 631,并利用设定好的Hash函数h(m)=5 246;

(3)计算

s=7 631×{5 246+12 496×34}mod q=13 049

则签名为(r=34,s=13 049)。

签名验证过程如下。

(1)接收方计算w=s-1 mod q=1 799;

(2)计算

u1=wh(m)mod p=5 246×1 799 mod 17 839=12 716

u2=rw mod p=34×1 799 mod 17 839=8 999

(3)再计算

因为v=r,所以接受签名。

4.DSA签名的特性及安全性

(1)由于DSA是ElGamal签名方案的一种变体,所以上一节有关ElGamal签名方案的安全性讨论都适用于DSA。

(2)在DSA签名方案中,可以进行指数预运算而不必在签名生成时进行,因为指数运算中的参数与原始消息无关,所以它可在签名前就进行运算,从而减少签名过程耗费的时间。

(3)DSA签名方案是基于两个不同又相关的离散对数问题的,因此想从签名结果推算出发送方的秘密参数是不可能的。

(4)1996年推荐的DSA安全模数至少为768比特,而1 025位的DSA系统具有更高的安全性。

(5)DSA的隐信道最早由Simmons发现,它在签名中可以传递额外的少量信息,因此对于重要的应用,不建议接收由信任度不高的团体利用DSA生成的数字签名。

5.DSA与RSA的区别

(1)DSA虽然是一种公钥密码技术,但它不能用于加密解密,也无法用于密钥分配,因为它是专门设计用作数字签名的;而RSA算法既可以用于加密解密,也可以用于数字签名。

(2)DSA在签名时使用了随机数,因此它是随机化的数字签名,即对于同一个消息每次签名的结果不一样;而RSA是确定性的数字签名,对于同一个消息签名结果相同。