TLS 1.3概述

Wesley13
• 阅读 877

前言

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”的TLS 1.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.3概述 图一:TLS 1.2握手框架

TLS 1.3概述 图二: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可以实现密钥不可区分性质的证明,而在TLS 1.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的安全性带来影响,这也是未来研究的重要方向。

部分参考文献:

[1]AlFardan N J, Paterson K G. Lucky thirteen: Breaking the TLS and DTLS record protocols [C]. Proceedings of 2013 IEEE Symposium on Security and Privacy (S&P), 2013. 526–540.

[2]Bhargavan K, Lavaud A D, Fournet C, et al. Triple handshakes and cookie cutters: Breaking and fixing authentication over TLS [C]. Proceedings of 2014 IEEE Symposium on Security and Privacy (S&P), 2014. 98–113.

[3]Mavrogiannopoulos N, Vercauteren F, Velichkov V, et al. A cross-protocol attack on the TLS protocol[C]//Proceedings of the 2012 ACM conference on Computer and communications security. ACM, 2012: 62-72.

[4]AlFardan N J, Bernstein D J, Paterson K G, et al. On the Security of RC4 in TLS [C]. Proceedings of 22nd USENIX Security Symposium, 2013. 305–320.

[5]Bleichenbacher D. Chosen ciphertext attacks against protocols based on the RSA encryption standard PKCS #1 [C]. Advances in Cryptology—CRYPTO’98, 1998. 1–12.

[6]Codenomicon. The Heartbleed Bug [EB/OL]. http://heartbleed.com, April 2014.

[7]https://www.ietf.org/mail-archive/web/tls/current/maillist.html.

[8]Rescorla E. The Transport Layer Security (TLS) Protocol Version 1.3 - draft-ietf-tls-tls13-09[S]. https://tools.ietf.org/html/draft-ietf-tls-tls13-19, March, 2017.

[9]Dowling B, Fischlin M, Günther F, et al. A cryptographic analysis of the TLS 1.3 handshake protocol candidates [C]. Proceedings of the 22nd ACM SIGSAC Conference on Computer and Communications Security (CCS), 2015. 1197–1210.

[10]Cremers C, Horvat M, Scott S, et al. Automated analysis and verification of TLS 1.3: 0-RTT, resumption and delayed authentication[C]//Security and Privacy (SP), 2016 IEEE Symposium on. IEEE, 2016: 470-485.

[11]Fischlin M, Günther F, Schmidt B, et al. Key confirmation in key exchange: a formal treatment and implications for TLS 1.3[C]//Security and Privacy (SP), 2016 IEEE Symposium on. IEEE, 2016: 452-469.

[12]Li X, Xu J, Zhang Z, et al. Multiple handshakes security of TLS 1.3 candidates[C]//Security and Privacy (SP), 2016 IEEE Symposium on. IEEE, 2016: 486-505.

[13]Krawczyk H, Wee H. The OPTLS protocol and TLS 1.3[C]//Security and Privacy (EuroS&P), 2016 IEEE European Symposium on. IEEE, 2016: 81-96.

[14]https://www.ietf.org/mail-archive/web/tls/current/msg22593.html.

本文分享自微信公众号 - 百度安全实验室(BaiduX_lab)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Karen110 Karen110
3年前
一篇文章带你了解JavaScript日期
日期对象允许您使用日期(年、月、日、小时、分钟、秒和毫秒)。一、JavaScript的日期格式一个JavaScript日期可以写为一个字符串:ThuFeb02201909:59:51GMT0800(中国标准时间)或者是一个数字:1486000791164写数字的日期,指定的毫秒数自1970年1月1日00:00:00到现在。1\.显示日期使用
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Wesley13 Wesley13
3年前
TLS 1.3多重握手安全性研究
前言TLS(TransportLayerSecurity)作为SSL(SecureSocketsLayer)协议的后继者,是目前网络通信中应用最广泛的密码协议,也是把密码学应用到实际中最重要、最典型的实例之一。TLS1.2是目前最常用的TLS版本,主要用于保护通过HTTPs传输的信息,为各种应用提供安全的通信信道,比如电子货币交易
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这