0x00 前言

最近在阅读论文,其中阅读了 WWW2021的一篇文章“TLS 1.3 in Practice: How TLS 1.3 Contributes to the Internet”。在本篇文章中,作者对当下TLS 1.3在实际中的采用率、安全性、性能和实现进行了大规模的测量。下面是对TLS 1.3 的一些优势与特性的总结。

论文下载地址:https://yonghwi-kwon.github.io/data/tls_www21.pdf

0x01 什么是TLS?

TLS代表传输层安全性并且是SSL(安全套接字层)的后继者。TLS提供了Web浏览器和服务器之间的安全通信。连接本身是安全的,因为使用对称密码术对传输的数据进行加密。密钥是为每个连接唯一生成的,并且基于在会话开始时协商的共享机密(也称为TLS握手)。

0x02 TLS 1.3 &&TLS 1.2

在过去十年中,部署了最新的TLS版本1.3 ,解决了其前身(即TLS 1.2 )的关键漏洞,如BEAST和FREAK攻击。TLS 1.3的标准化工作始于2013年8月,随着安全性和性能的提高,于2018年8月完成。

安全性提高

  1. 废除不支持前向安全性的 RSA 和 DH 密钥交换算法;
  2. MAC 只使用 AEAD 算法;
  3. 禁用 RC4 / SHA1 等不安全的算法;
  4. 加密握手消息;
  5. 兼容中间设备 TLS 1.2;
  6. 加密握手消息。

另外,TLS 1.2容易受到中间人攻击和降级攻击(FREAK)。TLS 1.3 弥补了TLS 1.2 的缺陷,使其不易受到攻击。

降级攻击(FREAK)原理

主要原因,TLS1.2 握手部分协商使用哪种密码,并没有进行加密数字签名。而 TLS 1.3 对握手信息进行了加密处理。

Phase 1:在客户端发出的Hello消息中,它会请求标准的加密,中间人攻击者会改变请求内容,转而请求“40 bit 密钥的出口级的加密算法”(弱加密算法)

Phase 2:服务端会回复一个出口级的密钥,由于OpenSSL/Secure传输的bug,客户端会接受这个存在漏洞的密钥

Phase 3:攻击者进行爆破40bit密钥,以便能够伪造mac,进行消息修改。详见TLS 1.2 握手过程.

Phase 4:服务端进行响应消息,中间攻击者可以查看.

所有的流量都使用弱加密算法,并将经过中间人,中间人可以随意查看与修改。

Export 加密算法

Export是一种老旧的弱加密算法,是被美国法律标示为可出口的加密算法,其限制对称加密最大强度位数为40位,限制密钥交换强度为最大512位。这是一个现今被强制丢弃的算法。

性能提高

TLS和加密连接在网络性能方面总是会增加一些开销。HTTP / 2确实可以解决此问题,但是TLS 1.3通过诸如TLS错误启动和零往返时间(0-RTT)之类的功能,甚至可以进一步提高加密连接的速度。

1-RTT模式

简而言之,对于TLS 1.2,需要两次往返来完成TLS握手。在1.3版本中,它只需要一个往返, 这反过来又将加密延迟减少了一半。这有助于使那些加密的连接比以前更灵活。

具体来说,在TLS 1.2的第二次往返中,客户机Hello和服务器Hello消息与密钥交换消息相结合。

0-RTT恢复

TLS1.3通过引入early_data扩展0-RTT恢复与先前访问的网站的会话 ,对于恢复的会话,在发送应用程序数据之前没有握手过程。它允许客户端将应用程序数据与第一个握手消息一起发送。相比之下,TLS 1.2在发送应用程序数据之前需要一个RTT。

在TLS 1.2中,有两种恢复连接的方法:会话ID和会话票据。TLS 1.3把这俩结合在一起形成了新模式,称为PSK(预共享密钥)恢复。具体是,在建立会话之后,客户端和服务器可以派生一个共享的密钥,叫做“恢复主密钥”。可以将其存储在服务器上(会话ID的形式),也可以使用仅服务器已知的密钥进行加密(会话票据形式)。此会话票据将发送给客户端,并在恢复连接时进行交换。

对于恢复连接,双方共享恢复的主密钥,不需要进行密钥交换。客户端下一次连接到服务器时,它可以从上一个会话中获取密钥,并使用它来加密应用程序数据和会话票据一起发送到服务器。具体如图:

0-RTT恢复不具有前向安全性,且消息可能被用作重放攻击,所以安全性较低,需慎重使用。

0-RTT 重放攻击原理

这里借用cloudflare的原理图

如果攻击者捕获了发送到服务器的0-RTT数据包,则他们可以重放该数据包,并且服务器可能会将其视为有效。这可能会产生负面后果。

0x03 参考文献

TLS 1.3 in Practice: How TLS 1.3 Contributes to the Internet

详细了解RFC 8446(又名TLS 1.3)

TLS Session Resumption: Full-speed and Secure

“历史遗留”漏洞:浅析新型SSL/TLS漏洞FREAK

HTTPS 温故知新(三) —— 直观感受 TLS 握手流程(上)

TLS 详解握手流程

