DH算法图解+数学证明

 

前几天和同事讨论IKE密钥交换流程时,提到了Diffie-Hellman交换。DH算法最主要的作用便是在不安全的网络上成功公共密钥(并未传输真实密钥)。但由于对于DH算法的数学原理则不清楚,因此私下对DH算法进行一个简单学习。

1. DH算法的交互流程:

  • Alice和Bob都有一个只有自己知道的私钥,在特定规则(g, a, p)下生成自己的公钥A; 
  • Alice将自己的公钥A,连同g, p共同发给Bob
  • Bob在收到Alice发送来的公钥A, g, p后,先使用相同的规则((g, a, p))生成自己的公钥B;在使用Alice的公钥A计算生成共享密钥K
  • Bob将自己的公钥B发送给Alice即可。(Alice已经有g, p, 因此无需在发送)
  • Alice在接收到Bob的公钥B后,使用相同的规则计算成功共享密钥K

至此,Alice 和 Bob便同时拥有了共享密钥K。此时由于各自的私钥a,b未在互联网上传播,因此即使存在窥探者Eve,他仅通过公开的A\B\g\p在短时间内无法破解出a,b,K。因此DH算法便可以在不安全的网络上协商出密钥,基于此构建安全的加密通道。

 

2. 疑问:Alice和Bob最后计算的K值一样吗?

对于DH整个交互流程来说,比较简单,基本都可以理解。但是忽然说最后的K值相等,这多少有点突然和难以置信,让人有点猝不及防。

书本上都是这样解释的:

所以Alice和Bob的共享密钥K是相同的。但是,总感觉没有get到要领和精髓。因为我不知道mod(求余)的运算规则,不知道如下等式是否成立???

因此半夜凌晨1点从刚暖热乎的被窝又爬了出来,想要证明下他们给的公式是否正确( 其实当成定理记住也就OK了,不过我嘛,还是爬起来了)。证明这个公式也很简单:将求余运算转换为加减乘除运算,然后利用二项式展开公式便可以得到答案

至于为什么要将求余运算转换为加减乘除四则运算,原因是我不知道求余算法的规则,不然我也不需要多此一举了。

证明开始:

令:

则:

根据①②式可得:

 

将③带入上式可得:

 

使用二项式展开公式将𝒈 −𝒑∗𝒚𝒂 展开,则有

 

 

 

 

从这个表达式可以看出,前a项(i∈[0,𝑎−1])每一项都是p的整数倍,因此求余运算时必定为0,因此:

 

 

 

这下好了,高兴的睡不着觉了。

  • 25
    点赞
  • 73
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
DH算法是一种用于密钥交换的协议,它允许两个通信方通过交换公钥来生成共享密钥。在DH算法中,Alice和Bob首先选定一个质数p和一个原根g作为公开参数。然后,他们分别生成自己的私钥和公钥,并将公钥传递给对方。最后,他们使用自己的私钥和对方传递过来的公钥计算出共享密钥。 在给定的例子中,Alice选择的公钥为A=4,Bob选择的公钥为B=9。他们的质数p=13和原根g=7已经提前确定。 根据DH算法的原理,Alice可以通过遍历所有可能的私钥值,找到与自己的公钥匹配的私钥XA。同样地,Bob可以通过遍历所有可能的私钥值,找到与自己的公钥匹配的私钥XB。 经过计算,我们可以得到Alice的私钥为XA=3,Bob的私钥为XB=4。然后,他们可以使用这些私钥计算出共享密钥K1=9。 因此,根据给定的例子,Alice的私钥为3,Bob的私钥为4,他们交换的公钥为9。 这是DH算法在Python中的实现示例,它可以根据输入的公开参数和公钥计算出私钥和共享密钥: ```python p = 13 g = 7 KA = 4 KB = 9 for i in range(p): if (pow(g, i) - KA) % p == 0: XA = i break for i in range(p): if (pow(g, i) - KB) % p == 0: XB = i break K1 = pow(KB, XA) % p K2 = pow(KA, XB) % p if K1 == K2: print("Alice的私钥为:", XA) print("Bob的私钥为:", XB) print("Alice和Bob交换的密钥为:", K1) ``` 这段代码将输出结果为: Alice的私钥为: 3 Bob的私钥为: 4 Alice和Bob交换的密钥为: 9 请注意,这只是一个简单的示例,实际上DH算法可以支持更大的质数和原根来提高安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叨陪鲤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值