美文网首页
TLS 握手过程

TLS 握手过程

作者: 微微笑的蜗牛 | 来源:发表于2020-11-03 14:33 被阅读0次

TLS 握手过程,主要目的是为了协商对称加密的密钥,因为在最终的通信链路上使用对称加解密会更快。

我们知道,生成最终通信的对称密钥需要三个随机数:

  • 客户端随机数
  • 服务端随机数
  • pre-master

前两个是公开的,那么最重要的就是 pre-master,在协商过程中如何保证它不会被窃取。为了保证协商安全性、对端可靠性,那么采用非对称加密的方式会更加合适,因为私钥只有服务端持有。

在 TLS 中采用的非对称加密方式主要有如下两种:

  • RSA
  • ECDHE

而这两种方式的区别,就在于 pre-master 的生成方式不同。

对称和非对称加密

先简单解释一下对称加密和非对称加密。

  • 对称加密:只有一个密钥,加解密使用同一个密钥。
  • 非对称加密:存在一对公私钥。私钥只有一方持有,公钥是公开的。公钥加密,可以用私钥解密;私钥加密,可以用公钥解密。但私钥加密的方式,一般是用于验证持有私钥的发送人是否可信,因为只有它持有私钥(私钥泄露了另算)。当接收方用公钥能正常解密时,则可认为是由公钥匹配的私钥所加密的数据,也就可认为发送方可信。另外,由于公钥所有人都可以获取,所以不会使用私钥加密敏感数据,因为所有人都可解密。

注:即使接收方用公钥能正常解密,但这并不能完全保证发送方就是接收方想要通信的一方,因为接收方不能确认公钥的端正确性只是和发送方的私钥配对而已,发送方可以被伪装。因此在握手过程中又引入了证书校验的过程。这一节中我们暂且不讲。

RSA 握手

如果双方使用传统的 RSA 算法进行密钥交换,那么 pre-master 是由客户端生成的一个随机数,然后用服务器公钥加密后发给服务端,服务端用私钥解密得到 pre-master

双方再根据 client-random + server-random + pre-master 三个参数计算出主密钥 master-key

流程图如下:

RSA.png

但是这种方式会存在安全问题,它不具有前向安全性。那什么是前向安全性?也就是指历史数据的安全性,不会被破解。

假设一个黑客收集了很多历史数据,当他破解服务端私钥后,可以计算出 pre-master,从而根据历史数据中的 client-random + server-random 计算出密钥,然后就可解密所有之前的加密数据。并且,由于私钥是固定的,在后续新的会话中,仍然可以获取 pre-master,继续截获信息。所以 RSA 并不安全。

ECDHE 握手

而现在主流的 TLS 握手算法,一般会选择安全性更强的 ECDHE 实现密钥交换,即椭圆曲线算法,相比 RSA 算法来说具有前向安全性

因为在每次握手过程中,服务端和客户端都重新会生成 ECDHE 算法的参数,也就是一对公私钥,并且是一次一密。即使黑客截获了当前会话,那也只能监听该次通信内容。

流程图如下:

ECDHE.png

从图中我们可以看到,在服务端发送 Server Certificate 后,多了一步 Server Key Exchange 的过程。

  • 服务端会生成一个公钥 server-public-key 发给客户端。
  • 客户端在 Client Key Change 时也会生成一个公钥 client-public-key 发给服务端。
  • 最终,pre-master 由服务端的 server-public-key + 客户端的 client-public-key,再根据 ECDHE 算法计算而来。

该算法可以保证两边计算出来的结果是一样的。

ECDHE 原理

在了解什么是 ECDHE 之前,首先可先了解下 DH 算法 的原理。

其实很简单,就是利用了模幂运算的特性。

gᵃᵇ mod p = (gᵃ mod p)ᵇ mod p = (gᵇ mod p)ᵃ mod p

对照上面 ECDHE 握手过程图来说。

客户端在 Client Key Change 这一步的公私钥数据如下:

私钥:a
公钥:A = gᵃ mod p

服务端在 Server Key Change 这一步的公私钥数据如下:

私钥:b
公钥:B = gᵇ mod p

客户端根据服务端传来的公钥 B 和自己的私钥 a,计算出秘钥 k1:

k1 = Bᵃ mod p = (gᵇ mod p)ᵃ mod p = gᵃᵇ mod p

服务端根据客户端传来的公钥 A 和自己的私钥 b,计算出秘钥 k2:

k2 = Aᵇ mod p = (gᵃ mod p)ᵇ mod p = gᵃᵇ mod p

那么,由此计算出的 k1 和 k2 是相等的。

那 DHE 又是什么呢?DHE 算法与 DH 原理是相同的,只不过由于 DH 算法一方的公钥是固定的,不具有前向安全性。因此改进成了 DHE,E 代表 ephemeral,短暂的,即每次都生成公私钥。

ECDHE 则是在 DHE 的基础上,将整数域里的离散对数替换成了椭圆曲线的离散对数,使其更难以破解,更加安全。

注意:ECDHE 算法参数 public-key 是不需要加密的。因为即使黑客拿到了公钥参数,也很难计算出 pre-master。

两者区别

两种算法的区别主要在于:

  • RSA 私钥是固定的,破解后可以得到所有的算法参数。
  • ECDHE 是每次重新生成参数,一次一密,更加安全。

因此在 TLS 1.3 中,废除了 RSADH 算法,使用了更加安全的 ECDHE

相关文章

  • 什么是SSL/TLS握手

    TLS的工作原理–前所未有的简化了SSL / TLS握手过程 伴随所有握手,SSL / TLS握手是一切开始的地方...

  • TLS 握手过程

    TLS 握手过程,主要目的是为了协商对称加密的密钥,因为在最终的通信链路上使用对称加解密会更快。 我们知道,生成最...

  • Moya,KingFisher中使用自签名证书发起HTTPS请求

    HTTPS握手 先说声https握手,发送 HTTPS 请求首先要进行 SSL/TLS 握手,握手过程大致如下: ...

  • 阿里云环境中TLS/SSL握手失败的场景分析

    TLS/SSL握手是一个相对复杂的过程,在阿里云环境中结合产品,安全等特性,可能会让TLS/SSL握手过程的不定性...

  • SSL/TLS握手协议

    根据理解整理的握手协议原理图如下: 参考文章:SSL/TLS协议详解SSL / TLS 工作原理和详细握手过程SS...

  • TLS/SSL握手过程

    1、握手与密钥协商过程基于RSA握手和密钥交换的客户端验证服务器为示例详解TLS/SSL握手过程。 (1).cli...

  • tls握手的过程

    TLS握手的过程参考文档 https://www.ibm.com/docs/en/ibm-mq/9.0?topic...

  • https与tls

    1.tls1.2的握手过程2.tls1.3的握手过程3.如何防范中间人攻击4.http2中的加密5.CA签名的作用...

  • Moya,KingFisher中使用自签名证书发起HTTPS请求

    Moya信任自签名证书 问题 先说说HTTPS握手, 发送HTTPS请求首先要进行SSL/TLS握手,握手过程大致...

  • HTTPS 请求大致过程

    发送 HTTPS 请求首先要进行 SSL/TLS 握手,握手过程大致如下: 1、客户端发起握手请求,携带随机数、支...

网友评论

      本文标题:TLS 握手过程

      本文链接:https://www.haomeiwen.com/subject/lqfbvktx.html