Elgamal加密算法

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

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

首先我们准备好食材:

一个大素数p、一个ZpZ_p^*的生成元g、随机选择整数k(0kp2)k(0 \le k \le p-2)

然后计算ygkmodpy \equiv g^k \mod{p}

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

起锅烧水!!

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

y1grmodpy_1 \equiv g^r \mod p (1)

y2myrmodpy_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的过程也非常简单

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

得到

y1kgkrmodpy_1^k\equiv g^{kr}\mod p

y2mgkrmodpy_2 \equiv mg^{kr} \mod p

两式左右分别相乘

my2(y1k)1modpm \equiv y_2(y_1^{k})^{-1} \mod p

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