简介TLS 1.3的更多相关文章

  1. 基于TLS的反调试技术

    TLS(Thread Local Storage 线程局部存储) 一个进程中的每个线程在访问同一个线程局部存储时,访问到的都是独立的绑定于该线程的数据块.在PEB(进程环境块)中TLS存储槽共64个( ...

  2. Python Web学习笔记之SSL,TLS,HTTPS

    一. SSL 1. SSL简介 SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持.SSL协议可分为两层: SSL记录协议(SSL Record Protocol):它建立在可 ...

  3. netty系列之:让TLS支持http2

    目录 简介 TLS的扩展协议NPN和ALPN SslProvider ApplicationProtocolConfig 构建SslContext ProtocolNegotiationHandler ...

  4. nginx配置多个TLS证书,以及TLS SNI简介

    背景 原来申请的正式域名备案通过,TLS证书也申请了.之前使用的临时域名和证书作为测试环境使用.于是要在单个ECS主机上配置nginx多个证书和多个域名. 实践 nginx部署多个TLS证书很简单,在 ...

  5. ASP.NET Core 1.1 简介

    ASP.NET Core 1.1 于2016年11月16日发布.这个版本包括许多伟大的新功能以及许多错误修复和一般的增强.这个版本包含了多个新的中间件组件.针对Windows的WebListener服 ...

  6. HTTPS简介

    一.简单总结 1.HTTPS概念总结 HTTPS 就是对HTTP进行了TLS或SSL加密. 应用层的HTTP协议通过传输层的TCP协议来传输,HTTPS 在 HTTP和 TCP中间加了一层TLS/SS ...

  7. ASP.NET Core 1.1 Preview 1 简介(包含.NETCore 1.1升级公告)

    ASP.NET Core 1.1 Preview 1于2016年10月25日发布.这个版本包括许多伟大的新功能以及许多错误修复和一般的增强. 要将现有项目更新到ASP.NET Core 1.1 Pre ...

  8. Centos6 yum安装openldap+phpldapadmin+TLS+双主配置

    原文地址:http://54im.com/openldap/centos-6-yum-install-openldap-phpldapadmin-tls-%E5%8F%8C%E4%B8%BB%E9%8 ...

  9. HTTPS协议简介

    一.HTTPS简介 百度已经于近日上线了全站 HTTPS 的安全搜索,默认会将 HTTP 请求跳转成 HTTPS.本文重点介绍 HTTPS 协议, 并简单介绍部署全站 HTTPS 的意义. HTTPS ...

随机推荐

  1. fixed实现遮罩层,小程序

    css /** 分享微信,分享朋友圈 **/ .goods_share_mask { background-color: rgba(0, 0, 0, 0.3); position: fixed; to ...

  2. 微信小程序:快速新增页面和组件的方法

    一.快速新增页面的方法: 1.在vscode中的app.json文件中的pages数组的第一行新增一个路径,如: 2.在微信开发者工具中的app.json中的新增一个空格,然后保存,就会生成一个新的页 ...

  3. @Transaction注解失效的几种场景

    一.@Transactional介绍 1.@Transactional注解可以作用于哪些地方? @Transactional 可以作用在接口.类.类方法上. 作用于类:表示所有该类的public方法都 ...

  4. 如何读写拥有命名空间xmlns 属性的Xml文件(C#实现)

    我们在进行C#项目Xml读写开发时经常遇到一些读写问题,今天我要介绍的是遇到多个命名空间xmlns属性时如何读写此类文件. 比如下面这个Xml文件: <?xml version="1. ...

  5. 微信小程序弹出框滚动穿透问题

    1.在你的遮罩层最外层加 catchtouchmove="noneEnoughPeople" 里面是你的方法名2.noneEnoughPeople: function () { c ...

  6. MySQL深入研究--学习总结(2)

    前言 接上文,继续学习后续章节. 第四章&第五章<深入浅出索引> 这两章节主要介绍的索引结构及其如何合理建立索引,但是我觉得讲的比较简单. 总结回顾下吧,其实在我之前的文章< ...

  7. Chome 88如何正确隐藏 webdriver?

    从 Chrome 88开始,它的 V8 引擎升级了,一些接口发生了改变. 使用 Selenium 调用 Chrome 的时候,只需要增加一个配置参数: chrome_options.add_argum ...

  8. MySql数据库列表数据分页查询、全文检索API零代码实现

    数据条件查询和分页 前面文档主要介绍了元数据配置,包括表单定义和表关系管理,以及表单数据的录入,本文主要介绍数据查询和分页在crudapi中的实现. 概要 数据查询API 数据查询主要是指按照输入条件 ...

  9. apicloud打包的ios证书的获取方法

    apicloud云编译的时候,需要测试证书或者正式证书进行编译. 那么这个证书是怎么来的呢?通过什么渠道可以获取呢? 这里我介绍下使用香蕉云编这个在线工具来生成: 1.登录香蕉云编,生成证书的csr文 ...

  10. 04-Spring自定义标签解析

    自定义标签的解析 这一篇主要说明自定义标签的解析流程,除了 bean.alias.import.beans之外的标签,都属于自定义标签的范围,自定义标签的解析需要命名空间配合, 获取对应的命名空间 根 ...