DH密钥交换方案
实际运用对称密码时,必须先将密钥分发给消息传输的双方,这个时候就需要一种安全的方式进行密钥分发,这个时候Diffie-Hellman密钥分配就出现了;
Diffie-Hellman密钥交换原理:
1. 先选择一个大素数P
2. 选择一个本原元G
本原元G符合如下特性:
1.)G^1mod P,G^2 mod P,G^3 mod P,G^(P-1) mod P这些值都不相同
2.)G属于[0,p-1],G为整数
假设A和B现在要进行密钥交换:
1. 由A或者B生成大素数P和本原元G;
2. 将生成的P、G分发给对方;
3. 这个时候A生成一个私钥a,B生成私钥b,其中a、b范围是[1,p-2];
4. 生成私钥后,再生成公钥,A的公钥Kpub,a=G^a mod P,B的公钥Kpub,b=G^b mod P;
5. A、B将自己的公钥发给对方,这个时候双方开始生成公共密钥Km,
对于A来说Km=(Kpub,b)^a mod P
对于B来说Km=(Kpub,a)^b mod P
6. 至此密钥分发完成,A和B传输过程中包含 P、G、Kpub,a、Kpub,b,假设攻击者获得这些数据,也无法得到公共密钥Km,但是该方式无法防御中间人攻击的方式;
举例:假设A和B进行密钥分发;
1. 选择素数P=29、本原元G=2,A的私钥a为5,B的私钥b为12
2. 计算公钥:
A的公钥:Kpub,a=G^a mod P → Kpub,a =2^5 mod 29 → Kpub,a =3
B的公钥:Kpub,b=G^b mod P → Kpub,b =2^12 mod 29 → Kpub,b =7
A计算公共密钥:Km=(Kpub,b)^a mod P → Km=7^5 mod 29 → Km=16
B计算公共密钥:Km=(Kpub,b)^a mod P → Km=3^12 mod 29 → Km=16
至此,密钥分发完毕;
Elgamal加密方案
该加密方式基于DH密钥分发,具体分发方式见上文【DH密钥交换方案】,以下是加密过程:
假设A和B要进行会话加密:
1.首先他们先进行DH密钥交换,获得公共密钥Km;
2.这个时候A要对B发送明文X;
3.A对X进行加密,生成密文Y,加密方式为:Y=X·Km mod P;
4.A将密文Y发送给B;
5.B对Y进行解密,解密方式为:X=Y·Km^(-1)mod P;
举例:A和B进行会话加密
1.获取公共密钥Km,此处我套用上文【DH密钥交换方案】的数值,Km=16、P=29;
2.A对B发送明文26;
3. A对X进行加密生成密文Y
Y=X·Km mod P → Y=26 X 16 mod 29 → Y=10
4.B对Y进行解密
X=Y·Km^(-1) mod P → X=10 X 16^-1 mod 29→ X=10 X 20 mod 29 → X=26