ElGamal加密体制的公私密钥生成过程如下。
(1)随机选择一个满足安全要求的大素数p,并生成有限域。的一个生成元;
(2)选一个随机数x(1<r<p-1),计算,则公钥为(y,g,p),私钥为x。
1.加密过程
与RSA密码体制相同,加密时首先将明文比特串分组,使得每个分组对应的十进制数小于,即分组长度小于,然后对每个明文分组分别加密。具体过程分为如下几步:
(1)得到接收方的公钥(y,g,p);
(2)把消息m分组为长度为的消息分组
(3)对第i块消息(1≤i≤t)随机选择整数,1<<p-1;
(4)计算;
(5)将密文发送给接收方。
2.解密过程
(1)接收方收到的密文;
(2)使用私钥和解密算法进行计算;
(3)得到明文。
3.正确性
下面证明若严格按步骤执行算法,则接收者可以使用私钥和解密算法恢复明文。
因为
,;
所以
又因为,故
得证。
ElGamal加密过程需要两次模指数运算和一次模乘积运算,解密过程需要模指数运算,求逆运算和模乘积运算各一次。每次加密运算需要选择一个随机数,所以密文既依赖于明文,又依赖于选择的随机数,故对于同一个明文,不同的时刻生成的密文不同。另外,El-Gamal加密使得消息扩展了两倍,即密文的长度是对应明文长度的两倍。