DH方式密钥交换四种表达方式

一、理论化的表达方式
1、Alice与Bob确定两个大素数p和g,这两个数不用保密
2、Alice选择另一个大随机数a,并计算A如下: A=ga mod p
3、Alice将A发给Bob
4、Bob  选择另一个大随机数b,并计算B如下: B=gb mod p
5、Bob将B发给Alice
6、计算秘密密钥K1如下:K1=Ba mod p
7、计算秘密密钥K2如下:K2=Ab mod p
K1=K2,因此Alice和Bob可以用其进行加解密
 
二、数字化的表达方式
1、通信方Alice和通信方Bob约定g=5,p=23,g和p是公开的
2、Alice生成一个随机数a,a是保密的,如a=6
3、Alice计算g^a%p发送给Bob,g^a%p=5^6%23=8
4、Bob生成一个随机数b,b是保密的,如b=15
5、Bob计算g^b%p发送给Alice,g^b%p=5^15%23=19
6、Alice接收到g^b%p后,再使用保密的a,计算(g^b%p)^a%p=19^6%23=2
7、Bob接收到g^a%p后,再使用保密的b,计算(g^a%p)^b%p=8^15%23=2
8、这样通信方Alice和Bob得到一个相同的密钥:2
 
三、实践化的表达方式
1、Server Key Exchange消息
server端:用DH算法产生整数p,g,pubkey(即 A=ga mod p),将这三个参数放到Server Key Exchange消息中。为了防止消息被恶意篡改,Server Key exchange消息中还要包含一个对公钥参数的签名signature。
Client端:收到此消息后,会把消息中的 p,g, pubkey (即 A=ga mod p  三个参数记录下来,有了这些,可以依据 pubkey (即 A=ga mod p 和 private(即b)计算出 pre-master
 
2、Client Key Exchange消息
Client端:把产生的 pubkey(即 B=gb mod p  放入 Client Key Exchange消息 中发给 server 。
server端: 收到此消息后,会把消息中的 pubkey (即 B=gb mod p  记录下来,可以依据 pubkey (即 B=gb mod p 和 private(即a)计算出 pre-master
 
四、图形化表达方式