本文主要是介绍迪菲-赫尔曼密钥交换,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在上一篇对称加密,非对称加密的博客中,我们提到了使用对称加密的时候加密解密的钥匙容易被他人窃取的安全性问题,为了解决这种问题,我们要不使用非对称加密,要不就要使用混合加密方式。除此之外,我们现在要介绍的另一种方法是使用迪菲-赫尔曼加密方法。
迪菲-赫尔曼密钥
迪菲-赫尔曼密钥交换(英语:Diffie–Hellman key exchange,缩写为D-H) 是一种安全协议。它可以让双方在完全没有对方任何预先信息的条件下通过不安全信道创建起一个密钥。这个密钥可以在后续的通讯中作为对称密钥来加密通讯内容。
对称加密的问题就是双方使用同一把钥匙加密解密,此钥匙容易让中间人获取从而窃取数据,那么,假设存在下面这样一种可能:
如果A方、B方使用的钥匙有这样一种特点:
1.这把钥匙可以由多把钥匙组合而成:
2.即使拿到合成之后的钥匙和任意一把合成之前的钥匙也不可能得到另一把合成之前的钥匙:
3.合成之后的钥匙可以再与另一把钥匙合成:
现在如果有了这样一把钥匙,我们就可以在这把钥匙的基础上构建出安全的密钥交换过程了,至于这样的钥匙怎么生成,下面我们会提到,我们先来看看我们有了这样一种钥匙之后怎么构建一套安全的密钥交换过程:
A方生成了自己的一把钥匙,发送给了B方,这把钥匙是公开的:
然后,A方和B方又生成了自己各自的钥匙SA和SB,这两把钥匙是私钥,是不能被别人获取的:
A方B方分别使用自己的私钥和刚才的公钥P进行组合,生成了新的两把钥匙P-SA和P-SB:
然后互换两把组合钥匙:
然后,A方和B方再分别用刚才自己的私钥SA和SB与P-SB和P-SA组合成新的两把钥匙,此时我们发现,两把钥匙是相同的,都是P-SA-SB:
至此,A方和B方获得了相同的钥匙,现在他们可以使用这把共同的钥匙进行对称加密解密了,这就是迪菲-赫尔曼密钥交换。
试想,我们现在想要攻击这个密钥交换系统,现在我们能够拦截的钥匙只有P,P-SB,P-SA,因此,无法靠这几种钥匙合成出想要的P-SA-SB钥匙。
说的好听,但是这种方法是要建立在我们能够研究出这样一个钥匙的基础上的,这一点要感谢Bailey Whitfield Diffie,Martin Edward Hellman和Ralph C. Merkle,他们真的使用数学从无到有地创造出具有这样特性的钥匙出来了。
迪菲-赫尔曼密钥原理
钥匙的数学原理是这样的:
首先,mod运算我们应该都清楚,就是取余运算,例如:5 mod 3 = 2,3 mod 3=0,1 mod 3 = 1。
前文所说的开始的P钥匙指的就是P,G两个数,P是一个非常大的素数,G是从素数P中的被称为起源或者原始根的数字中选择,现在,A方将这两个数发送给了B:
接下来,A方和B方分别准备了秘密数字X和Y,并且X和Y都要小于P-2:
接下来A和B分别计算G的X次幂对P取模,G的Y次幂对P取模,这里的X,Y相当于钥匙SA和SB,我们现在做的这一步相当于将P钥匙分别与SA和SB钥匙进行合成:
A方和B方将计算结果互相发送给对方:
接下来,A和B分别将得到的计算结果使用自己的私有X,Y值进行幂运算,再进行取模,前面提到幂运算+取模运算相当于合成钥匙,这里也是如此:
至此,非常神奇的时,我们突然发现,A方的计算结果和B方的计算结果相同,这个相同的结果,就是我们进行对称加密时使用的钥匙了!而且,在这个结果的产生过程中,攻击人难以拼凑所有的信息来得到这个钥匙,也就实现了我们前文所说的安全性了,这还要感谢三位机智的密码学家。
在学习的过程中,网上对此种算法的描述比较少,百度百科上说,攻击人可以通过对双方进行两次迪菲-赫尔曼密钥交换算法达到欺骗双方实现中间人攻击的目的,这点我还没有查证所以无法讲解,见谅。
- 参考资料:
百度百科
算法动画图解APP(侵删)
这篇关于迪菲-赫尔曼密钥交换的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!