这个机制的巧妙在于它可以让双方在完全没有对方任何预先信息的条件下通过不安全信道确定对称密钥。
安全性在于对于大素数p,计算离散对数是十分困难的
参考:
https://blog.csdn.net/chengqiuming/article/details/83002352
https://baike.baidu.com/item/Diffie-Hellman%E7%AE%97%E6%B3%95/20835355?fr=aladdin#3
代码实现
输入一个素数和它的一个原始根,生成小于此素数的一个随机数,计算出用户的公钥,保存
然后再输入对方的公钥,计算出双方的会话密钥。
import random
import time
#双方都知道P,G,各方还知道一个随机数,收到对方的运算结果
#双方都要调用一次dhAlgorith,在得到对方密文后都要调用一次dhSessionKey
#P是输入的素数,G是输入的P的一个原根
def dhAlgorithm(P,G):
#生成随机数A
random.seed(time.time())
A = random.randint(1,P-2)
#生成用户一公钥
X = 1
for i in range(A):
X = X * G
X = X % P
#返回用户一公钥
return (A,X)
#Y为用户二的公钥,P为输入的素数,A为当前用户的随机数
def dhSessionKey(Y,P,A):
k = 1
for i in range(A):
k = k * Y
k = k % P
#会话密钥k
return k