有人可以用简单的英语给我解释一下Diffie-Hellman密钥交换吗?我在一个非技术新闻页面上读到,Twitter刚刚实现了这项技术,该技术允许两个人在非安全通道的顶部交换加密消息。怎么样(如果这是真的)?

评论

维基百科上有图片说明。

YouTube上有一个(简单易懂的)视频说明:)

我发现该视频有助于理解-youtube.com/watch?v=YEBfamv-_do

我最喜欢的DH视频:youtube.com/watch?v=NmM9HA2MQGI

我发现颜色比喻有缺陷(维基百科和youtube)。将“私人”颜色与另一方的颜色混合不会呈现相同的秘密颜色。实际上是我做的。

#1 楼

Diffie-Hellman是一种在两个人之间生成共享秘密的方式,这种方式使得通过观察通信无法看到该秘密。这是一个重要的区别:在密钥交换期间您不共享信息,而是一起创建密钥。

这点特别有用,因为您可以使用此技术与某人创建一个加密密钥,然后开始使用该密钥加密您的流量。即使记录了流量并在以后进行了分析,也绝对没有办法弄清楚密钥是什么,即使创建密钥的交换可能已经可见。这就是完美的前向机密的来源。以后再分析流量的人都不会闯入,因为该密钥从未保存,从未传输过,也从未在任何地方公开。

它的工作方式相当简单。许多数学与您在公用密钥加密中看到的相同,因为使用了陷门功能。虽然传统上使用离散对数问题(xy mod p业务),但也可以将一般过程修改为使用椭圆曲线密码学。密钥密码学,这不是非对称密码学,因为在交换过程中没有任何东西被加密或解密。但是,它是必不可少的构建块,并且实际上是后来构建非对称加密的基础。

基本思想如下:


我想出一个质数p和一个与p-1互质的数g,然后告诉你它们是什么。相反,您可以计算ga mod p并将结果发送回给我。 (我们将其称为A,因为它来自a)。
我做同样的事情,但是我们将我的秘密编号b和计算出的编号称为B。因此我计算gb mod p并将结果发送给您(称为“ B”)
现在,您以我发送给您的电话号码为准,并对其进行完全相同的操作。这就是Ba mod p。
我对您发送给我的结果进行了相同的操作,因此:Ab mod p。在第4步。现在,它并不是真正的魔术,只是数学,它归结为模指数的奇特属性。具体来说:


(ga mod p)b mod p = gab mod p(gb mod p)a mod p = gba mod p


如果您仔细研究一下,则意味着无论以什么顺序进行幂运算,都将得到相同的答案。因此,我按一个顺序进行,而您按另一个顺序进行。我永远不知道您用来获得结果的秘密数字,您也不知道我曾经使用了什么数字,但是我们仍然得出相同的结果。

那个结果,我们都偶然发现了那个数字4和5是我们的共享密钥。我们可以将其用作AES或Blowfish或任何其他使用共享机密的算法的密码。而且我们可以确定,除了我们以外,没有其他人知道我们共同创建的密钥。

评论


DH是公钥/非对称加密,但不是加密。

– CodesInChaos
13年11月24日在12:15

我认为值得一提的是,这种安全性的原因在于,与常规log(x)不同,模块化log(x)难以计算。否则我们可以只做log_g(A)和log_g(B)来得到a和b。

– BlueRaja-Danny Pflughoeft
13年11月24日19:25



我想您可能还想补充一点,g不仅是任何素数,而且是p的生成器(或原始根)

–TheRookierLearner
13年11月26日在4:40

@TheRookierLearner这个答案是DH的简化解释;为了简单起见,省略了很多重要的细节。这不应被视为实现教程。

– tylerl
13年11月26日在5:57

@ Mero55您不仅要找到A的根,还要找到A,A + p,A + 2p,A + 3p等的根,直到结果为整数。

– kbolino
16年7月7日在2:42

#2 楼

其他答案在解释密钥交换背后的数学方面做得很好。如果您想要更多的图片表示形式,那么Diffie–Hellman密钥交换Wikipedia条目上显示的出色绘画类比无可比拟:





图片属于公共领域

评论


此图像非常适合于解释其功能。我唯一的问题是“如果攻击者知道普通涂料并且知道最终的混合物,他为什么不知道原始颜色?”。答案当然是,这不是他需要知道的颜色,而是实际的原始混合物,并且正如您所提到的,混合物分离非常昂贵。简短地知道这一点的实际数学也将是非常棒的。

