Diffie–Hellman 密钥交换

两个人在互联网上去传递机密信息,需要双方共用一个相同的密钥,而互联网是一个不安全的环境,所以双方如何安全的互换秘钥就成了大问题。Diffie–Hellman 密钥交换方法就是一套解决方案,可以让大家在不安全的通道内安全的互换密钥,听起来是不是很神奇呢?本文来介绍其中的原理。

单向函数

首先从一个简单的知识点出发,聊聊什么是单向函数。

所谓单向,指的是正向操作很容易,反向却很难。举个例子在,给出两种颜色,蓝色和黄色,正向操作是把两种颜色混到一起,这样可以得到的是绿色,这个很容易,任何人都可以做到。但是如果只知道混合后的颜色,很难去得到它是由那两种颜色混合而成的,也就是反向操作很难。

数学上的单向函数道理也类似。例如离散对数问题,正向很容易算出结果,但是根据输出结果反推输入就非常的难。具体 Diffie-Hellman 密钥交换过程中如何使用离散对数的,维基百科上有详细的介绍,我们这里不展开了。

单向函数好比一把锁,而 Diffie–Hellman 密钥交换,就是基于这把锁来实现的。

逻辑

下面来介绍一下整个交换过程的逻辑顺序,如果用真正的单向函数去讲解就会涉及到很多数学概念,比较不直观,所以我们还是用混色过程来讲解。

首先,通道是不安全的。Alice 和 Bob 想要共享一个颜色,但是他们之间的通信通道是互联网,是一个不安全的通道,也就意味着 Alice 和 Bob 互相传递的任何颜色,窃听者 Eve 都可以看到。那么在这个前提下,如何保证 Eve 不知道共享的颜色是什么呢?

具体过程是这样的。Alice 和 Bob 先共享一个公开色,例如黄色,使用互联网传递这个颜色就相当于公开了这个颜色,所以 Eve 也知道这个黄色。然后,Alice 和 Bob 各自选择了只有自己知道的一个机密色。机密色和公开色混合后,可以得到一个混合色,Alice 和 Bob 把各自得到的混合色互相交换一下,Eve 虽然可以拿到这两个混合色,但是也无法知道 Alice 和 Bob 的机密色分别是什么。下一步才是整个过程的核心,Alice 和 Bob 把自己的机密色和对方发过来的混合色再混一下得到一种新混合色。不知道你反应过来没有,两个人得到的混合色是一种颜色。这是因为 Alice 和 Bob 其实都是混合了相同的三种颜色,最终得到了混合色,只不过顺序有所差别。而 Eve 手里的各种颜色也不少,但是却无法混合出最终 Alice 和 Bob 手里的颜色。

最终,Alice 和 Bob 共享了一个颜色,可以作为一个安全的秘钥来用,因为 Eve 是不知道这个颜色是什么的。

跟 RSA 的异同

这次聊的 Diffie–Hellman 秘钥交换跟RSA公钥加密算法都在当代密码学发展史上占有重要的地位。

首先,二者是不同的算法。RSA 有两套算法,一套用来进行非对称加密,另一套是数字签名算法。而 Diffie–Hellman 秘钥交换主要就是用来交换秘钥的,所以使用场景上跟 RSA 有明显的不同。

但是,二者也是有相同点的,因为二者都可以用来在不安全通道下传递秘钥。RSA 的非对称加密算法其实也不太适合直接用来加密大段信息,通常的使用方式也是在双方之间传递一下共用秘钥,然后通过共用秘钥来建立对称加密的通道,所以从这个角度讲,跟 Diffie–Hellman 秘钥交换的目的一致。

这就是二者的异同了。

总结

这节聊 Diffie–Hellman 密钥交换,主要内容就是这些。总之, Diffie–Hellman 密钥交换,是一套让通信双方在不安全的通道中互换秘钥的一种方案,从此人们在互联网上进行加密通信,就可以不需要事先用其他渠道来互换秘钥了。

参考: