安全密钥交换——DH算法
why:
对称加密可以解决数据的安全,但是对称加密的加密密钥和解密密钥是一样的。那就需要有安全的密钥交换方案。
what:
DH算法(Diffie-Hellman算法)可以保证在双方不直接传输原始密钥的情况下,完成双方密钥交换。
DH算法交换密钥的步骤。假设甲乙双方需要传递密钥,他们之间可以这么做:
- 甲首选选择一个素数
p
,例如509,底数g
,任选,例如5,随机数a
,例如123,然后计算A=g^a mod p
,结果是215,然后,甲发送p=509
,g=5
,A=215
给乙; - 乙方收到后,也选择一个随机数
b
,例如,456,然后计算B=g^b mod p
,结果是181,乙再同时计算s=A^b mod p
,结果是121; - 乙把计算的
B=181
发给甲,甲计算s=B^a mod p
的余数,计算结果与乙算出的结果一样,都是121。
所以最终双方协商出的密钥s
是121。注意到这个密钥s
并没有在网络上传输。而通过网络传输的p
,g
,A
和B
是无法推算出s
的,因为实际算法选择的素数是非常大的。所以,更确切地说,DH算法是一个密钥协商算法,双方最终协商出一个共同的密钥,而这个密钥不会通过网络传输。
如果我们把a
看成甲的私钥,A
看成甲的公钥,b
看成乙的私钥,B
看成乙的公钥,DH算法的本质就是双方各自生成自己的私钥和公钥,私钥仅对自己可见,然后交换公钥,并根据自己的私钥和对方的公钥,生成最终的密钥secretKey
,DH算法通过数学定律保证了双方各自计算出的secretKey
是相同的。