–雏鸟
16 Jul 29 '13:49



数学的解释已经在其他地方进行了介绍,但您可以这样想:假设“绘画混合函数”为f(a,b)=(a + b)%1000。您和我宣布“共享的秘密是793”。然后我告诉你f(my_secret,793)=172。我的秘密是什么?注意f(a,f(b,793))== f(b,f(a,793))。 DH使用的实际功能不是那么简单,但是重要的是信息丢失了,并且这个交换属性成立。

– Tim
16-10-22在2:51

颜色示例仅用于说明。显然,计算颜色混合是微不足道的。 DH使用的离散日志问题不是。参见en.wikipedia.org/wiki/Discrete_logarithm。

–sovemp
17年3月28日在17:15



这是使其他人了解基本原理的非常聪明和容易的方法。

– Mubashar
18/12/17在5:37

鲍勃或爱丽丝是通过公开向其他人发送普通涂料来开始的?

– LightCC
19年1月17日在20:44

#3 楼

Diffie-Hellman是一种用于在两方之间建立共享秘密的算法。它主要用作交换加密密钥的方法,以用于AES等对称加密算法。

该算法本身非常简单。让我们假设爱丽丝想与鲍勃建立一个共享秘密。


爱丽丝和鲍勃事先同意质数p和基数g。对于我们的示例,假设p=23g=5
Alice选择一个值为6的秘密整数a并计算A = g^a mod p。在此示例中,A的值为8。
Bob选择一个值为15的秘密整数b并计算B = g^b mod p。在此示例中,B的值为19。
Alice将A发送给Bob,Bob将B发送给Alice。
要获取共享机密,爱丽丝计算s = B^a mod p。在此示例中,爱丽丝获取s=2的值

为了获取共享机密,鲍勃计算s = A^b mod p。在此示例中,Bob获得了s=2的值。该算法是安全的,因为导出a所需的bs的值根本没有通过电线传输。

评论


很好,但您也可以引用它来自Wikipedia。

–华夫饼的疯狂花生
2015年5月4日,2:50

#4 楼

如果您想简单地用英文简单地解释DH,即使是非技术人员也可以容易地理解,有双重锁定的盒子比喻。她用唯一的钥匙打开的挂锁锁住了它。然后,她将盒子寄给鲍勃。
鲍勃收到盒子,放上只有他有钥匙的第二把挂锁,然后寄回爱丽丝。再次给鲍勃。
鲍勃打开了锁,打开了盒子,并可以访问爱丽丝寄给他的秘密。在运输过程中,夏娃从未有机会看到其中的东西并窃取秘密:在这种加密密钥中,该密钥将用于加密爱丽丝和鲍勃的其余通信内容。

评论


现在,这就是我所说的简单的英语解释。爱你的男人。

–user15119
13年11月24日在16:31

虽然是普通英语,但并未描述Diffie-Hellman。它描述了与DH具有明显不同的属性的三遍协议。例如,它需要三遍,而DH仅需要单遍。

– CodesInChaos
13年11月24日在18:21



