理解准备
首先我们给自己一个概念就是,设有一个式子Q=kP,给定k和P求Q很容易,给定Q和P求k很困难,但是这个式子不是简单的乘法,我们理解为一种复杂的算法。
原理流程
1、确定使用哪个椭圆曲线,ECDHE是以椭圆曲线上的数学问题为基础。
2、确定曲线基点G,曲线基点我们将其理解为一个公共的算法材料
(其中使用的椭圆曲线和曲线基点都是公开的)
3、通信A端生成随机数A,通信B端生成随机数B
4、Qa=AG Qb=BG //将随机数a或b与G进行运算,还是理解为一种特殊运算
5、于是A的私钥为(A,Qa),B的私钥为(B,Qb)
6、双方交换各自生成的Qa、Qb,A端得到Qb,B端得到Qa
7、我们将A端的随机数与B端生成的Qb,以及B端的随机数与A端生成的Qa进行相乘得AQb和BQa(不是简单的相乘,是特殊算法)
8、因为Qb=BG ,A端已知AQb,将Qb=BG带入AQb得:AQb=ABG
9、因为Qa=AG,B端已知BQa,将Qa=AG带入BQa得:BQa=BAG
于是A和B双方都获得到了公共密钥ABG
ECDHE的保密性
在整个密钥的协商过程中仅仅公布了基点G,以及公共使用的椭圆曲线,还有Qa和Qb,我们现在使用文章开篇的材料:“Q=kP,知道k和P很简单求出Q,但知道Q和P很难求出k”,其中k在这个公式扮演的就是A端和B端上生成的随机数的角色,Q就是各端上随机数与G相乘的结果,P就是G基点。因为知道Q和G基点很难求出A端和B端上生成的随机数,所以中间人就不可能知道最后的密钥ABG的值。而且我们根据公式可以知道最终对称密钥的公式是ABG,即两个随机数加上一个公知数G,如果中间人要破解对称密钥,那么就必须获得A和B,但是如果要破解A和B那么它就需要根据Qa和G去推出A,根据Qb和G去推出B,但是我们已经知道了这两个推导是十分困难的,而且他还要破解两个。
总结:
由于ECDHE的背后使用的数学原理是椭圆曲线,所以在安全性和速度上都较传统的使用离散对数的DH算法有了不少的提高,ECDHCE能够使用较少的密钥位数实现传统DH算法高密钥位数的安全,在ECC椭圆曲线数学问题衍生出来的多个安全算法,如ECC非对称加密,ECDSA签名算法,都在加密位数、速度和安全上有了很大的提升,但是因为随机生成器可能留有后门以及一些其他的因素,使得ECC相关的衍生算法没有完全盖过RSA的风头。