Diffie-Hellman密钥交换
D-H算法的有效性依赖于计算离散对数的困难性。
对任意整数b和素数p的本原根 α \alpha α,我们可以找到唯一的指数,使得
b ≡ α i m o d p 0 ≤ i ≤ p − 1 b\equiv \alpha ^imodp\quad \quad\quad 0\leq i \leq p-1 b≡αimodp0≤i≤p−1
则,通过b,计算i比较困难。
密钥交换过程:
前提,公开素数q和其本原根 α \alpha α。用户A和用户B
1、用户A选择一个随机整数 X A X_A XA, X A < q X_A< q XA<q,并计算 Y A = α X A m o d q Y_A=\alpha ^{X_A}mod q YA=αXAmodq,保持 X A X_A XA私密;
2、用户B选择一个随机整数 X B X_B XB, X B < q X_B<q XB<q,并计算 Y B = α X B m o d q Y_B=\alpha ^{X_B}mod q YB=αXBmodq,保持 X B X_B XB私密;
3、用户A和用户B交换 Y A , Y B Y_A,Y_B YA,YB;
4、用户A计算私密钥K= Y B X A m o d q {Y_B}^{X_A}modq YBXAmodq,用户B计算私密钥 K = Y A X B m o d q K={Y_A}^{X_B}modq K=YAXBmodq
显然: K = Y B X A m o d q = ( α X B m o d q ) X A m o d q K={Y_B}^{X_A}modq={(\alpha ^{X_B}mod q)}^{X_A}mod q K=YBXAmodq=(αXBmodq)XAmodq
= ( α X B ) X A m o d q ={(\alpha ^{X_B})}^{X_A}modq =(αXB)XAmodq
= ( α X B X A ) m o d q = ( α X A ) X B m o d q ={(\alpha ^{X_BX_A})}modq={(\alpha ^{X_A})}^{X_B}modq =(αXBXA)modq=(αXA)XBmodq
= ( α X A m o d q ) X B m o d q = Y A X B m o d q ={(\alpha ^{X_A}mod q)}^{X_B}mod q={Y_A}^{X_B}modq =(αXAmodq)XBmodq=YAXBmodq
单纯的D-H密钥交换不能抵抗中间人攻击。
椭圆曲线密码实现D-H密钥交换
用户A和用户B交换密钥
1、全局公开参数
E p ( a , b ) E_p(a,b) Ep(a,b) 参数为a、b和q的椭圆曲线,其中q是素数或形如 2 m 2^m 2m的整数
G 阶为n的椭圆曲线上的点,其中n是大整数
2、用户A 选择私钥 n A n_A nA,并计算公钥 P A = n A G P_A=n_AG PA=nAG;
3、用户B选择私钥 n B n_B nB,并计算公钥 P B = n B G P_B=n_BG PB=nBG;
4、用户A计算私密钥 K = n A P B K=n_AP_B K=nAPB,用户B计算私密钥 K = n B P A K=n_BP_A K=nBPA;