离散对数
如果对于一个整数b和质数p的一个原根a,可以找到一个唯一的指数i,使得:
\(a^i mod(p) =b 成立\)
那么 指数i 称为 b 的 以a为底 模p的 离散对数。
a 和 p都是公开的参数
当p是一个很大的质数,当你知道i的值时,b的值很容易就能算出来,但是如果仅知道b的值,你是很难算出i的值的(你需要从1开始爆破,直到上述式子成立)
DH(Diffie Hellman)
DH协议是一种密钥交换协议
它的目的是为了让双方在被窃听的信道内也能安全的交换密钥
举个例子,小明和小红使用DH算法来交换密钥
- 小明和小红确定 底数g 和 模数p,根据离散对数原理,g和p是公开的
- 小明和小红各自随便生成了一个整数作为私钥,分别为a和b
- 小明将A=$g^a mod (p)$发送给小红,小红将B=$g^bmod(p)$发送给小明
- 小明根据B和a计算$B^amod (p)$,小红根据A和b计算$A^bmod (p)$
值得注意的是$B^a mod (p) = (g^b mod(p))^a mod (p) = (g^a)^b mod (p) = A^b mod(p) $
因此,$K=B^a mod(p) = A^b mod(p)$就是共享的会话密钥了。
黑客只能知道 g p A B 想要计算a和b是困难的(基于离散对数)
DHE(Diffie Hellman Ephemeral)
DHE其实是DH的改进版本。
主要是每重新进行一次通信,就会重新生成服务端和客户端是公私钥。
这样即使你破解了这个通信,你之前的通信也要再爆破一次
这被称作 前向安全(即该次通信密钥被破解,不会影响到之前通信的通信)。
ECDHE
DHE运算性能不佳,需要进行大量乘法计算。此时诞生了效率更高的ECDHE算法
- 小明和小红确定使用的椭圆曲线并确定公开基点G
- 小明和小红各自随机生成一个私钥d1 和 d2
- 小明和小红各自计算自己的公钥$D1=d1G$ 和 $D2=d2G$
- 小明和小红将各自的公钥发送给对方
- 小明计算 $d1D2=d1d2G=d1Gd2=D1d2=d2D1$
这个过程中,双方的私钥都是随机、临时生成的,都是不公开的,即使根据公开的信息(椭圆曲线、公钥、基点 G)也是很难计算出椭圆曲线上的离散对数(私钥)。