Diffie-Hellman 密钥交换技术(内含多方密钥交换)

Diffie-Hellman 密钥交换技术

文章目录

  • Diffie-Hellman 密钥交换技术
    • 大体介绍
      • 密钥交换(key exchange)
      • 密钥分配
    • 加解密解释
    • 三方或者多方Diffie-Hellman
  • 参考文献

英文名Diffie-Hellman key exchange(简称DH)。
传统上,双方之间的安全加密通信要求他们首先通过一些安全的物理渠道来交换密钥。
Diffie-Hellman密钥交换方法允许双方通过一个不安全的渠道直接建立一个共享的密钥。
这个密钥可以通过 对称密钥被用来加密接下来的通信。

大体介绍

Diffie-Hellman算法是一种密钥交换算法。(什么是密钥交换算法呢?请看下文,不想看的可以跳过。

密钥交换(key exchange)

The key exchange problem describes ways to exchange whatever keys or other information are needed for establishing a secure communication channel so that no one else can obtain a copy.

Historically, before the invention of public-key cryptography (asymmetrical cryptography), symmetric-key cryptography utilized a single key to encrypt and decrypt messages. For two parties to communicate confidentially, they must first exchange the secret key so that each party is able to encrypt messages before sending, and decrypt received ones. This process is known as the key exchange.

Diffie-Hellman算法能够用作密钥分配(什么是密钥分配,看下一段,不想看的可以跳过。

密钥分配

从英文来看,密钥分配也称密钥分发。

  • 对于对称密码体制来说,双方在对消息进行加解密之前,彼此都要拿到加解密的私钥,这就是密钥的分发。Diffie-Hellman就能够通过彼此发送消息确定最终的私钥,这也就达到了密钥分发的目的。所以说Diffie-Hellman算法可以用作密钥分配。所以,Alice和Bob能够用Diffie-Hellman算法产生对称密码中的私钥。注意:Diffie-Hellman算法只是用来协商密钥的,不能用于加密或者解密消息。
  • 对于公钥密码体制来说,暂不研究。

根据stackexchange上的介绍,密钥分配和密钥交换的差别非常小,非常小,所以我们在这里就姑且看成是相同的概念吧。

也就是说Diffie-Hellman算法的最终目的是让帮助一帮人在“大庭广众”之下协商出一个最终的密钥出来。虽然在”大庭广众之下“,他们仅仅会让我们看到过程,最终协商出来的密钥只有他们自己知道。最初他们每个人心里都有一个秘密的数字,这个东西我们是不知道的。我们仅仅知道他们的过程,所以他们最终协商出来的密钥,我们也是不知道的。

下面是Wiki的解释:
Diffie-Hellman密钥交换在双方之间建立了一个共享的密钥,这个共享的密钥可以被用来在一个公开的网路中交换数据。下方的图示通过颜色展示了密钥交换的大致思路。
Diffie-Hellman 密钥交换技术(内含多方密钥交换)_第1张图片
首先假设双方分别是Alice和Bob,他们就一个随机的初始的颜色达成了一致。这个颜色不需要被保密,但是每一次要不一样。在这个例子中,这个初始的颜色是黄色。然后他们两个人每一个人选择一个秘密的颜色,Alice只知道Alice的颜色,其他任何人都不知道Alice选的是什么颜色,Bob同理。在这个例子中,Alice选择的是红色,Bob选择的是蓝绿色。这个过程的关键部分是Alice和Bob每个人将他们自己的秘密颜色和他们对方彼此共享的颜色(初始的颜色即黄色)混合在一起,导致了分别是orang-tan色,和浅蓝色。他们公开的将混合之后的颜色进行交换。最终,他们每一个人将他们从对方收到的颜色和他们自己的private color进行混合。这个结果就是最终的混合颜色。在这个例子中是黄褐色。这个颜色和对方的颜色是一致的。

如果某个第三方听到了这个交换,他就会知道公共的颜色(黄色)和第一个混合的颜色(orange-tan和浅蓝色),但是对这个第三方来说,确定最终的秘密颜色(黄褐色)在计算上是很困难的。事实上,当在使用大的数字而不是颜色时,这个行为需要大量的计算。这个行为即使是现代超极计算机都是不可能在一个合理的时间内完成的。

加解密解释

Diffie-Hellman 密钥交换技术(内含多方密钥交换)_第2张图片

下面是Wiki的解释:
这个协议的最简单最原始的实现使用的是multiplicative group of integers p, p是一个素数。g是primitive root modulo. 之所以要选择这样的两个值是为了产生的结果共享密钥可以是取到从1,p-1的任何一个值。下面是协议的例子。公开的用蓝色表示,秘密的用红色表示。
Diffie-Hellman 密钥交换技术(内含多方密钥交换)_第3张图片
Alice和Bob已经达到了相同的值s,因为在mod p下,
A b m o d   p = g a b m o d   p = g b a m o d   p = B a m o d   p A^b mod\ p = g^{ab} mod\ p = g^{ba}mod\ p = B^a mod\ p Abmod p=gabmod p=gbamod p=Bamod p

三方或者多方Diffie-Hellman

Diffie-Hellman 密钥交换技术(内含多方密钥交换)_第4张图片
下面是Wiki的解释:
Diffie-Hellman密钥协商不仅仅限于两方。通过执行协商协议的迭代和交换中间数据,任意多个用户都可以参与协商中。
举个例子,Alice, Bob, and Carol可以按照下面的方式参与Diffie-Hellman协议。所有的运算都是模p的运算。
1.The paraties agree on the parameters p and g.
2.The parties generate their private keys, named a, b, and c.
3.Alice computes g a g^a ga and sends it to Bob.
4.Bob computes ( g a ) b = g a b (g^{a})^{b} = g^{ab} (ga)b=gab and sends it to Carol.
5.Carol computes ( g a b ) c = g a b c (g^{ab})^{c} = g^{abc} (gab)c=gabc and uses it as her secret.
6.Bob computes g b g^b gb and sends it to Carol.
7.Carol computes ( g b ) c = g b c (g^b)^{c} = g^{bc} (gb)c=gbc and sends it to Alice.
8.Alice computes ( g b c ) a = g b c a = g a b c (g^{bc})^{a} = g^{bca} = g^{abc} (gbc)a=gbca=gabc and uses it as her secret.
9.Carol computes g c g^c gc and sends it to Alice.
10.Alice computes ( g c ) a = g c a (g^c)^{a} = g^{ca} (gc)a=gca and sends it to Bob.
11.Bob computes ( g c a ) b = g c a b = g a b c (g^{ca})^b = g^{cab} = g^{abc} (gca)b=gcab=gabc and uses it as his secret.
一个窃听者能够看到 g a g^a ga, g b g^b gb, g c g^c gc, g a b g^{ab} gab, g a c g^{ac} gac g b c g^{bc} gbc, 但是不能使用这些量的任何结合来高效地重新产生 g a b c g^{abc} gabc.

参考文献

[1] https://en.wikipedia.org/wiki/Diffie–Hellman_key_exchange#Public_key
[2] 应用密码学:协议、算法与C源程序

你可能感兴趣的:(密码学)