DH密钥交换(Diffie–Hellman key exchange)算法笔记

注意:只是我的理解,可能有不正确的地方算法

下文中^表明乘方运算,例如2^3=2*2*2=6,参考:http://zh.wikipedia.org/wiki/%E5%86%AA安全

%表明模运算,例如5%3=2,参考:http://zh.wikipedia.org/wiki/%E6%A8%A1%E9%99%A4优化

DH密钥交换算法的做用是使通讯双方能够在不安全的通道中创建一个相同的密钥,用于加密通讯。加密

基本原理示例:spa

一、通讯方A和通讯方B约定一个初始数g,g是公开的,如g=5ip

二、A生成一个随机数a,a是保密的,如a=6get

三、A计算g^a发送给B,g^a=5^6原理

四、B生成一个随机数b,b是保密的,如b=15随机数

五、B计算g^b发送给A,g^b=5^15通信

六、A接收到g^b后,再使用保密的a,计算(g^b)^a=g^(a*b)=5^(6*15)

七、B接收到g^a后,再使用保密的b,计算(g^a)^b=g^(a*b)=5^(6*15)

八、这样通讯方A和B获得一个相同的“密钥”g^(a*b)=5^(6*15)

整个通讯过程当中g、g^a、g^b是公开的,但因为g、a、b都是整数,经过g和g^a获得a仍是比较容易的,b也是如此,因此最终的“密钥”g^(a*b)仍是能够被计算出来的。因此实际的过程还须要在基本原理上加入新的计算——模运算

一、通讯方A和通讯方B约定一个初始数g,如g=5,一个质数p,如p=23,g和p是公开的

二、A生成一个随机数a,a是保密的,如a=6

三、A计算g^a%p发送给B,g^a%p=5^6%23=8

四、B生成一个随机数b,b是保密的,如b=15

五、B计算g^b%p发送给A,g^b%p=5^15%23=19

六、A接收到g^b%p后,再使用保密的a,计算(g^b%p)^a%p=19^6%23=2

七、B接收到g^a%p后,再使用保密的b,计算(g^a%p)^b%p=8^15%23=2

八、这样通讯方A和B获得一个相同的密钥:2

(g^b%p)^a%p=(g^a%p)^b%p的证实:

若是a=2:

(g^b%p)^a%p=(g^b%p)^2%p=(g^b-n*p)^2%p=(g^(2*b)-2*g^b*n*p+(n*p)^2)%p=g^(2*b)%p

能够看出(g^b-n*p)^2展开后除g^(2*b)外,其它都是p的倍数,因此整个算式的结果是g^(2*b)%p

同理对(g^b-n*p)^a展开后除g^(a*b)外,其它都是p的倍数,因此整个算式的结果是g^(a*b)%p

一样能够得出(g^a%p)^b%p=g^(a*b)%p

因此(g^b%p)^a%p=(g^a%p)^b%p

整个通讯过程当中g、p、g^a%p、g^b%p是公开的,这时经过g、p、g^a%p获得a比较难,一样经过g、p、g^b%p获得b比较难,因此最终的密钥是比较安全的。

以g=五、p=2三、g^a%p=8计算a为例,a=log(5, (8+23*n)),这个只能将n的可能值逐个带入公式试验才能获得a的值。若是a、p是比较大的数那么计算更加困难。

若是注意的是,为了防止应用优化算法计算上述问题,质数p不是随便选择的,须要符合必定的条件。随机数a、b的生成算法也必需注意,应使结果尽量随机,不能出现可预测的规律,不然会使破解变的容易。

经过上述计算过程也能够看出DH算法不只能够应用在2方通讯的状况,若是多方通讯,也可使用该算法。

DH密钥交换算法没法验证对方身份,因此DH密钥交换算法不能抵御中间人攻击(MITM,Man-in-the-middle attack)。

参考:

wiki: http://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange

相关文章
相关标签/搜索