简介TLS 1.3
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月完成。
安全性提高
- 废除不支持前向安全性的 RSA 和 DH 密钥交换算法;
- MAC 只使用 AEAD 算法;
- 禁用 RC4 / SHA1 等不安全的算法;
- 加密握手消息;
- 兼容中间设备 TLS 1.2;
- 加密握手消息。
另外,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
TLS Session Resumption: Full-speed and Secure
HTTPS 温故知新(三) —— 直观感受 TLS 握手流程(上)
简介TLS 1.3的更多相关文章
- 基于TLS的反调试技术
TLS(Thread Local Storage 线程局部存储) 一个进程中的每个线程在访问同一个线程局部存储时,访问到的都是独立的绑定于该线程的数据块.在PEB(进程环境块)中TLS存储槽共64个( ...
- Python Web学习笔记之SSL,TLS,HTTPS
一. SSL 1. SSL简介 SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持.SSL协议可分为两层: SSL记录协议(SSL Record Protocol):它建立在可 ...
- netty系列之:让TLS支持http2
目录 简介 TLS的扩展协议NPN和ALPN SslProvider ApplicationProtocolConfig 构建SslContext ProtocolNegotiationHandler ...
- nginx配置多个TLS证书,以及TLS SNI简介
背景 原来申请的正式域名备案通过,TLS证书也申请了.之前使用的临时域名和证书作为测试环境使用.于是要在单个ECS主机上配置nginx多个证书和多个域名. 实践 nginx部署多个TLS证书很简单,在 ...
- ASP.NET Core 1.1 简介
ASP.NET Core 1.1 于2016年11月16日发布.这个版本包括许多伟大的新功能以及许多错误修复和一般的增强.这个版本包含了多个新的中间件组件.针对Windows的WebListener服 ...
- HTTPS简介
一.简单总结 1.HTTPS概念总结 HTTPS 就是对HTTP进行了TLS或SSL加密. 应用层的HTTP协议通过传输层的TCP协议来传输,HTTPS 在 HTTP和 TCP中间加了一层TLS/SS ...
- 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 ...
- Centos6 yum安装openldap+phpldapadmin+TLS+双主配置
原文地址:http://54im.com/openldap/centos-6-yum-install-openldap-phpldapadmin-tls-%E5%8F%8C%E4%B8%BB%E9%8 ...
- HTTPS协议简介
一.HTTPS简介 百度已经于近日上线了全站 HTTPS 的安全搜索,默认会将 HTTP 请求跳转成 HTTPS.本文重点介绍 HTTPS 协议, 并简单介绍部署全站 HTTPS 的意义. HTTPS ...
随机推荐
- 从Java的堆栈到Equals和==的比较
以下为链接 https://www.2cto.com/kf/201503/383832.html 栈与堆都是Java用来在Ram中存放数据的地方.与C++不同,Java自动管理栈和堆,程序员不能直接地 ...
- 【Notes_3】现代图形学入门——基础变换、MVP变换模型
基础变换(二维) 三维变化与二维变换矩阵类似 齐次坐标下的基础变换 Scale: \[S(s_x,s_y) =\begin{pmatrix} s_x &0 &0\\ 0 & s ...
- 微信小程序:给data中对象中的属性设置值与给data中的属性或对象或数组设置值的区别
一.给data中的属性或对象或数组设置值,属性名不需要加引号 this.setData({ material: param, // 这里material为对象 } this.setData({ d ...
- 微信小程序:页面生命周期
小程序生命周期分为应用生命周期和页面生命周期 1.Onload:页面加载时触发,一般在onLoad中发送异步请求来初始化页面数据. 2.onShow:页面显示时触发 3.onReady:页面初次渲染完 ...
- 🤔 移动端 JS 引擎哪家强?美国硅谷找......
如果你喜欢我写的文章,可以把我的公众号设为星标 ,这样每次有更新就可以及时推送给你啦 在一般的移动端开发场景中,每次更新应用功能都是通过 Native 语言开发并通过应用市场版本分发来实现的.但是市场 ...
- docker方式部署禅道
一.概述 使用docker方式部署禅道简单,快速,不容易出错.比起编译安装要方便很多. 二.部署 环境说明 操作系统:centos 7.6 ip地址:10.212.82.65 docker版本:19. ...
- 生产者与消费者以及ActiveMQ
生产者与消费者以及ActiveMQ 一. 多线程实现生产者与消费者 1.1 生产者与消费者头文件 #pragma once #include <iostream> #include < ...
- Java RPC 框架 Solon 1.3.7 发布,增强Cloud接口能力范围
Solon 是一个微型的Java RPC开发框架.项目从2018年启动以来,参考过大量前人作品:历时两年,4000多次的commit:内核保持0.1m的身材,超高的跑分,良好的使用体验.支持:RPC. ...
- HDOJ-1257(贪心/动态规划)
最少拦截系统 HDOJ-1257 我做这题的思路就是采用暴力或者贪心.也就是每次循环选出从第一个未被选择的元素开始,依次把后面可以选择的元素作为一个系统.最后统计可以有多少个系统. 还有人的思路就是利 ...
- 02----python入门----基本数据类型
关于数据分类依据 一.数字型(int) Python可以处理任意大小的正负整数,但是实际中跟我们计算机的内存有关,在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1,在64位系 ...