D-H密钥协商协议与EIGamal算法
D-H密钥协商协议
在基于对称加密进行安全通信的过程中,通信双方需要持有一个共享的密钥。只有这样,由任何一方加密的信息才能由另一方使用相同的密钥解密。但是在能够安全的通信之前,通信双方应该如何约定一个共享的密钥呢?这就是安全中的经典问题:密钥配送问题
解决密钥配送问题通常有三种方式:线下约定共享密钥、通过公钥密码体系配送共享密钥、以及Diffie-Hellman密钥交换协议
D-H密钥协商协议是基于离散对数困难问题的密钥交换协议,首先
- 由协议双方A和B先协商好大素数以及的原根,并且公开这两个值
- A取一个私钥,发送给B计算结果
- 类似的,B取一个私钥发给A计算结果
- A计算出
- B也能计算出
- A与B得到共享密钥S
python实现如下:
1 | import math |
ElGamal算法
1 | 该算法与Difffie-Hellman非常类似,ElGamal的系统用户在循环群G内选择一个大素数p,g是p的原根,将p和g公开 |
密钥生成
- A从中选取一个整数
- 计算A的公钥
可以得到私钥,公钥为{},公开公钥。
加密
B使用A公开的{}给A发送消息:
- 用户B要发送消息给A,先将映射到循环群中得到
- B从中随机选择一个,计算
- B计算
- 发送密文给A
解密
A拿到B发送过来的密文之后
- 计算B使用的密钥
- 由于是在循环群内选取的,所可以计算出逆元
- 计算
python实现如下:
1 | import random |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 5Y2z_blog!
评论
UtterancesGitalk