TLS协议之ECDHE握手

HTTPS使用TLS协议解决了HTTP的窃听,篡改,冒充这三类不安全问题,主要是通过信息加密,校验机制,身份证书。 
TLS协议,有两种算法实现方式,一种是RSA握手,一种是ECDHE握手,我们分别来看看这两种过程。

RSA握手

在RSA秘钥协
 


ECDHE握手

TLS协议之ECDHE握手_第1张图片

底数a,模数p 是离散对数的公共参数,b是真数,i是对数,知道了对数i,很容易计算出真数b,但是知道了真数b,很难计算出对数i .

特别是当模数 p 是一个很大的质数,即使知道底数 a 和真数 b ,在现有的计算机的计算水平是几乎无法算出离散对数的,这就是 DH 算法的数学基础。

DH算法

  1. 首先确定公开两个参数,模数P和底数G
  2. 双方各自生成一个随机数作为私钥,小红是a,小明是b
  3. 双方根据各自的私钥计算出各自的公钥,并公开,此时即便知道了公钥,也无法计算出私钥小红的公钥记作 A,A = G ^ a ( mod P );小明的公钥记作 B,B = G ^ b ( mod P );
  4. 现在小红有五个数:P、G、a、A、B 、小明有五个数:P、G、b、B、A (G底数只参与公钥的生成)
  5. 小红执行计算B ^ a ( mod P ) ,结果是k,因为离散对数的幂运算有交换律,所以小明执行运算: A ^ b ( mod P ),得到的结果也是 K,这个k就是后续的对称加密的秘钥。


DHE算法

有两种:一种是 static DH算法,现在已经废弃,原因就是在此算法中,一方的私钥是静态的,不具备前向安全性; 第二种是DHE算法,双方的私钥在每次秘钥交换通信的时候,都是随机生成的,临时的。



ECDHE算法

本质与DHE算法相同,但是引入了数学中的椭圆,具体过程忽略



ECDHE具体握手过程

TLS第一次握手:Client Hello ,发送的TLS版本号,支持的密码套件、以及生成一个随机数
TLS第二次握手:Sever Hellp ,服务器确定的TLS版本号、一个随机数 ,合适的密码套件、证书、Sever Key Exchange (选中一条椭圆曲线确定基点G(底数),同时还会根据椭圆曲线确定模数P,根据随机数和椭圆曲线生成秘钥,保留在本地,同时计算出公钥(使用RSA签名算法进行签名),公开给客户端) 、Server Hello Done

TLS第三次握手:客户端校验证书合法性;客户端根据椭圆曲线和随机数生成自己的私钥,然后生成自己的公钥 ; 发送Client Key  Exchange 消息给客户端 ;Change Cipher Spec;Encrypted Handshake Message;

现在双方都有了对方的公钥,自己的私钥,然后有了模数P,然后就可以计算出一个公共的点(x,y),x是固定的,x还不是最终的会话秘钥。最终的会话密钥,就是用「客户端随机数 + 服务端随机数 + x(ECDHE 算法算出的共享密钥) 」三个材料生成的

TLS第四次握手:服务端也会有一个同样的操作,发「Change Cipher Spec」和「Encrypted Handshake Message」消息,如果双方都验证加密和解密没问题,那么握手正式完成

你可能感兴趣的:(计算机网络,https,网络协议,http)