Elgamal加密算法

Elgamal加密算法是一种基于离散对数问题的、基于迪菲-赫尔曼密钥交换协议的非对称加密算法

它的加解密过程还挺简单易懂的

首先我们准备好食材:

一个大素数p、一个Zp∗Z_p^*的生成元g、随机选择整数k(0≤k≤p−2)k(0 \le k \le p-2)

然后计算y≡gkmod  py \equiv g^k \mod{p}

这样子我们记私钥为{k}\{k\} 公钥为{p,g,y}\{ p,g,y\}

起锅烧水!!

Alice选取一个整数r,并计算如下两个方程

y1≡grmod  py_1 \equiv g^r \mod p (1)

y2≡myrmod  py_2 \equiv my^r \mod p (2)

这样做就把m隐藏在y2y_2中

Alice再把y1 y2y_1\ y_2发送给Bob

不难发现加密过程使用的是公钥{p,g,y}\{ p,g,y\}

Bob还原m的过程也非常简单

将y≡gkmod  py \equiv g^k \mod{p}代入(2)中,将(1)左右两侧同时k次幂

得到

y1k≡gkrmod  py_1^k\equiv g^{kr}\mod p

y2≡mgkrmod  py_2 \equiv mg^{kr} \mod p

两式左右分别相乘

m≡y2(y1k)−1mod  pm \equiv y_2(y_1^{k})^{-1} \mod p

不难发现解密使用的是私钥{k}\{k\}