基于Diffie-Hellman协议 的安全密钥交换的实现原理

来源:shiyanbar.com,仅作为笔记,侵删 

用Diffie-Hellman协议进行密钥交换的过程简述如下:
        选取两个大数p和g并公开,其中p是一个素数,g是p的一个模p本原单位根(primitive root module p),所谓本原单位根就是指在模p乘法运算下,g的1次方,2次方..…(p-1)次方这p-1个数互不相同,并且取遍1到p-1;

对于Alice(其中的一个通信者),随机产生一个整数a,a对外保密,计算Ka=g个a modp,将Ka发送给Bob;

对于Bob(另一个通信者),随机产生一个整数b,b对外保密,计算Kb=gb mod p,将Kb发送给Alice;

在Alice方面,收到Bob送来的Kb后,计算出密钥为:key=Kb^a mod p=(g^b)^a=g^(b*a)mod p;

对于Bob,收到Alice送来的Ka后,计算出密钥为:key=Ka ^b mod p=(g^a)^b=g^(a*b)mod p。
攻击者知道p和g,并且截获了Ka和Kb,但是当它们都是非常大的数的时候,依靠这四个数来计算a和b非常困难,这就是离散对数数学难题。

        要实现Diffie-Hellman密钥交换协议,需要能够快速计算大数模幂,在模幂算法中,仍需计算大数的乘法和模运算,所以整个过程需要三个算法:高精度乘法,高精度除法(用来同时求出一个大数除以另一个大数的商和余数),快速模幂算法。
高精度的乘法和除法可以程序模拟手算。快速模幂算法也是从手算中总结出规律来,例如:
5/8=(5^2)^4=(25)^4=(25^2)^2=(625)^2,

这样,原来计算58需要做8次乘法,而现在则只需要三次乘法,分别是:52,252,6252。这就是快速模幂算法的基础。将算法描述出来,那就是:
算法M:输入整数a,b,p,计算ab mod p:

M1.初始化c=1
M2.如果b为0,则c就是所要计算的结果。返回c的值。算法结束。
M3.如果b为奇数,则令c=ca mod p,令b=b-1,转到M2。
M4.如果b为偶数,则令a=a a mod p,令b=b/2,转到M2。

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