|
|
ElGamal算法既能用于数据加密也能用于数字签名,其安全性依赖于计算有限域上离散对数这一难题。 , v$ ~: U' ] b! Q
密钥对产生办法。首先选择一个素数p,两个随机数, g 和x,g, x < p, 计算 y = g^x ( mod p ),则其公钥为 y, g 和p。私钥是x。g和p可由一组用户共享。 4 U3 Q6 ^' W% ]! x$ j- a. ]1 p
ElGamal用于数字签名。被签信息为M,首先选择一个随机数k, k与 p - 1互质,计算 0 q. S/ L9 ^) E. O* \' @2 y: n
* I& k7 A3 @- i0 J! j {8 ]a = g^k ( mod p )
: c) w& r" D p9 ~' x9 I. g" I再用扩展 Euclidean 算法对下面方程求解b:
1 X3 g$ i3 E: l
6 ~" g( y9 a2 m, R; O }) VM = xa + kb ( mod p - 1 ) : W' k S$ O& P( j0 B
" h5 q" F: X) }3 C* a w签名就是( a, b )。随机数k须丢弃。 6 E4 _, C! ~/ [( C4 z
验证时要验证下式:
: C8 n1 P% Q' i% N: M6 i5 Q. J : Q Y& Q: ^) s# X0 T4 Y
y^a * a^b ( mod p ) = g^M ( mod p )
$ w# R) D% z. j' z) D8 w3 ^ $ |8 E6 U8 ^8 R3 Y
同时一定要检验是否满足1<= a < p。否则签名容易伪造。 % z& f% l: v5 P$ p
ElGamal用于加密。被加密信息为M,首先选择一个随机数k,k与 p - 1互质,计算 ! N' B5 L8 q P% c
' |4 Q) w0 S; z: x4 ?+ ]# J7 Va = g^k ( mod p )
" v U5 L4 [0 s5 t8 G) pb = y^k M ( mod p )
) K) K9 t# c2 h
# _, F" c; B% |9 w6 O - k3 d5 D2 s6 x, w
( a, b )为密文,是明文的两倍长。解密时计算
! D/ P7 I: G7 F- Y8 `+ g, Z4 s
6 Z' ~+ A: [/ N! y2 MM = b / a^x ( mod p )
! j3 p1 r+ K8 [, O# [
$ l4 ?6 W3 z; c/ z5 w0 \ ElGamal签名的安全性依赖于乘法群(IFp)* 上的离散对数计算。素数p必须足够大,且p-1至少包含一个大素数
% E, r* z( O! Y( H" w因子以抵抗Pohlig & Hellman算法的攻击。M一般都应采用信息的HASH值(如SHA算法)。ElGamal的安全性主要依赖于p和g,若选取不当则签名容易伪造,应保证g对于p-1的大素数因子不可约。D.Bleichenbache“GeneratingElGamal Signatures Without Knowing the Secret Key”中提到了一些攻击方法和对策。ElGamal的一个不足之处是它的密文成倍扩张。 ; i$ g/ v J3 \% }
, P' E T1 r$ ?% W$ R 美国的DSS(Digital Signature Standard)的DSA(Digital Signature Algorithm)算法是经ElGamal算法演
+ n% v& z% j6 q- A- l0 k- P, t变而来。 |
|