ElGamal公钥密码体制是1984年斯坦福大学的Tather ElGamal提出的一种基于离散对数问题困难性的公钥体制。1985年,Tather ElGamal利用ElGamal公钥密码体制设计出ElGamal数字签名方案,该数字签名是经典数字签名方案之一,具有高度的安全性与实用性。后来,ElGamal数字签名体制的变体被使用于数字签名标准DSS中。直到今天,很多新的数字签名方案仍然属于ElGamal数字签名体制的变体或扩展。这个就是ElGamal加密算法。

群是一个集合G,连同一个运算 "·",它结合任何两个元素 a 和 b 而形成另一个元素,记为 a · b。符号 "·" 是对具体给出的运算,比如加法的一般的占位符。要具备成为群的资格,这个集合和运算 (G, ·) 必须满足叫做群公理的四个要求

1、封闭性。对于所有G中a、b,运算a · b的结果也在G中。

2、结合性。独于所有的G中的a · b和c,等式(a · b) · c = a · (b · c)成立。

3、单位元。存在G中的一个元素e,使得对与所有G中的元素a,等式 e · a = a · e= a 成立。

4、反元素。对于每个G中的a,存在G中的一个元素b是的a · b= b ·  a = e,这里的e是单位元。

例如整数集合 和加法运算,具有以下性质

  1. 对于任何两个整数 a 和 b,它们的和 a + b 也是整数。换句话说,在任何时候,把两个整数相加都能得出整数的结果。这个性质叫做在加法下封闭。
  2. 对于任何整数 a, bc,(a + b) + c =a + (b + c)。用话语来表达,先把 a 加到 b,然后把它们的和加到c,所得到的结果与把 a 加到 bc 的和是相等的。这个性质叫做结合律。
  3. 如果 a 是任何整数,那么 0 + a = a + 0 = a。零叫做加法的单位元,因为把它加到任何整数都得到相同的整数。
  4. 对于任何整数 a,存在另一个整数 b 使得 a + b = b +a = 0。整数 b 叫做整数 a 的逆元,记为 −a

一个群被称为有限群,如果它有有限个元素,元素的数阶叫做群 G 的阶。

例如,模19下7的阶为3,[1, 7, 49, 343, 2401, 16807, 117649, 823543, 5764801...]={1,7,11,1,7,11,1,7,11...}这里的1,7,11循环,实际只有3个元素

循环群

循环群是其所有元素都是特定元素 a 的幂的群(在群运算被写为加法的时候使用术语倍数)。在乘法符号下,群的元素是:
..., a3, a2, a1, a0 = e,a, a2, a3, ...,这个元素 a叫做这个群的生成元或本原元。

本原元

模n下a的阶m=φ(n),m就是n的本原元,如3是19的本原元

19为质数,因此φ(19)=18),模19下3的群为:

[1, 3, 9, 27, 81, 243, 729, 2187, 6561, 19683, 59049, 177147, 531441,1594323, 4782969,
14348907, 43046721, 129140163, 387420489, 1162261467, 3486784401L,10460353203L, 31381059609L, 94143178827L...]
用模19来表示

[1, 3, 9, 8, 5, 15, 7, 2, 6, 18, 16, 10, 11, 14, 4, 12, 17, 13, 1, 3, 9L,8L, 5L, 15L]

循环为1, 3, 9, 8, 5, 15, 7, 2, 6, 18, 16, 10, 11, 14, 4, 12, 17, 13,因此该循环群阶为18与欧拉函数结果相等

密钥生成

首先选择一个素数p,两个随机数, g 和x,g, x < p, 计算 y = g^x ( mod p ),则其公钥为 y, g 和p。私钥是x。g和p可由一组用户共享。
ElGamal用于数字签名。被签信息为M,首先选择一个随机数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)* 上的离散对数计算。素数p必须足够大,且p-1至少包含一个大素数因子以抵抗Pohlig & Hellman算法的攻击。M一般都应采用信息的HASH值(如SHA算法)。ElGamal的安全性主要依赖于p和g,若选取不当则签名容易伪造,应保证g对于p-1的大素数因子不可约。