Diffie-Hellman算法

Diffie-Hellman算法是Whitefield Diffie和Martin Hellman在1976年公布的一种秘钥交换算法,它是一种建立秘钥的方法,而不是加密方法,所以秘钥必须和其他一种加密算法结合使用。这种秘钥交换技术的目的在于使两个用户安全的交换一个秘钥一遍后面的报文加密。

Diffie-Hellman密钥交换算法的有效性依赖于计算离散对数的难度。

简言之,可以如下定义离散对数:

首先定义一个素数p的原根a,a的各次幂从1 到p-1产生所有整数根,也就是说,如果a是素数p的一个原根,那么数值

                                                       a mod p, a2 mod p,…,ap-1 mod p

是各不相同的整数,并且以某种排列方式组成了从1到p-1的所有整数。

对于一个整数b和素数p的一个原根a,可以找到惟一的指数i,使得

                                                             b=a^i mod p, 0<=i<=p-1

指数i称为b的以a为基数的模p的离散对数或者指数。该值被记为inda ,p(b)。

基于此背景知识,可以定义Diffie-Hellman密钥交换算法。该算法描述如下:

 

1、有两个全局公开的参数,一个素数q和一个整数a,a是q的一个原根。

2、假设用户A和B希望交换一个密钥,

用户A选择一个作为私有密钥的随机数XA

类似地,用户B选择一个私有的随机数XB

3、用户A产生共享秘密密钥的计算方式是K = (YB)^XA mod q。

同样,用户B产生共享秘密密钥的计算是K = (YA)^XB mod q。

这两个计算产生相同的结果:

              K = (YB)XA modq

                = (aXB modq)XA mod q

                = (aXB)XA modq                  (根据取模运算规则得到)

                = aXBXA modq

                = (aXA)XB modq

                = (aXA modq)XB mod q

                = (YA)XB modq

所以 (YB)XA modq = K =(YA)XB modq

因此相当于双方已经交换了一个相同的秘密密钥。

4、因为XA和XB是保密的,一个敌对方可以利用的参数只有q、a、YA和YB。因而敌对方被迫取离散对数来确定密钥。例如,要获取用户B的秘密密钥,敌对方必须先计算

               XB = inda ,q(YB)

然后再使用用户B采用的同样方法计算其秘密密钥K。

Diffie-Hellman密钥交换算法的安全性依赖于这样一个事实:虽然计算以一个素数为模的指数相对容易,但计算离散对数却很困难。对于大的素数,计算出离散对数几乎是不可能的。

你可能感兴趣的:(信息安全)