[转帖]TLS 1.3概述
TLS 1.3概述
http://www.inforsec.org/wp/?p=1960
作者:李新宇 中科院软件所
TLS 1.3是IETF正在制定的TLS 新标准。TLS 自标准化至今已有近20年的时间,自1999年TLS 1.0标准颁布,到后来的TLS 1.1(2006年)和目前得到广泛使用的TLS 1.2(2008年),TLS是保障网络传输安全最重要的安全标准之一。然而,广泛的应用也使得TLS成为了攻击的“众矢之的”,这些攻击或利用TLS设计本身存在的不足(如幸运十三攻击[1]、三次握手攻击[2]、跨协议攻击 [3]等),或利用TLS所用密码原语本身的缺陷(如RC4加密 [4]、RSA-PKCS#1 v1.5加密 [5]等),或利用TLS实现库中的漏洞(如心脏出血攻击[6]等)。面对这一系列的攻击,一直以来我们采取的措施是“打补丁”,即针对新的攻击做新的修补。然而,由于TLS的应用规模过于庞大,不断地打补丁在如此大规模的实际应用中并不容易全面实施。除此之外,交互双方必须运行复杂的TLS握手协议才能开始传输信息,很多情况下我们希望在握手轮数和握手延迟方面可以有更多的选择。出于以上以及其他种种因素的考虑,IETF从2014年开始着手制定一个“clean”的TLS1.3。
问题一:TLS 1.3的制定过程
TLS 1.3的制定过程是“透明”的,即IETF发布的草案中会留下若干问题,相关领域的专家学者可以就这些问题或者自己有疑问的其他问题通过邮件系统进行在线讨论[7],而讨论结果也会在更新后的草案版本中有所体现。目前最新发布的草案版本是TLS 1.3 draft 19 [8](2017年3月)。
除此之外,近两年也出现了一系列对TLS 1.3草案的分析工作,如[9-13],在标准正式颁布之前,这对于我们对TLS的全面理解以及TLS安全防护的设计是大有帮助的。
问题二:为什么是TLS 1.3
有一个比较有趣的细节,TLS新标准的名字并不是TLS 2.0或者其他名字,而是TLS 1.3,即延续了TLS 1.0、1.1和1.2的名称。这说明1.3是之前版本的升级,TLS 协议的大致框架并未发生本质改变。下面两图为TLS 1.2和TLS 1.3握手协议的对比(细节请参照标准文档)。然而,TLS 1.3是TLS标准更新过程中变动最大的一次,除了对于运行过程中的若干问题如密码套件的选择、密钥的计算方式、握手消息的发送方式等做了更改之外,TLS 1.3还增加了新的握手模式,以满足不同应用场景下的需求。

图一:TLS 1.2握手框架

图二:TLS 1.3握手框架
问题三:TLS 1.3做出了哪些重大改动
与之前版本类似,TLS 1.3协议可分为握手协议和记录协议,前者负责密码组件的协商以及安全信道的建立,后者则是在已建立的安全信道中传输秘密信息。TLS 1.3设计的第一个重要目标就是避免之前版本存在的缺陷,为此,一部分相关的改动如下:
(1)禁止使用RSA密钥传输算法。
(2)禁止一些安全性较弱的密码原语如MD5的使用。
(3)不再支持重协商握手模式。
(4)握手消息采取了加密操作,如图二中标有{}的部分。
(5)实现了握手协议和记录协议的密钥分离。
(6)实现了会话密钥与整个握手消息的绑定。
(7)记录层只能使用AEAD(Authenticated Encryption with Additional Data)认证加密模式。
相应的改动还有很多,新发布的草案中也会明确说明相比之前版本所做的改动。这些改动不仅可以避免之前版本存在的问题,如(6)使得TLS可以避免三次握手攻击。同时,也使得TLS的可证明安全分析工作更加方便,如(5)使得TLS 1.3可以实现密钥不可区分性质的证明,而在TLS1.2中,由于握手协议和记录协议的重叠,无法实现这一目标的证明。
从目前发布的最新草案来看,TLS 1.3主要支持四种握手模式:(1)基于(EC)DHE密钥交换的握手模式;(2)基于PSK的会话重启,由预共享密钥PSK进行快速简短的握手;(3)会话重启与(EC)DHE结合的握手,可以提供前向安全性;(4)基于PSK的0-RTT(round-trip time)握手,客户端利用PSK导出密钥,在第一轮就发送秘密数据,降低了握手的延迟。在此之后还可以继续进行(EC)DHE的密钥交换完成完整的握手(该步为可选)。注意到,0-RTT握手第一轮中加密数据所使用的密钥并没有服务器的贡献,因此可能存在重放攻击。另外,握手模式(4)与(2)或者(3)的区别仅在于是否在第一轮就传输秘密数据。
另外,TLS 1.3还定义了一种特殊的认证方式:后握手认证(post-handshake authentication)。在TLS握手过程中,客户端的认证是可选的,所谓后握手认证指的是握手结束后,允许服务器在任何时刻向客户端发起身份认证的申请,作为回复,客户端会发送证书以及对本次连接握手内容的签名,除此之外,还会发送密钥确认消息以提供对整个握手消息和会话密钥的确认。该条认证消息是在记录层的安全信道中传输的。
总结:
TLS 1.3 draft 19发布之后,起草者Eric Rescorla在讨论列表中列出了仍待解决的问题供大家讨论 [14],由此可见TLS 新标准的制定工作仍然在进行中,而对于TLS 1.3的研究也会成为未来的热点方向。与此同时,TLS 1.2仍然是目前甚至未来相当一段时间内被普遍使用或者兼容的TLS 版本,这可能导致TLS 1.2对TLS 1.3的安全性带来影响,这也是未来研究的重要方向。
[转帖]TLS 1.3概述的更多相关文章
- [转帖]TLS 版本问题
转帖 From https://www.cnblogs.com/xjnotxj/p/7252043.html 一.环境: CentOS 6.8nginx 1.6.0php 7.0.10 二.背景 最近 ...
- [转帖]TLS 1.3 VS TLS 1.2,让你明白 TLS 1.3 的强大
TLS 1.3 VS TLS 1.2,让你明白 TLS 1.3 的强大 https://www.jianshu.com/p/efe44d4a7501?utm_source=oschina-app 又拍 ...
- [转帖]TLS握手:回顾1.2、迎接1.3
TLS握手:回顾1.2.迎接1.3 novsec2019-05-10共26541人围观 ,发现 2 个不明物体网络安全 *本文原创作者:novsec,本文属于FreeBuf原创奖励计划,未经许可禁止转 ...
- SSL/TLS协议概览
SSL/TLS协议是什么 计算机网络的OSI七层模型和TCP/IP四层模型想必大家都知道.其中SSL/TLS是一种介与于传输层(比如TCP/IP)和应用层(比如HTTP)的协议.它通过"握手 ...
- TLS示例开发-golang版本
目录 前言 制作自签名证书 CA 服务器证书相关 客户端证书相关 证书如何验证 在浏览器中导入证书 导入证书 修改域名 golang服务端 目录 main.go 测试 参考 前言 在进行项目总结的时候 ...
- 假如让你来设计SSL/TLS协议,你要怎么设计呢?
摘要:本文将从设计者的视角介绍如何一步步设计出一个简易版的 SSL/TLS 的过程,在文章的最后,再简单介绍 TLS 1.2 版本的工作机制,以此帮助大家对 SSL/TLS 协议的基本原理有一个更深入 ...
- 机器学习——Logistic回归
参考<机器学习实战> 利用Logistic回归进行分类的主要思想: 根据现有数据对分类边界线建立回归公式,以此进行分类. 分类借助的Sigmoid函数: Sigmoid函数图: Sigmo ...
- SSL/TLS协议运行机制的概述_转
转自:SSL/TLS协议运行机制的概述 作者: 阮一峰 日期: 2014年2月 5日 互联网的通信安全,建立在SSL/TLS协议之上. 本文简要介绍SSL/TLS协议的运行机制.文章的重点是设计思想和 ...
- [转帖]图解SSL/TLS协议
图解SSL/TLS协议 作者: 阮一峰 日期: 2014年9月20日 感谢 腾讯课堂NEXT学院 赞助本站,腾讯官方的前端课程 免费试学. http://www.ruanyifeng.com/bl ...
随机推荐
- 【JLOI2013】卡牌游戏
题面 题解 概率$dp$ 设$f[i][j]$表示还剩$i$个人时,第$j$个人获胜的概率. 边界$f[1][1] = 1$ 转移: 枚举庄家抽到的卡牌$k$,得到这一轮被淘汰的位置$c$. 可以知道 ...
- Webpack之Code Splitting 代码分块
如何实现代码分块 默认情况webpack会将资源文件打包成一个js文件,比如app.bundle.js 实际情况我们需要按需加载 方法如下: require.ensure(dependencies, ...
- Python之面向对象的组合、多态、菱形问题、子类中重用父类的两种方式
一.组合 ''' 1.什么是组合 组合就是一个类的对象具备某一个属性,该属性的值是指向另外一个类的对象 2.为何用组合 组合也是用来解决类与类直接代码冗余问题的 3.如何用组合 ''' # 继承减少代 ...
- python 另一种打开文章的方式——codecs
通常我们使用python打开文件都是 open(‘beijing.txt’)或者是 with open(‘beijing.txt’)as f 那么今天来给你带来一个新的文档打开方式 python的co ...
- 如何打war包和jar包
1.jar包的导出 答:右键项目,export—jarfile 生成. 2.war包的导入 答:方法一:右键项目,export—WAR file 生成. 方法二:[ant文件]—[deploy-be ...
- 什么是Gradle
一.什么是Gradle 简单的说,Gradle是一个构建工具,它是用来帮助我们构建app的,构建包括编译.打包等过程.我们可以为Gradle指定构建规则,然后它就会根据我们的“命令”自动为我们构建ap ...
- QTP日常积累
1.init同步测试对象 同步测试对象: CODE: Browser("百度一下,你就知道").Page("百度一下,你就知道").WebEdit(" ...
- python爬虫之解析库正则表达式
上次说到了requests库的获取,然而这只是开始,你获取了网页的源代码,但是这并不是我们的目的,我们的目的是解析链接里面的信息,比如各种属性 @href @class span 抑或是p节点里 ...
- fiddler抓包工具教程
Fiddler是一个蛮好用的抓包工具,可以将网络传输发送与接受的数据包进行截获.重发.编辑.转存等操作.也可以用来检测网络安全.反正好处多多,举之不尽呀!当年学习的时候也蛮费劲,一些蛮实用隐藏的小功能 ...
- 使用云负载时将http的请求转发至https时报错:“ERR_TOO_MANY_REDIRECTS”!
问题描述: 新业务正式环境部署,使用云负载(有http监听也有https监听)在我向我的 Web 服务器添加重定向逻辑后,我的网站停止工作,并且我收到错误 ERR_TOO_MANY_REDIRECTS ...