我认为CodesInChaos会因故意简化的类比而期望很多准确性。这有助于我更好地理解涂料的类比,也有助于我更好地理解更精确的涂料。 (请注意,盒子上的解锁孔太小,无法将饼干从最里面的盒子中取出。这就是我一开始的想法。

– Nanb​​an Jim
16-09-27在22:15

这不是“很多准确性”的问题。上锁的盒子比喻根本不像Diffie Hellman。

– Tim
16-10-22在2:58

DH不会像这样交换秘密,而是生成秘密,但这很有趣

– sivann
18年8月30日在13:02

#5 楼

密钥交换问题

安全连接需要交换密钥。
但是密钥本身需要通过安全连接进行传输。

有两个可能的解决方案:


通过物理开会和共享密钥来交换密钥。这说起来容易做起来难,而第一个这样的实现是Diffie-Hellman方案。属性:


计算f[x](从x)很容易
f[x]求反得到x很难。从SA中提取f[B]

SB中计算f[A]容易br />
DH方案如何工作


Alice给出了一个随机数S。她计算A,并将B发送给Bob。爱丽丝从未公开她的f[A],甚至没有向鲍勃公开。他计算f[B],并将A发送给爱丽丝。鲍勃从未公开过自己的f[A],甚至没有透露给爱丽丝。
爱丽丝使用f[A]A计算B。鲍勃使用f[B]f[B]计算B

正在窃听的Mallory只有SA,因此她很难计算f[B]
爱丽丝和鲍勃现在拥有一个共同的秘密可以用作(或提出)建立安全连接的密钥。

旁注:

Diffie-Hellman计划不提供任何形式的身份验证。它仅允许2个匿名方共享一个公共秘密。但就爱丽丝所知,她可能正在与魔鬼(而不是鲍勃)握手。这就是为什么我们需要至少一个方进行身份验证的原因。
例如:SSL(https),使用PKI(公钥基础结构)对Web服务器进行身份验证,然后建立安全连接(DH )在网站和客户之间。由于网站已通过身份验证,因此客户端可以信任该网站,但是该网站不能信任该客户端。现在,客户端可以在网页上提供自己的身份验证详细信息。

评论


我真的很感谢这里的旁注,它回答了我的一个棘手问题,但无法完全阐明。

– Nanb​​an Jim
16-09-27在22:17

#6 楼

保护数据通过Internet的安全通常需要以两种方式对其进行保护:
完整性-确保没有人可以修改或篡改传输中的数据

使用对称加密提供机密性,并使用消息身份验证代码(MAC)提供完整性。

对称加密和MAC都要求双方都具有相同且秘密的密钥(在这种意义上,“密钥”只是一个数字,转换为二进制)。

问题那么,双方如何在互联网上建立相同的密钥? (或其他任何不安全的媒体)。这就是所谓的“密钥交换问题”。

Diffie-Hellman算法是该问题的解决方案。Diffie-Hellman允许两个各方在不安全的媒体上建立共享秘密。或者,更简单地说。...

想象您和您的朋友站在拥挤的房间里,周围都是可疑的人。假设您和您的朋友需要同意相同的号码,但不希望房间中的其他任何人知道该号码是多少。 Diffie-Hellman允许您和您的朋友巧妙地交换一些数字,然后从这些数字中计算出另一个相同的数字。即使房间中的每个人都听到了正在交换的号码,他们也无法确定您和您的朋友到达的最终号码。

我们可以在下图中看到一个例子。爱丽丝和鲍勃将使用Diffie-Hellman密钥交换来建立共享机密。



任何“听”对话的人只会“听到”中间交换的数字:13629。没有一致的方法来组合这四个数字来获得最终的共享秘密:3却不知道从未共享过的Alice或Bob的Private值(54)之一。

那就是美丽Diffie-Hellman的照片

上面的示例中使用的数字较小,以使数学保持简单。实际上,现代Diffie-Hellman交换中使用的数字的长度(或应该是)至少为2048位-写出大约需要617位数字!


完成后在Diffie-Hellman密钥交换中,双方现在具有相同的值,只有双方都知道。

此值成为可以生成其他密钥的“起点”。

之前,我们提到了对称加密和消息身份验证代码,每个代码都需要一个秘密密钥。好吧,将您的DH共享密钥与其他一些值结合起来,现在您便拥有了所需的加密和MAC密钥。可以根据需要多次执行。

实际上,许多安全协议(SSL / TLS,IPsec等)生成一组密钥来保护每个方向的流量-总共四个密钥(一个方向上的MAC +加密,另一个方向上的MAC +加密)。所有四个键都是从Diffie-Hellman派生的相同初始起始值生成的。

评论


+1为插图样本!你画了这个还是在其他地方选了?如果是这样,您能张贴这张图片的来源吗?

– F. Hauri
1月29日10:58

@ F.Hauri我画了=)。它最初发布在我的博客上:Practicalnetworking.net/series/cryptography/diffie-hellman

–艾迪
1月29日23:54

干得好,做得好!我对进行翻译的消息来源很感兴趣!

– F. Hauri
1月30日7:40



#7 楼

Diffie-Hellman是一种数学算法,用于在两方之间交换共享的秘密。此共享机密可用于加密这两方之间的消息。请注意,Diffie-Hellman算法不提供这两方之间的身份验证。

评论


它缺乏解释,希望您能多解释一些...

–user15119
13年11月24日在2:11

您想要没有数学的英语解释。

–卢卡斯·考夫曼(Lucas Kauffman)
13年11月24日在8:56

对于HTTPS连接,身份验证由SSL证书框架处理。您可以确定(正在尽可能)通过验证和信任与目标方进行通信。 SSL连接的握手/协商在开销方面很昂贵。 DH算法允许双方安全地协商对称密钥以进行加密/解密,这效率更高。

