你知道HTTPS ECDHE握手吗?
作者:互联网
HTTPS ECDHE握手解析
一、DH算法的原理
数学基础
DH算法是非对称加密算法,因此它可以作为密钥交换,算法的核心是离散对数。
特别是当模数P是⼀个很大的质数,即使知道底数 a 和真数 b ,在现有的计算机的计算水平是几乎无法算出离散对数的,这就是 DH 算法的数学基础。
DH算法过程
- 假设小红和小明使用DH算法进行密钥交换,小红和小明先确定模数和底数作为DH算法的参数,这两个参数是公开的,记作P和G。
- 小红生成一个随机数作为私钥,记作a,小明生成一个随机数作为私钥,记作b,双方私钥不能泄漏。
- 小红的公钥
A=G^a mod P
;小明的公钥B=G^b mod P
; - A和B也是公开的,根据离散对数原理,是很难算出a和b的,至少现在的计算机能力无法破解。
- 双方交换公钥。此时小红共有5个数:A,B,a,P,G;小明同样有5个数:A,B,b,P,G;
- 小红执行运算
K1=B^a mod P
;小明执行运算K2=A^b mod P
,此时K1=K2,这就是以后的对称加密密钥,可作会话密钥使用。
根据离散对数的原理,如果 P 是⼀个大数,在现有的计算机的计算能力是很难破解出私钥 a、b 的,破解不出私钥,也就⽆法计算出会话密钥,因此 DH 密钥交换是安全的。
DH算法分类
static DH算法(已经废弃了)
static DH 算法里有一方的私钥是静态的,也就说每次密钥协商的时候有一方的私钥都是⼀样的,⼀般是服务器方固定,即 a 不变,客户端的私钥则是随机⽣成的。于是,DH 交换密钥时就只有客户端的公钥是变化,而服务端公钥是不变的,那么随着时间延长,黑客就会截获大量的密钥协商过程的数据,因为密钥协商的过程有些数据是公开的,黑客就可以依据这些数据暴力破解出服务器的私钥,然后就可以计算出会话密钥了,于是之前截获的加密数据会被破解,所以static DH算法不具备前向安全性。
DHE算法
双方的私钥在每次密钥交换通信时,都是随机生成的、临时的,这个方式也就是 DHE 算法。即使有个牛逼的黑客破解了某⼀次通信过程的私钥,其他通信过程的私钥仍然是安全的,因为每个通信过程的私钥都是没有任何关系的,都是立的,这样就保证了前向安全。
二、ECDHE算法
ECDHE概述
DHE因为做了大量的乘法导致性能不佳,因此出现了广泛应用与密钥交换算法ECDHE算法。
ECDHE算法是在DHE算法的基础上利用了 ECC 椭圆曲线特性,可以用更少的计算量计算出公钥,以及最终的会话密钥。
ECDHE密钥交换过程
- 双方事先确定好使⽤哪种椭圆曲线,和曲线上的基点 G,这两个参数都是公开的;
- 双方各自随机生成⼀个随机数作为私钥d,并与基点 G相乘得到公钥Q(Q = dG),此时小红的公私钥为 Q1 和 d1,小明的公私钥为 Q2 和 d2;
- 双方交换各自的公钥,最后小红计算点(x1,y1) = d1Q2,小明计算点(x2,y2) = d2Q1,由于椭圆曲线 上是可以满足乘法交换和结合律,所以 d1Q2 = d1d2G = d2d1G = d2Q1 ,因此双方的 x 坐标是⼀样的,所以它是共享密钥,也就是会话密钥。 这个过程中,双方的私钥都是随机、临时生成的,都是不公开的,即使根据公开的信息(椭圆曲线、公钥、基点 G也是很难计算出椭圆曲线上的离散对数(私钥)。
三、ECDHE握手过程
第一次握手
ClientHello:客户端发送一个信息
- TLS版本号
- 支持的密码套件列表
- 生成的随机数
第二次握手
SeverHello:服务端发送一个信息
- TLS版本号
- 支持的密码套件
- 生成的随机数
ServerCertificate:发送数字证书
ServerKeyExchange:发送用RSA加密的服务端的椭圆曲线公钥
ServerHelloDone:完成
第三次握手
CleintKeyExchange:发送用RSA加密的客户端的椭圆曲线公钥
ChangeCiperSpec:通知开始使用加密方式发送消息
EncryptedHandshakeMessage(Finish):之前所有发的数据做摘要,用会话密钥加密,让服务器做验证
会话密钥=客户端随机数 + 服务端随机数 + ECDHE 算法算出的共享密钥三个材料生成的。
第四次握手
ChangeCiperSpec:开始使用加密方式发送消息
EncryptedHandshakeMessage:验证成功
四、RSA和ECDHE握手过程的区别
- RSA 密钥协商算法不支持1前向保密,ECDHE 密钥协商算法支持前向保密;
- 使用了RSA密钥协商算法,TLS 完成四次握⼿后,才能进行应用数据传输,而对于ECDHE 算法,客户端可以不用等服务端的最后一次TLS 握手,就可以提前发出加密的 HTTP 数据,节省了⼀个消息的往返时间;
- 使用ECDHE,在TLS第2次握手中,会出现服务器端发出的Server Key Exchange消息,而RSA握手过程没有该消息;
标签:私钥,DH,握手,算法,密钥,HTTPS,ECDHE 来源: https://blog.csdn.net/JT518721/article/details/120629648