TLS 1.3概览
本文详细介绍了 TLS 1.3 的产生背景、命名原因、以及其重大改变等信息。
TLS 1.3 产生背景
安全传输层协议(Transport Layer Security,简称 TLS )自标准化从 1999 年发布Secure Sockets Layer(SSL)的升级版 TLS 1.0 版,2006 年升级 TLS 1.1 版,2008 年升级为目前广泛使用的 TLS 1.2 版,到 2011 年发布的 TLS 1.2 修订版,至今已有近 20 年的时间。
TLS 是保障网络传输安全及数据完整性的一种安全协议,在传输层上对网络连接进行加密。然而,由于 TLS 的广泛应用,使之成为众矢之的,并通过以下途径进行的攻击:
- 利用 TLS 自身存在的不足(如:三次握手攻击、跨协议攻击等)
- 利用 TLS 所用密码原语本身的缺陷(如:RC4 加密、RSA-PKCS#1 v1.5 加密等)
- 利用 TLS 实现库中的漏洞(如:心脏出血攻击等)进行攻击。
面对这一系列的攻击,我们一贯的措施是“打补丁”,即针对新的攻击做新的修补。但 TLS 的应用规模过于庞大,这种措施在实际应用中并不容易全面实施。除此之外,交互双方还要必须经过复杂的 TLS 握手协议才能开始传输信息。出于种种因素的考虑, IETF 组于 2014 年制定 TLS 1.3版,目前最新版本是 2017 年 3 月发布的 TLS 1.3 draft 19 草案版。
TLS 1.3 的命名
TLS 1.3 是 TLS 标准更新过程中变动最大的一次,除了对于运行过程中的若干问题如密码套件的选择、密钥的计算方式、握手消息的发送方式等做了更改之外,TLS 1.3 还增加了新的握手模式,以满足不同应用场景下的需求。
然而,TLS 新标准的名称不是 TLS 2.0 或者其他,而是 TLS 1.3,说明 1.3 是之前版本的升级,TLS 协议的大致框架并未发生本质改变(参见下方 TLS 1.2 和 TLS 1.3握手协议对比图)。
TLS 1.3 的重大改变
与之前版本类似,TLS 1.3 协议可分为握手协议和记录协议,前者负责密码组件的协商以及安全信道的建立,后者则是在已建立的安全信道中传输秘密信息。TLS 1.3 设计的第一个重要目标就是避免之前版本存在的缺陷。相关的改动如下:
- 禁止使用 RSA 密钥传输算法。
- 禁止使用一些安全性较弱的密码原语,如:MD5。
- 不再支持重协商握手模式。
- 握手消息采取了加密操作。
- 实现握手协议和记录协议的密钥分离,使 TLS 1.3 实现密钥不可区分性质的证明。
- 实现会话密钥与整个握手消息的绑定,使 TLS 避免三次握手攻击。
- 记录层只能使用 Authenticated Encryption with Additional Data(AEAD)认证加密模式。
相应的改动还有很多,这些改动不仅可以避免之前版本存在的问题,还使 TLS 的可证明安全分析工作更加方便,这点在 TLS 1.2 中,由于握手协议和记录协议的重叠,无法实现这一目标的证明。
从目前发布的最新草案来看,TLS 1.3 主要支持四种握手模式:
- 基于(EC)DHE 密钥交换的握手模式
- 基于 PSK 的会话重启,由预共享密钥 PSK 进行快速简短的握手
- 会话重启与(EC)DHE 结合的握手,可以提供前向安全性
- 会话重启与(EC)DHE 结合的握手,可以提供前向安全性
- 基于 PSK 的 0-RTT(round-trip time)握手,客户端利用 PSK 导出密钥,在第一轮就发送秘密数据,降低了握手的延迟。在此之后还可以继续进行(EC)DHE 的密钥交换完成完整的握手(该步为可选)。
注意:第 2、3 和 4 握手模式的区别仅在于是否在第一轮就传输秘密数据。
另外,TLS 1.3 还定义了一种特殊的认证方式,后握手认证(post-handshakeauthentication),在 TLS 握手过程中,客户端的认证是可选的。所谓后握手认证指的是握手结束后,允许服务器在任何时刻向客户端发起身份认证的申请,作为回复,客户端会发送证书以及对本次连接握手内容的签名。除此之外,还会发送密钥确认消息以提供对整个握手消息和会话密钥的确认。该条认证消息是在记录层的安全信道中传输的。
更多信息
TLS 1.3 draft 19 草案版本发布之后,起草者 Eric Rescorla 在讨论列表中列出了仍待解决的问题供大家讨论,可见对于 TLS 1.3 的研究也是未来的热点方向。同时,TLS 1.2仍然是目前甚至未来相当一段时间内被普遍使用或者兼容的 TLS 版本。