|
ElGamal算法既能用于数据加密也能用于数字签名,其安全性依赖于计算有限域上离散对数这一难题。 u( m) _- I" G- {3 K [3 ^
密钥对产生办法。首先选择一个素数p,两个随机数, g 和x,g, x < p, 计算 y = g^x ( mod p ),则其公钥为 y, g 和p。私钥是x。g和p可由一组用户共享。 7 l4 }' z" B% l, O& J
ElGamal用于数字签名。被签信息为M,首先选择一个随机数k, k与 p - 1互质,计算
- [4 K, h/ Y1 a" w3 s% Y! B 2 [) i& u4 \) `+ r9 S0 |% l; h
a = g^k ( mod p ) ! E2 D, z& d$ B; G+ K* n* U5 F
再用扩展 Euclidean 算法对下面方程求解b: * h8 G4 d6 ~! s/ D+ m3 c& ~( {
0 N# [* O* a9 y6 n `, GM = xa + kb ( mod p - 1 )
" _) n1 Q- ~1 _# d$ w8 u; r & q1 J- U+ f+ M6 j% B. V
签名就是( a, b )。随机数k须丢弃。
1 H6 p* N8 w0 s* p% L7 G- ^验证时要验证下式:
% G( W; V9 r. Y1 h8 s+ \3 z
4 k) V4 F5 w3 B9 |; z5 n7 Hy^a * a^b ( mod p ) = g^M ( mod p )
4 h$ l+ M4 |7 I, ]7 f9 y X + A8 B/ g, I7 R }6 |
同时一定要检验是否满足1<= a < p。否则签名容易伪造。 9 B+ z) ]# x/ i. o. B8 f
ElGamal用于加密。被加密信息为M,首先选择一个随机数k,k与 p - 1互质,计算
3 ]5 S+ q. e; k0 A; |1 Z" A i 1 Y% [ X! H1 B: B* E" p
a = g^k ( mod p )
' \. ^2 S7 k: K2 @ c wb = y^k M ( mod p ) ) f1 x& m4 N/ e U, G
: ]$ w4 f" `* V. W( |0 A
5 }& v: s- S1 l0 X% o, W( a, b )为密文,是明文的两倍长。解密时计算 * `7 \' d+ K" i, o7 |6 a
) o6 z# B4 @' Z6 T K# x" A: t
M = b / a^x ( mod p ) . T4 F' x' i2 C: P- F
. s* s/ `- K1 H- i" w, d
ElGamal签名的安全性依赖于乘法群(IFp)* 上的离散对数计算。素数p必须足够大,且p-1至少包含一个大素数
- a/ q+ z+ Z& W& j因子以抵抗Pohlig & Hellman算法的攻击。M一般都应采用信息的HASH值(如SHA算法)。ElGamal的安全性主要依赖于p和g,若选取不当则签名容易伪造,应保证g对于p-1的大素数因子不可约。D.Bleichenbache“GeneratingElGamal Signatures Without Knowing the Secret Key”中提到了一些攻击方法和对策。ElGamal的一个不足之处是它的密文成倍扩张。
" a1 _6 ?0 t1 w6 e4 d1 N
/ ~" X8 G4 ?+ X5 ?8 e 美国的DSS(Digital Signature Standard)的DSA(Digital Signature Algorithm)算法是经ElGamal算法演 4 B+ Z/ L" X, |' g: U6 E/ d1 u
变而来。 |
|