【网络协议】【http】【https】ECDHE-TLS1.2
ECDHE算法
1.客户端和服务器端事先确定好使用哪种椭圆曲线,和曲线上的基点G,这两个参数都是公开的,
双方各自随机生成一个随机数作为私钥d,并与基点 G相乘得到公钥Q(Q=dG),此时客户端的公钥Q1, 私钥
d1,服务器的公钥 Q2,私钥d2
双方交换各自的公钥,最后客户端计算点(x1,y1)=d1Q2,服务器计算点(x2,y2)=d2Q1,由于椭
圆曲线上是可以满足乘法交换和结合律,所以 d1Q2=d1d2G=d2d1G=d2Q1
因此双方的x坐标是一样的,所以它是共享密钥,也就是会话密钥生成材料。(会话密钥根据客户端随机数,服务器端随机数 以及x生成)
ECDHE生成会话密钥
1.客户端
客户端向服务器发送一个“ClientHello”消息
客户端支持的协议版本。
客户端支持的密码套件(密钥交换算法+签名算法+对称加密算法+摘要算法)列表。
客户端生成的一个随机数(Client Random)
2.服务器
服务器收到客户端消息后,返回一个“ServerHello”消息
服务器选择的协议版本。
服务器从客户端提供的密码套件列表中选定的密码套件。
服务器生成的一个随机数(Server Random)
服务器会发送自己的数字证书,供客户端验证服务器的身份。
服务器发送【server key Exchange】消息(这里的消息会进行签名 因为这个数据不能出错,需要证明可靠性)生成椭圆曲线Diffie-Hellman(ECDH)的公钥(d2),私钥(Q2)对,并将公钥Q2发送给客户端。
3.客户端身份验证与密钥生成:
客户端收到服务器的数字证书后,会验证证书的有效性,确保服务器的身份可信。
客户端也有自己的ECDH密钥公钥(d1),私钥(Q1),并将公钥Q1发送给服务端。通过ECDHE算法,与服务器的公钥(Q2)以及双方的私钥数生成一个共享的秘密密钥x。
密钥派生:
客户端和服务器各自基于双方生成的共享密钥x以及客户端随机数,服务端随机数,生成最终的会话密钥。
消息认证:
客户端使用会话密钥加密之前发送的所有数据的摘要,并发送给服务器进行验证。
4.服务器同样验证摘要,确认无误后,双方进入安全的数据通信阶段。
后续会说明一下session ticket,session id 和TLS1.3,以及基于TLS1.3的QUIC
但是由于TLS1.3及其后续资料没有确切规范,说什么的都有,如有问题,希望大佬指出,并能给出我参考资料 那将万分感谢!
部分转自:https://zhuanlan.zhihu.com/p/686461033
部分转自:https://www.cnblogs.com/ToTigerMountain/articles/18220849