ElGamal公钥密码算法
一、ElGamal公钥密码算法描述
1. 选取一个大素数p,使离散对数问题在有限域GF(p)上是难解的,选取g∈Z是一个本原元。
2. 随机选取整数x,1≤x≤p-2,计算y=g^x(mod p); y是公开的加密密钥,而x是保密的脱密密钥。
3. 明文空间为Z,密文空间为Z×Z。
4. 加密变换:对任意明文m∈Z,秘密地随机选取一个整数k,1≤k≤p-2,于是可得密文为:
c=(c1,c2)
其中
c1=g^k(mod p) , c2=my^k(mod p)
5. 脱密变换:对任意密文c=(c1,c2)∈Z×Z,明文为:
m=c2×(c1^x)^-1(mod p)
证明:
c2×(c1^x)^-1(mod p)=my^k(g^(kx))^-1 (mod p)
=mg^kx × g^(-kx) (mod p)=m (mod p)
二、ElGamal数字签名方案
1. 生成乘法群Z中的一个生成元g,p,g公开。
2. 随机选取整数x,1≤x≤p-2,计算y=g^x(mod p),y是公开密钥,而x是保密密钥。
3. 签名算法:设m∈Z是待签名的消息,秘密随机选取一个整数k,1≤k≤p-2,且(k,p-1)=1,计算
r=g^k(mod p)
s=k^-1(m-rx)(mod p-1)
则(m,r,s)为对消息m的数字签名。
4. 验证算法:对方收到对消息m的数字签名(m,r,s)后,利用签名者的公开密钥y,g,p可对签名进行以下验证:
(y^r)(r^s)=g^m(mod p)
如果上式成立,则接受该签名,否则拒绝该签名。
对m正确签名,那么有:
(y^r)(r^s)(mod p)=g^(rx+sk)(mod p)
=g^(rx+m-rx)(mod p)
=g^m (mod p)
————————————————
版权声明:本文为CSDN博主「我的书包哪里去了」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_34490018/article/details/79758620