概述
两个人在互联网上去传递机密信息,需要双方共用一个相同的密钥,而互联网是一个不安全的环境,所以双方如何安全的互换秘钥就成了大问题。Diffie–Hellman 密钥交换方法就是一套解决方案,可以让大家在不安全的通道内安全的互换密钥。
离散对数问题
我们经常会听见求解离散对数是很困难的事情,但是什么是离散对数?
先看一下对数是什么:
i
就是以a
为底的b
的对数,记做
而在模运算中也有类似的函数,是
设p
是一个素数,a
是p
的一个本原根(即生成元),则 p
后产生出1
到p-1
的数,每个值仅出现一次。因此对任意的1<=b<=p-1
,都存在唯一的i
,使得 i
就是模p
下以a
为底b
的指标,记做
举个例子,p = 11, a = 2;
则
总的来说:
当给定大素数 p, 本原根 a,以及一个 b时求解 i 是非常困难的
Diffie-Hellman密钥交换
Diffie-Hellman密钥交换就是利用求解离散对数的困难性来设计的
Diffie-Hellman密钥交换的原理
- 通信双方A和B约定一个大素数p,和一个本原根(即生成元)g,这都是可以公开的,被别人知道了也没关系
- A自己随便取一个a,B也自己随便取一个b,a和b是不可以泄漏的,只有本人知道
- 然后A计算
%p,B计算 %p,并进行交换,交换的结果也可以公开 - A再求
,B再求 ,会发现 ,记做 K
,这个K
就可以作为两个人独享的共享密钥
安全性问题
我们从外人的角度来看看如何获取他们的密钥
已知的是p,g,aa,bb
,想得K
,就需要知道a
或者b
,但是我们上面解释了,求a,b
的问题是一个求解离散对数的问题,可以认为在大素数的情况下是不可解的,所以就不能侦破K
,所以是安全的