实验目的
通过模拟两个客户之间的加密会话过程,理解安全密钥交换的重要性,理解基于Diffie-Hellman协议的安全密钥交换的原理和流程。
实验原理
用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 mod p,将Ka发送给Bob;
对于Bob(另一个通信者),随机产生一个整数b,b对外保密,计算Kb = g^b 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,这样,原来计算5^8需要做8次乘法,而现在则只需要三次乘法,分别是:5^2, 25^2, 625^2。这就是快速模幂算法的基础。将算法描述出来,那就是:
算法M:输入整数a,b,p,计算a^b mod p:
M1.初始化c = 1
M2.如果b为0,则c就是所要计算的结果。返回c的值。算法结束。
M3.如果b为奇数,则令c = c * a mod p,令b = b - 1,转到M2。
M4.如果b为偶数,则令a = a * a mod p,令b = b / 2,转到M2。
实验过程
1.打开实验环境,在单机上执行实验程序,双击打开需要运行的程序.。如图1所示
‘
2.弹出界面如图,分别为客户A和客户B。如图2所示
3.在客户端A输入密码,如123456,生成公钥。如图3所示
4.客户端A点击计算并发送X。如图4所示
5.在客户端B点击计算并发送出Y,则B利用A的公钥和X计算并发送出Y。如图5所示
6.客户端A获取到Y之后,在两个客户端都可以生成相同的会话密钥。
7.在客户端A输入要发送的内容。如图7所示
8.点击加密,发送。B即可收到密文。如图8所示
9.客户端B点击解密,得到明文。如图9所示