ECDHE 算法解决了 RSA 算法不具备前向安全的性质 和 DH 算法效率低下的问题。
ECDHE 算法具有前向安全。所以被广泛使用。
由什么演变而来
DH 算法 -- > DHE 算法 -- > ECDHE 算法
DH 算法是非对称加密算法,该算法的核心数学思想是离散对数。
核心数学思想
离散对数
离散对数 是【离散 + 对数】的两个数学概念的组合。
概念如图:
上图中,底数 a 和模数 p 是离散对数的公共参数(公开的),b 是真数,i 是对数。
知道了对数,就可以用上面的公式计算出真数。
反过来,知道真数却很难推算出对数。
特别是当模数 p 是⼀个很⼤的质数,即使知道底数 a 和真数 b ,在现有的计算机的计算⽔平是⼏乎⽆法算出离散 对数的,这就是 DH 算法的数学基础。
DH 算法
前置背景:
小红(客户端) 和 小明(服务端)、DH 算法中的两个公开参数 P 和 G
第一步:
小红生成一个随机数:a(私钥);小明生成一个随机数:b(私钥);
第二步:
小红根据 a、P、G 计算出公钥:A(公钥);小明根据 b、P、G 计算出公钥:B(公钥);
A = G ^ a ( mod P ); B = G ^ b ( mod P );
第三步:
小红和小明交换公钥 A 和 B;
第四步:
小红根据 B、a、P 运算得到:K(对称加密密钥); 小明根据 A、b、P 运算得到 K(对称加密密钥);
K = B ^ a ( mod P ) = A ^ b ( mod P )
整个密钥协商过程中,小红和小明公开了 4 个信息:P、G、A、B。
根据离散对数的原理,如果 P 是一个大数,在现有的计算机的计算能力是和很难破解出私钥 a、b的。
DHE 算法
来源:
根据私钥的生成方式的分类,DH 算法可以分为两种实现:DHE 算法 和 static 算法(已废弃)
E:ephemeral(临时性的)
作用特性:
让双方的私钥在每次密钥交换通信时,都是随机生成的、临时的。
每个通信过程 的私钥都是没有任何关系的,都是独⽴的,这样就保证了「前向安全」。
ECDHE 算法
来源:
解决 DHE 算法的性能不佳问题。
技术核心:
在 DHE 算法的基础上利用了 ECC 椭圆曲线特性。
具体过程:(在 DH 算法过程的基础上)
- 小红和小明确定好:使用哪种椭圆曲线 和 曲线上的基点 G (都公开);
- 小红根据 a、G 得到: QA(公钥);小明根据 b、G 得到: QB(公钥);
QA = aG;QB = bG;
- 小红和小明交换公钥:QA 和 QB;
- 小红计算点(x1,y1) = aQB ; 小明计算点(x2,y2) = bQA ;
因为椭圆曲线满足乘法交换律和结合律,所以 aQB = abG = baG = bQA。
- 根据此次计算的特性,双方的 x 坐标是一样的,所以 x 为会话密钥。
这个过程中,双⽅的私钥都是随机、临时⽣成的,都是不公开的,即使根据公开的信息(椭圆曲线、公钥、基点 G)也是很难计算出椭圆曲线上的离散对数(私钥) 。