ElGamal加密算法的理解

原理:求解离散对数是困难的,而其逆运算可以应用平方乘的方法有效的计算出来。

关于定义中循环群、生成元等基础概念的理解可以看上一篇文章整理
https://blog.csdn.net/sLiubala/article/details/105952656

ElGamal加密算法三部分:
密钥生成、加密、解密

  1. 密钥生成
    利用生成元g产生一个q阶循环群G
    从{1,…q-1}中随机选择一个x, h = g x h=g^x h=gx
    则(G,q,g,h)将作为公钥,而x作为私钥,私钥保密。

  2. 加密
    发送方根据接收方的公钥(G,q,g,h)给她发送一条加密信息m的加密算法工作方式如下:
    发送方2.1首先从{1,…q-1}中随机选择一个y,计算 c 1 = g y c_1=g^y c1=gy
    2.2 计算共享秘密 s = h y s=h^y s=hy
    2.3 发送方把他要发送的秘密消息m映射为G上的一个元素m’
    2.4 计算 c 2 = m ′ ∗ s c_2= m' * s c2=ms
    2.5 发送方将密文 ( C 1 , C 2 ) = ( g y , m ′ ∗ h y ) = ( g y , m ′ ∗ ( g x ) y ) (C_1,C_2)=(g^y,m' * h^y)=(g^y,m' * (g^x) ^y) (C1,C2)=(gy,mhy)=(gy,m(gx)y)发送给接收方。
    值得注意的是,如果一个人知道了m’,那么它很容易就能知道 h y h^y hy的值,因此对每一条信息都产生一个新的y可以提高安全性。

  3. 解密
    利用私钥x对密文 ( c 1 , c 2 ) (c_1,c_2) (c1,c2)进行解密的算法工作方式如下:
    接收方3.1计算共享秘密 s = c 1 x s= c_1^x s=c1x
    3.2 计算 m ′ = c 2 ∗ s − 1 m' = c_2 * s ^{-1} m=c2s1,并将其映射回明文m,其中 s − 1 s^-1 s1是s在群G上的逆元。(如果G是整数模n乘法群的的一个子群,那么逆元就是模逆元)
    计算过程:
    c 2 ∗ s − 1 = m ′ ∗ h y ∗ ( g x y ) − 1 = m ′ ∗ g x y ∗ g − x y = m ′ c_2 * s^{-1}= m' * h^y * (g^{xy})^{-1}= m' *g^{xy} * g^{-xy}=m' c2s1=mhy(gxy)1=mgxygxy=m

这样Elgamal加密解密算法就完成啦。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值