到达此处,您已经参与了Diffie-Hellman密钥交换! (或至少是一个变体)。 Diffie-Hellman是一种在两个端点(各方)之间建立共享秘密的方法。
该算法背后的数学实际上很简单。 我将先解释我们要做的事情,然后再解释我们如何实现它。
假设爱丽丝(Alice)和鲍勃(Bob)希望彼此交流,而约翰不知道他们在说什么或发送什么。 爱丽丝寄给鲍勃的任何东西,约翰都会收到,同样,鲍勃寄给爱丽丝的任何东西,约翰也会收到。 那么,在约翰不理解的情况下,爱丽丝和鲍勃如何互相发送任何东西? 那就是Diffie-Hellman出现的地方。
我将直接研究它的数学原理,但是可以用直观的方式进行解释,您可以在家中用一些涂料自己进行测试。
首先,爱丽丝(Alice)和鲍勃(Bob)公开决定了两个素数g和n (约翰也会得到一个副本)。 通常, g是一个很小的质数, n很大,通常为2000或更常见的4000位长。 所以现在爱丽丝,鲍勃和约翰都知道这些数字。
现在,爱丽丝秘密决定另一个数字a 。 鲍勃秘密地决定了数字b 。 爱丽丝和鲍勃都不会发送这些号码,它们会自己保留。 爱丽丝执行计算g ^ a mod n ,我们称它为A ,因为它来自a 。 然后,Bob执行g ^ b mod n ,我们将其称为B。
爱丽丝(Alice)发送鲍勃( A) ,鲍勃(Bob)发送爱丽丝( B) 。 注意John现在有4个数字, A,B,g和n,但没有a或b 。 最后,换个心机把戏。 爱丽丝接受鲍勃的B并执行B ^ a mod n 。 类似地,鲍勃采用爱丽丝的A并执行A ^ b mod n 。 这导致相同的数字,即B ^ a mod n = A ^ b mod n 。 他们现在有一个共享号码。 请注意,John如何无法从他得到的数字中弄清楚这些数字是什么。
实际上,他可以并为其命名,称为解决离散对数问题。 如果我们使n很大,这将成为一个计算上非常繁重的问题,根本就没有时间去弄清楚。 John将不得不从A或B中找出a或b ,这太浪费时间了。
那么,爱丽丝和鲍勃可以用刚刚创建的这个密钥做什么呢? 那么他们可以使用它来开始加密彼此发送的消息。 一个非常简单的示例,因为它极其不安全,因此不应该在任何地方使用,它是使用移位密码(凯撒密码)加密其消息的,其中移位值由新生成的密钥确定。 爱丽丝(Alice)和鲍勃(Bob)都可以对消息进行加密和解密,因为他们知道移位值,但是约翰(John)没有密钥,因此不能。
哦,如果您要尝试使用油漆,请对g和n使用单一颜色而不是两种颜色,并且只要执行计算,就可以混合使用油漆。
如果您对此感兴趣,请访问www.pyler.io ,我们在这里提供了出色的在线Python课程,使您立即从入门者那里学习!
![](https://i-blog.csdnimg.cn/blog_migrate/b7a6d71398fec3838d2ce20ef08f43d3.png)
From: https://hackernoon.com/algorithms-explained-diffie-hellman-1034210d5100