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概述的更多相关文章

  1. [转帖]TLS 版本问题

    转帖 From https://www.cnblogs.com/xjnotxj/p/7252043.html 一.环境: CentOS 6.8nginx 1.6.0php 7.0.10 二.背景 最近 ...

  2. [转帖]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 又拍 ...

  3. [转帖]TLS握手:回顾1.2、迎接1.3

    TLS握手:回顾1.2.迎接1.3 novsec2019-05-10共26541人围观 ,发现 2 个不明物体网络安全 *本文原创作者:novsec,本文属于FreeBuf原创奖励计划,未经许可禁止转 ...

  4. SSL/TLS协议概览

    SSL/TLS协议是什么 计算机网络的OSI七层模型和TCP/IP四层模型想必大家都知道.其中SSL/TLS是一种介与于传输层(比如TCP/IP)和应用层(比如HTTP)的协议.它通过"握手 ...

  5. TLS示例开发-golang版本

    目录 前言 制作自签名证书 CA 服务器证书相关 客户端证书相关 证书如何验证 在浏览器中导入证书 导入证书 修改域名 golang服务端 目录 main.go 测试 参考 前言 在进行项目总结的时候 ...

  6. 假如让你来设计SSL/TLS协议,你要怎么设计呢?

    摘要:本文将从设计者的视角介绍如何一步步设计出一个简易版的 SSL/TLS 的过程,在文章的最后,再简单介绍 TLS 1.2 版本的工作机制,以此帮助大家对 SSL/TLS 协议的基本原理有一个更深入 ...

  7. 机器学习——Logistic回归

    参考<机器学习实战> 利用Logistic回归进行分类的主要思想: 根据现有数据对分类边界线建立回归公式,以此进行分类. 分类借助的Sigmoid函数: Sigmoid函数图: Sigmo ...

  8. SSL/TLS协议运行机制的概述_转

    转自:SSL/TLS协议运行机制的概述 作者: 阮一峰 日期: 2014年2月 5日 互联网的通信安全,建立在SSL/TLS协议之上. 本文简要介绍SSL/TLS协议的运行机制.文章的重点是设计思想和 ...

  9. [转帖]图解SSL/TLS协议

    图解SSL/TLS协议   作者: 阮一峰 日期: 2014年9月20日 感谢 腾讯课堂NEXT学院 赞助本站,腾讯官方的前端课程 免费试学. http://www.ruanyifeng.com/bl ...

随机推荐

  1. SpringCloud-容错处理Hystrix熔断器(五)

    前言:微服务架构应用的特点就是多服务,而服务层之间通过网络进行通信,从而支撑起整个应用系统,所以,各个微服务之间不可避免的存在耦合依赖关系.但任何的服务应用实例都不可能永远的健康或网络不可能永远的都相 ...

  2. 浅谈__dict__

    类的 __dict__ 先看一个例子: > class A(object): pass > ... > A.__dict__ dict_proxy({'__dict__': < ...

  3. Maven 依赖节点总结

    首先是log4j: <!--哎,神特么的log4j,版本不对就Spring AOP前置增强 new不出来--><dependency> <groupId>log4j ...

  4. node.js学习笔记(三)——事件循环

    要理解事件循环,首先要理解事件驱动编程(Event Driven Programming).它出现在1960年.如今,事件驱动编程在UI编程中大量使用.JavaScript的一个主要用途是与DOM交互 ...

  5. loadrunner使用过程中的问题记录

    一.录制时选错应用类型,导致提示“loadrunner sockets proxy auto-starter mercury interactive corp.(2002)” 解决办法:重新选择正确的 ...

  6. Jmeter+ant+jenkins接口自动化测试 平台搭建(二)

    一.依赖文件配置 1.在ant目录C:\apache-ant-1.10.5下新建一个demo文件夹,并将jmeter测试脚本放在该文件夹中 2.将\apache-jmeter-3.3\extras下面 ...

  7. 关于Netty的学习前总结

    摘要 前段时间一直在学习netty因为工作忙的原因没有写一个学习的总结,今天抽个空先把总结写了吧.事先声明,本文不会详细的介绍每一个部分不过每个部分都会附上讲解详细的url.本文只是为了解释通Nett ...

  8. 【转】新装的CentOS 7安装python3

    https://blog.csdn.net/lovefengruoqing/article/details/79284573 centos7 自带有 python,但是却是 python2 版本的 p ...

  9. Python读取文件编码解码问题

    用chardet检测编码 import chardet raw = open("model.json", 'rb').read() result = chardet.detect( ...

  10. springboot 前后端分离开发 从零到整(四、更改密码操作)

    前端发送更改密码请求,头部携带token,服务端拦截器拦截头部token并解析,根据token中的信息来查询用户信息.需要登录才能进行的操作是由自己定的,有些操作可以直接放行.具体实现是: 上一章写到 ...