有人可以用简单的英语解释一下Diffie-Hellman 密钥交换算法吗?我读到 Twitter 已经实现了这项技术,它允许两方在非安全通道之上交换加密消息。这是如何运作的?
简单英语的“Diffie-Hellman 密钥交换”
Diffie-Hellman 是一种在两个人之间生成共享秘密的方式,通过观察通信无法看到秘密。这是一个重要的区别:您不是在密钥交换期间共享信息,而是一起创建密钥。
这特别有用,因为您可以使用此技术与某人创建加密密钥,然后开始使用该密钥加密您的流量。即使流量被记录下来并在以后进行分析,也绝对无法找出密钥是什么,即使创建它的交易所可能已经可见。这就是完美前向保密的来源。以后分析流量的任何人都不能闯入,因为密钥从未保存过,从未传输过,也从未在任何地方可见。
它的工作方式相当简单。许多数学与您在公钥加密中看到的相同,因为使用了陷门函数。虽然传统上使用离散对数问题(x y mod p业务),但一般过程也可以修改为使用椭圆曲线密码学。
但即使它使用与公钥加密相同的基本原理,这也不是非对称加密,因为在交换过程中没有任何东西被加密或解密。然而,它是一个重要的组成部分,实际上是后来构建非对称加密的基础。
基本思想是这样的:
我想出了一个质数p和一个与p-1互质的数g并将这些数字告诉你。(仅供参考:p代表“Prime”,g代表“发电机”)
然后,您选择一个秘密号码 ( a ),但您不告诉任何人。相反,您计算并将结果发送回给我。(我们称它为“ A ”,因为它来自a)。ga mod p
我做同样的事情,但我们将调用我的秘密数字b和计算出来的数字B。所以我计算并将结果发送给您(称为“ B ”)。 gb mod p
现在,你拿着我发给你的号码,用它做同样的操作。所以这是:。 Ba mod p
我对你发给我的结果做了同样的操作,所以:. Ab mod p
这里的“魔法”是我在第 5 步得到的答案与你在第 4 步得到的数字相同。现在这并不是真正的魔法,它只是数学,它归结为模指数的奇特属性。具体来说:
(g a mod p) b mod p = g ab mod p
(g b mod p) a mod p = g ba mod p
如果您仔细检查,这意味着无论您以哪种顺序进行幂运算,您都会得到相同的答案。所以我以一种顺序进行,而您以另一种顺序进行。我永远不知道你用什么秘密号码来得到结果,你也不知道我用了什么号码,但我们仍然得到相同的结果。
结果,我们在第 4 步和第 5 步中偶然发现的那个数字就是我们的共享密钥。我们可以将其用作 AES 或 Blowfish 或任何其他使用共享机密的算法的密码。我们可以确定,除了我们之外,没有其他人知道我们共同创造的钥匙。
仅供参考:DH 参数
步骤 1 中的数字(p和g)是“Diffie-Hellman 参数”。您通常会提前计算好这些,因为这需要一段时间。这些不是秘密,因此它们往往会被重复使用。很长一段时间以来,许多服务器都只使用相同的p和g值,而不是特别好的值,这导致了一些混乱(被命名为Logjam),如果您有兴趣,可能会很有趣。
Diffie-Hellman 是一种用于在两方之间建立共享秘密的算法。它主要用作交换加密密钥的方法,用于对称加密算法(如 AES)。
算法本身非常简单。假设 Alice 想与 Bob 建立一个共享秘密。
- Alice 和 Bob事先就素数
p
和底数达成一致。g
对于我们的示例,我们假设p=23
和g=5
。 - Alice 选择一个
a
值为 6 的秘密整数并计算A = g^a mod p
。在此示例中,A 的值为 8。 - Bob 选择一个秘密整数 b,其值为 15 并计算
B = g^b mod p
。在此示例中,B 的值为 19。 - Alice 发送
A
给 Bob,Bob 发送B
给 Alice。 - 为了获得共享秘密,Alice 计算
s = B^a mod p
。在这个例子中,Alice 获得了s=2
- 为了获得共享秘密,Bob 计算
s = A^b mod p
. 在此示例中,Bob 获得 的值s=2
。
该算法是安全的,因为导出所需的a
和的值根本不会通过网络传输。b
s
如果你想要一个更简单、通俗易懂的 DH 英文解释,即使是非技术人员也能轻松理解,那就是双锁盒类比。
爱丽丝把一个秘密放在一个盒子里,然后用她唯一可以打开的钥匙把它锁起来。然后她把盒子寄给鲍勃。
Bob 收到了盒子,放了第二把只有他有钥匙的挂锁,然后把它寄回给 Alice。
爱丽丝打开她的锁并将盒子第二次寄给鲍勃。
Bob 取下他的锁,打开盒子,并可以访问 Alice 发送给他的秘密。
由于盒子在运输过程中总是至少有一个锁,所以 Eve 永远没有机会看到里面的东西并窃取秘密:这是一个加密密钥,将用于加密 Alice 和 Bob 通信的其余部分。