Introduction - If you have any usage issues, please Google them yourself
首先选择一个随机数k, k与 p- 1互质,计算
a = g^k ( mod p )
再用扩展 Euclidean 算法对下面方程求解b:
M = xa+ kb ( mod p- 1 )
签名就是( a, b )。随机数k须丢弃。
验证时要验证下式:
y^a* a^b ( mod p ) = g^M ( mod p )
同时一定要检验是否满足1<= a < p。否则签名容易伪造。
ElGamal用于加密。被加密信息为M,首先选择一个随机数k,k与 p- 1互质,计算
a = g^k ( mod p )
b = y^k M ( mod p )
( a, b )为密文,是明文的两倍长。解密时计算
M = b/a^x ( mod p )
ElGamal签名的安全性依赖于乘法群(IFp)* 上的离散对数计算