ElGamal加密体制

ElGamal加密体制的公私密钥生成过程如下。
(1)随机选择一个满足安全要求的大素数p,并生成有限域Z_{p}。的一个生成元g\in Z_{p}^{*}
(2)选一个随机数x(1<r<p-1),计算y\equiv g^{x}(mod\quad p),则公钥为(y,g,p),私钥为x。

1.加密过程

与RSA密码体制相同,加密时首先将明文比特串分组,使得每个分组对应的十进制数小于p,即分组长度小于log_{2}p,然后对每个明文分组分别加密。具体过程分为如下几步:
(1)得到接收方的公钥(y,g,p);
(2)把消息m分组为长度为L(L<log_{2}p)的消息分组m=m_{1}m_{2}...m_{t}
(3)对第i块消息(1≤i≤t)随机选择整数r_{i},1<r_{i}<p-1;
(4)计算c_{i}\equiv g^{r_{i}}(mod \quad p),c_{i}^{'}\equiv m_{i}y^{r_{i}}(mod \quad p)(1\leq i\leq t)
(5)将密文C=(c_{1},c_{1}^{'})(c_{2},c_{2}^{'})...(c_{t},c_{t}^{'})发送给接收方。

2.解密过程

(1)接收方收到的密文C=(c_{1},c_{1}^{'})(c_{2},c_{2}^{'})...(c_{t},c_{t}^{'})
(2)使用私钥x和解密算法m_{i}\equiv (c_{i}^{'}/c_{i}^{x})(mod \quad p) \quad (1\leq i\leq t)进行计算;
(3)得到明文m=m_{1}m_{2}...m_{t}

3.正确性

下面证明若严格按步骤执行算法,则接收者可以使用私钥和解密算法恢复明文。
因为
y\equiv g^{x}(mod\quad p)c_{i}\equiv g^{r_{i}}(mod \quad p),c_{i}^{'}\equiv m_{i}y^{r_{i}}(mod \quad p)

所以
(c_{i}^{'}/c_{i}^{x})\equiv (m_{i}y^{r_{i}}/g^{xr_{i}})\equiv (m_{i}g^{xr_{i}}/g^{xr_{i}})\equiv m_{i}(mod \quad p)
又因为m_{i}< p,故
(c_{i}^{'}/c_{i}^{x})mod \quad p=m_{i}

得证。

ElGamal加密过程需要两次模指数运算和一次模乘积运算,解密过程需要模指数运算,求逆运算和模乘积运算各一次。每次加密运算需要选择一个随机数,所以密文既依赖于明文,又依赖于选择的随机数,故对于同一个明文,不同的时刻生成的密文不同。另外,El-Gamal加密使得消息扩展了两倍,即密文的长度是对应明文长度的两倍。

猜你喜欢

转载自blog.csdn.net/salmonwilliam/article/details/88828033