ElGamal加密算法

在密码学中，ElGamal加密算法是一个基于迪菲-赫尔曼密钥交换的非对称加密算法。它在1985年由塔希尔·盖莫尔提出。GnuPG和PGP等很多密码学系统中都应用到了ElGamal算法。

ElGamal加密算法可以定义在任何循环群上。它的安全性取决于上的离散对数难题。

算法 
ElGamal加密算法由三部分组成：密钥生成、加密和解密。

密钥生成 
密钥生成的步骤如下：

 Alice利用生成元产生一个阶循环群的有效描述。该循环群需要满足一定的安全性质。
 Alice从中随机选择一个。
 Alice计算。
 Alice公开以及的描述作为其公钥，并保留作为其私钥。私钥必须保密。

加密 
使用Alice的公钥向她加密一条消息的加密算法工作方式如下：

 Bob从随机选择一个，然后计算。
 Bob计算共享秘密。
 Bob把他要发送的秘密消息映射为上的一个元素。
 Bob计算。
 Bob将密文发送给Alice。

值得注意的是，如果一个人知道了，那么它很容易就能知道的值。因此对每一条信息都产生一个新的可以提高安全性。所以也被称作。

解密 
利用私钥对密文进行解密的算法工作方式如下：

 Alice计算共享秘密
 然后计算，并将其映射回明文，其中是在群上的逆元。（例如：如果是整数模n乘法群的一个子群，那么逆元就是模逆元）。

 解密算法是能够正确解密出明文的，因为

实际使用 
ElGamal加密系统通常应用在中。例如：用对称加密体制来加密消息，然后利用ElGamal加密算法传递密钥。这是因为在同等安全等级下，ElGamal加密算法作为一种非对称密码学系统，通常比对称加密体制要慢。对称加密算法的密钥和要传递的消息相比通常要短得多，所以相比之下使用ElGamal加密密钥然后用对称加密来加密任意长度的消息，这样要更快一些。

参考文献 

非对称密钥算法