问题:如何在不安全的网络上传送秘钥?
假设有两个人 alice 和 bob,在不安全的网络情况下,他们俩沟通的每一句话都会被第三方 joe 知道,如何协商出一个只有他们两个人知道的秘钥?
所有的信息都会被第三方知道的情况下,通过两个人独自保密的信息,计算得到一个相同的值.需要的计算量必须非常大,使第三方即使知道沟通的内容,也很难计算得出结果.
Diffie-Hellman 密钥交换协议的有效性依赖计算离散对数的难度.
y=g^x mod p,在已知g,x,p的情况下,计算 y 是非常快的,但是已知 y,g,p 的情况下计算 x 的值是非常困难的.p 取很大的素数.模运算中为何要用素数作为模
秘钥交换过程:
- alice 和 bob 先协商 g,p 的值
- alice 私密的值 a , A=g^a mod p ,将 A 发送给 bob
- bob 私密的值 b, B=g^b mod p,将 B 发送给 alice
- alice 计算 B^a mod p = (g^b)^a mod p = g^ab mod p = S
- bob 计算 A^b mod p = (g^a)^b mod p = g^ab mof p = S
- 现在 alice 和 bob 有了共同的秘钥 S,由于计算量很大,即使 joe 知道 g,p,A,B,也很难计算出 ab 的值