|
|
Digital Signature Algorithm (DSA)是Schnorr和ElGamal签名算法的变种,被美国NIST作为DSS(DigitalSignature Standard)。算法中应用了下述参数: $ r9 O& D/ p& o+ L) K/ _7 W) _
+ H* W$ k1 O) {( S' {6 H# l) y2 A& o+ k( c
p:L bits长的素数。L是64的倍数,范围是512到1024; ; D) B, ^7 l2 N E0 H- a4 g7 Q
q:p - 1的160bits的素因子;
2 I6 }$ ~+ \2 _; l+ V) kg:g = h^((p-1)/q) mod p,h满足h < p - 1, h^((p-1)/q) mod p > 1; % b5 }# L2 @2 @8 v7 v5 Z8 i
x:x < q,x为私钥 ;
. `$ d/ c, [' L) H" a/ Qy:y = g^x mod p ,( p, q, g, y )为公钥; / [1 K. G4 I4 x& w: B* X; |: a
H( x ):One-Way Hash函数。DSS中选用SHA( Secure Hash Algorithm )。 : N" H) R3 U# ?- e9 _( P8 k
p, q, g可由一组用户共享,但在实际应用中,使用公共模数可能会带来一定的威胁。签名及验证协议如下: * U! U( z' t, x1 L
7 c' i" z2 Y+ `4 G1. P产生随机数k,k < q;
9 r# M9 U9 P$ x5 ~( o2. P计算 r = ( g^k mod p ) mod q $ k1 j. c, F3 g3 f3 \
s = ( k^(-1) (H(m) + xr)) mod q 9 [/ f5 o- I( e3 B6 t {7 q9 r) h1 Q
签名结果是( m, r, s )。
/ ^1 k) [8 L3 X. v3. 验证时计算 w = s^(-1)mod q
8 V/ r r) f- r4 P' T9 Cu1 = ( H( m ) * w ) mod q
7 _ M( n2 K# H# `1 N w' i8 ^! ?u2 = ( r * w ) mod q
! N1 @- t% d1 x; Y( pv = (( g^u1 * y^u2 ) mod p ) mod q
' J* w$ ^$ ^5 _) Z+ r. m若v = r,则认为签名有效。
* J, W& P9 b5 W0 E- ~# t9 r
9 s5 ?, x. ?8 ] DSA是基于整数有限域离散对数难题的,其安全性与RSA相比差不多。DSA的一个重要特点是两个素数公开,这
: V9 Q1 S, m- M& S$ h5 v2 j5 J) w/ T样,当使用别人的p和q时,即使不知道私钥,你也能确认它们是否是随机产生的,还是作了手脚。RSA算法却作不到 |
|