|
|
Digital Signature Algorithm (DSA)是Schnorr和ElGamal签名算法的变种,被美国NIST作为DSS(DigitalSignature Standard)。算法中应用了下述参数:
3 T5 n1 Y3 a. X+ d J" w; W: ? ( b& W! C) ~0 d2 S/ e& s
p:L bits长的素数。L是64的倍数,范围是512到1024;
' e3 ~8 r U. K3 aq:p - 1的160bits的素因子;
8 L% z. [1 k8 i1 tg:g = h^((p-1)/q) mod p,h满足h < p - 1, h^((p-1)/q) mod p > 1;
7 H& Y" x8 ]9 Z/ w5 bx:x < q,x为私钥 ; ; L4 a" q# V9 [% f, k1 U$ u
y:y = g^x mod p ,( p, q, g, y )为公钥; 2 ?4 f$ H5 m% a) B8 q4 l$ |0 X
H( x ):One-Way Hash函数。DSS中选用SHA( Secure Hash Algorithm )。
" b: I) \2 g W9 x' Ap, q, g可由一组用户共享,但在实际应用中,使用公共模数可能会带来一定的威胁。签名及验证协议如下:
! q( h& ~/ b; ` 1 {* M1 u$ M7 O9 {1 [6 M6 o
1. P产生随机数k,k < q; + [' S; t, e0 R8 p7 ]0 n
2. P计算 r = ( g^k mod p ) mod q
3 D# a$ Q: A& T5 F" G3 |4 fs = ( k^(-1) (H(m) + xr)) mod q
G4 @. k# x/ w) L# E签名结果是( m, r, s )。 1 l; j3 m R1 \8 n: j" I% @, ~; v7 D
3. 验证时计算 w = s^(-1)mod q
5 K) Z2 C& m; ?8 A* xu1 = ( H( m ) * w ) mod q / {# C$ b& f2 R' j7 Q( H5 P3 A
u2 = ( r * w ) mod q . ~ `- P! j8 E# a/ ~7 `. W
v = (( g^u1 * y^u2 ) mod p ) mod q
6 u" p' ?! C' l- }' t- r( i U若v = r,则认为签名有效。
: K8 \ Z! ^. O5 ^8 P( H
5 v0 f# s0 w7 s1 ~8 f7 p7 l n: i4 Q DSA是基于整数有限域离散对数难题的,其安全性与RSA相比差不多。DSA的一个重要特点是两个素数公开,这
d# Q0 `! {; v样,当使用别人的p和q时,即使不知道私钥,你也能确认它们是否是随机产生的,还是作了手脚。RSA算法却作不到 |
|