– k1DBLITZ
2014年11月25日15:53



#8 楼

当谈到此密钥交换的说明时,Computerphile的Diffie-Hellman视频绝对令人赞叹。他们的视频“ Secret Key Exchange(Diffie-Hellman)”相当详尽,但是他们对DH背后的数学原理的解释是迄今为止我在任何媒介中遇到的最好的例子(而且肯定比我个人可以为您写的更好)这里)。在这里观看。

#9 楼

Diffie-Hellman的目标:通过公开渠道在两方之间秘密共享一个号码。

首先从学校回忆这些幂规则:(xᵃ)ᵇ=xᵃᵇ=xᵇᵃ例如(2³)⁴=(2⁴)³=4096。这个想法是,如果Alice将xxᵃ发送给Bob,则Bob和其他任何人都无法计算a。说2³是什么很容易,但是给定8很难说要获得2的哪个幂才能得到8。一个任何人都可以知道的数字x,比如说2

Alice生成a=3并将2³=8发送给Bob
Bob生成数字b=4并将2⁴=16发送给Alice
Alice计算16³=4096并鲍勃计算8⁴=4096



所以爱丽丝和鲍勃都知道4096,但是没人知道ab,所以不能计算xᵃᵇ。

实际上,计算对数并不那么复杂。但是一旦包含了模块化算法,它就会变得复杂。

#10 楼

用简单的英语而不用上面答案中的任何数学表达式,Diffie-Hellman Key Exchange是Diffie和Hellman的发明。

本发明是关于两个人就同一号码达成一致的一种方式。然后,这个共同商定的号码将用于两个人的任何目的。例如,遵循DH Key Exchange步骤之后,最终结果是两个人现在到达的号码相同。两个人都无法控制这个公用号码。 DH Key Exchange发明仅保证两个人都能到达一个共同的号码。一旦达到该通用数字,示例用法就是使用该数字转发字母。例如,如果公用数字为5,则在发送消息时字母A变为F,字母B变为G,依此类推。然后,接收消息的其他人将向后退消息的每个字母以进行阅读。

Person-Aperson-B不能只是大声说话以商定通用号码,因为第三个person-C会听到。如果person-C知道约定的号码,那么他也可以阅读该秘密消息。 DH Key Exchange总是要求总是有第三个person-C可以收听person-Aperson-B之间的消息,而这种三人场景是本发明的全部目的,即如何使person-C无法读取person-Aperson-B之间的秘密编码消息。

DH Key Exchange的第一步中,person-Aperson-B将来回发送一些数字,并且在此早期阶段,person-C可以读取这些第一条消息。在第二阶段,person-Aperson-B将发送person-C无法读取的加密消息。尽管person-C可以在第一步中听到初始消息,但person-C无法到达person-Aperson-B现在拥有的约定编号。

Diffie和Hellman于2015年因这项发明获得了Turing Award

#11 楼

我曾经写过这本书,只是我从未发表过的演讲概念。它使用高中毕业后每个人都可以做的数学水平演示了一些真实的密码学。
嗨!让我们设置一个加密通道。我将把我的钥匙发送给你,你也把你的钥匙发送给我,然后我们就可以私下交谈了。每个人都能听到我们的声音吗?是的,那没问题!

我们可以使用Diffie-Hellman。只需考虑一个随机数,然后将该随机数的幂
提高5即可。将结果除以23,然后取余数。给我原来的随机数,您应该保密,其他数字都是公众所知。

您剩下的是8吗?好的。我的余数是10。现在,将我的余数再次提高到您的秘密随机数的幂,再除以23,得到余数。同样的事情,轻松自在。我将对您的号码和我的秘密随机数执行相同的操作。

您得到了结果吗?太好了,我也是!我知道您像我一样有6岁,但是这个房间里没有其他人可以算出这个。他们可以尝试所有可能的组合,直到找到与他们听到的声音相匹配的随机数(您身边的8个,我身边的10个),但是没有比尝试所有可能性更有效的方法了。我们可以将结果6用作密码。尽管听到了交流,但没人知道我们使用的密码。但这是一个非常弱的密码。下次,我们应该选择更大的数字,并使用计算器来创建更长,更强的密码。我知道这不是某人
否则当您告诉我您的电话号码是8时,因为我可以看到您的嘴唇在动。在互联网上,有人可以伪装成对方并为我们提供假号码,从而对此设置攻击。我们如何防止这些攻击是另一天的话题。