|
|
Digital Signature Algorithm (DSA)是Schnorr和ElGamal签名算法的变种,被美国NIST作为DSS(DigitalSignature Standard)。算法中应用了下述参数: 1 f' D3 Y L- C. {
) N; F3 f9 ` o& O( U: {p:L bits长的素数。L是64的倍数,范围是512到1024; 0 N' r! C. D1 m3 s
q:p - 1的160bits的素因子;
9 m4 R) O! a2 i) l1 Kg:g = h^((p-1)/q) mod p,h满足h < p - 1, h^((p-1)/q) mod p > 1; 3 N" Y+ ~8 H5 h" D
x:x < q,x为私钥 ;
. c4 _& J& L I/ hy:y = g^x mod p ,( p, q, g, y )为公钥; 9 _$ @2 t( H- R" }9 h1 r
H( x ):One-Way Hash函数。DSS中选用SHA( Secure Hash Algorithm )。
6 a; } K. U4 D c+ w- s1 a* k7 S1 h2 ep, q, g可由一组用户共享,但在实际应用中,使用公共模数可能会带来一定的威胁。签名及验证协议如下:
& u: d+ T( o% h8 Z9 B ) L. i% B) ~( X" \8 o1 h
1. P产生随机数k,k < q; , v* H& p* S9 H: s( V1 z& t
2. P计算 r = ( g^k mod p ) mod q * W2 U; O- W1 F( S* ^7 y) j
s = ( k^(-1) (H(m) + xr)) mod q ' F/ b6 m" P; n7 f
签名结果是( m, r, s )。
) D: i, \6 Q. F, y4 T3. 验证时计算 w = s^(-1)mod q
) J+ Y+ b: [( C+ W4 R* @- Zu1 = ( H( m ) * w ) mod q {& b7 X: w$ A' r, ]# k
u2 = ( r * w ) mod q 6 ? D# G+ ?* g2 K4 ]& i
v = (( g^u1 * y^u2 ) mod p ) mod q 6 h4 S w; ] C( \) A% q
若v = r,则认为签名有效。 9 |2 Q4 [. _5 l- c
. g+ q2 B7 A& M7 @7 V" f$ j* u6 ?1 b
DSA是基于整数有限域离散对数难题的,其安全性与RSA相比差不多。DSA的一个重要特点是两个素数公开,这
0 z( Z& d# l/ f& m" w样,当使用别人的p和q时,即使不知道私钥,你也能确认它们是否是随机产生的,还是作了手脚。RSA算法却作不到 |
|