Diffie–Hellman key exchange
p是素数,g和x是整数,虽然y=gxmodp很快,但是逆过程求x就困难了。
以下是DH协议的方案: 1. Alice和Bob先对p 和g达成一致,而且公开出来。Eve也就知道它们的值了。 2. Alice取一个私密的整数a,不让任何人知道,发给Bob 计算结果:A=gamodp. Eve 也看到了A的值。 3. 类似,Bob 取一私密的整数b,发给Alice计算结果B=gbmodp.同样Eve也会看见传递的B是什么。 4. Alice 计算出 S=Bamodp=(gb)amodp=gabmodp. 5. Bob 也能计算出S=Abmodp=(ga)bmodp=gabmodp. 6. Alice 和 Bob 现在就拥有了一个共用的密钥S. 7. 虽然Eve看见了p,g, A and B, 但是鉴于计算离散对数的困难性,她无法知道a和b 的具体值。所以Eve就无从知晓密钥S 是什么了。
证明 (gbmodp)a=gabmodp :
假设:g=p+x(gbmodp)a=((p+x)bmodp)a=(xb)a=xabgabmodp=xab(gbmodp)a=gabmodp