Diffie-Hellman密钥交换算法
有两个全局公开的参数,一个素数p和一个整数g,g是p的一个原根
假设用户A和B希望交换一个密钥,用户A选择一个作为私有密钥的随机数a
计算出Akey=g^a mod p,并将Akey发送给用户B
然后,用户B随机选取b,计算出Bkey=g^b mod p,并将Bkey发送给用户A
此时,用户A知道p,g,a,Bkey
用户A通过计算得到共享密钥=Bkey^a mod p
用户B知道p,g,b,Akey
用户B通过计算得到共享密钥=Akey^b mod p
而用户A和用户B计算得到的共享密钥是一样的
共享密钥还可以这样算key=g^(a*b) mod p
例子:
安全性:
Hacker a.掌握公钥(3, 17)
| b.获得单项函数的值(6)
| c.获得单项函数的值(12)
| d.由于缺少信息(私钥)无法计算得到密钥
|
|
|
用户A --------------------------------------------> 用户B
a.公开公钥(3, 17) a.掌握公钥(3, 17)
b.随机选择一个数a计算并发送6 b.获得单项函数的值(6)
c.获得单项函数的值(12) c.随机选择一个数b计算并发送12
d.计算得到共享密钥 d.计算得到共享密钥