ElGamal密码体制
密钥产生
ElGamal算法首先选择大素数$q$及其原根$\alpha$
其公私钥产生过程如下
- 选择随机整数$1<X_A<q-1$
- 计算$Y_A=\alpha^{X_A}\mod q$
则用户的私钥为$X_A$,公钥为${q,\alpha, Y_A}$
ElGamal加密/解密
首先将消息M分组,每块长度不小于$q$
发送方选择任意整数$k$使得$1\leq k\leq q-1$,并计算一次性密钥$K=(Y_A)^k\mod q$
按公式$C_1=\alpha^k\mod q, C_2=KM\mod q$加密,则密文为$(C_1,C_2)$
接收方计算$K=(C_1)^{X_A}\mod q$恢复密钥
按公式$M=C_2K^{-1}\mod q$即可恢复明文
注意每个消息分块都要有随机且唯一的$k$
椭圆曲线密码下的ElGamal
此处以域$Z_p$上的椭圆曲线为例
在$E_p(a,b)$中挑选基点$G$满足$G$的阶很大,其中$G$的阶$n$定义为使得$nG=O$的最小正整数
首先A选择一个整数$n_A<n$作为私钥,然后计算公钥$P_A=n_A\times G$
B要给A发送消息时,先将明文消息$m$编码为$E_p(a,b)$上的点$P_m$
之后随机选择整数$k<n$,计算$C_1=kG,C_2=P_m+kP_A$,则密文为$(C_1,C_2)$
A收到消息后计算$P_m=C_2-n_AC_1$即可解密
ElGamal数字签名
可参考博客 经典数字签名算法概述
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.