1. Introduction (简介)
TLS 的主要目标是在两个通信 peer 之间提供安全信道. 底层传输唯一需要满足的条件是提供可靠且有序的数据流. 具体而言, 安全信道应提供以下属性:
- Authentication (认证): 信道的 server 侧始终会被认证, client 侧可选认证. 认证可以通过非对称密码学完成, 例如 RSA [RSA], Elliptic Curve Digital Signature Algorithm (ECDSA) [ECDSA], Edwards-Curve Digital Signature Algorithm (EdDSA) [RFC8032], 也可以通过对称 pre-shared key (PSK) 完成.
- Confidentiality (机密性): 信道建立后发送的数据只对 endpoint 可见. TLS 不隐藏所传输数据的长度, 但 endpoint 可以填充 TLS record, 以模糊长度并提升对流量分析技术的防护.
- Integrity (完整性): 信道建立后发送的数据不能被攻击者修改而不被检测到.
即使攻击者能够完全控制网络, 如 [RFC3552] 所述, 这些属性也应成立. 更完整的安全属性说明见 Appendix E.
TLS 由两个主要组件组成:
- Handshake protocol (握手协议): 对通信双方进行认证, 协商密码模式和参数, 并建立共享 keying material. handshake protocol 设计为能够抵抗篡改, 主动攻击者不应能迫使 peer 协商出与无攻击连接不同的参数.
- Record protocol (记录协议): 使用 handshake protocol 建立的参数保护通信 peer 之间的流量. record protocol 将流量划分为一系列 record, 每个 record 使用 traffic key 独立保护.
TLS 独立于应用协议. 更高层协议可以透明地构建在 TLS 之上. 但是, TLS 标准不规定协议如何通过 TLS 添加安全性. 如何启动 TLS handshake, 以及如何解释交换的认证证书, 留给运行在 TLS 之上的协议设计者和实现者判断.
本文档定义 TLS version 1.3. TLS 1.3 不直接兼容先前版本, 但所有 TLS 版本都包含版本机制, 允许 client 和 server 在双方都支持某个公共版本时进行互操作协商.
本文档取代并废弃先前的 TLS 版本, 包括 version 1.2 [RFC5246]. 它还废弃 [RFC5077] 中定义的 TLS ticket 机制, 并以第 2.2 节定义的机制替代. 由于 TLS 1.3 改变了密钥派生方式, 它按第 7.5 节所述更新 [RFC5705]. 它还改变了 Online Certificate Status Protocol (OCSP) 消息的承载方式, 因而按第 4.4.2.1 节所述更新 [RFC6066] 并废弃 [RFC6961].
1.1 Conventions and Terminology (约定和术语)
本文档中的关键词 "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", 和 "OPTIONAL" 只有在如这里所示全部大写出现时, 才按 BCP 14 [RFC2119] [RFC8174] 的说明解释.
本文档使用以下术语:
client: 发起 TLS connection 的 endpoint.
connection: 两个 endpoint 之间的 transport-layer connection.
endpoint: connection 的 client 或 server.
handshake: client 和 server 之间的初始协商, 用于建立它们随后在 TLS 内交互所需的参数.
peer: 一个 endpoint. 当讨论某个特定 endpoint 时, "peer" 指不是当前主要讨论对象的另一个 endpoint.
receiver: 接收 record 的 endpoint.
sender: 发送 record 的 endpoint.
server: 未发起 TLS connection 的 endpoint.
1.2 Major Differences from TLS 1.2 (相对 TLS 1.2 的主要差异)
以下列出 TLS 1.2 和 TLS 1.3 的主要功能差异. 该列表并非穷尽, 还有许多较小差异.
- 支持的对称加密算法列表移除了所有被视为遗留的算法. 保留的算法都是 Authenticated Encryption with Associated Data (AEAD) 算法. cipher suite 概念也发生变化, 将认证和密钥交换机制与 record protection algorithm, secret key length, 以及用于 key derivation function 和 handshake message authentication code (MAC) 的 hash 分离.
- 添加 zero round-trip time (0-RTT) 模式, 在某些应用数据的连接建立阶段节省一次往返, 但会牺牲部分安全属性.
- 移除 static RSA 和 Diffie-Hellman cipher suite. 所有基于 public-key 的 key exchange 机制现在都提供 forward secrecy.
- ServerHello 之后的所有 handshake message 现在都会加密. 新引入的 EncryptedExtensions 消息使此前在 ServerHello 中明文发送的各种 extension 也能获得机密性保护.
- key derivation function 被重新设计. 新设计由于具备更好的 key separation 属性, 更便于密码学家分析. 底层原语使用 HMAC-based Extract-and-Expand Key Derivation Function (HKDF).
- handshake state machine 被显著重构, 以提高一致性并移除 ChangeCipherSpec 等多余消息, 但中间盒兼容需要时除外.
- elliptic curve algorithm 现在属于基础规范, 并包含 EdDSA 等新的 signature algorithm. TLS 1.3 移除了 point format negotiation, 改为每条曲线使用单一 point format.
- 其他密码学改进包括将 RSA padding 改为 RSA Probabilistic Signature Scheme (RSASSA-PSS), 以及移除 compression, Digital Signature Algorithm (DSA), 和自定义 Ephemeral Diffie-Hellman (DHE) group.
- TLS 1.2 version negotiation mechanism 已被弃用, 改为通过 extension 中的版本列表协商. 这提升了与错误实现版本协商的现有 server 的兼容性.
- 早期 TLS 版本中带 server-side state 和不带 server-side state 的 session resumption, 以及基于 PSK 的 cipher suite, 已被单一的新 PSK exchange 替代.
- 引用已经更新为指向 RFC 的更新版本, 例如 RFC 5280 而不是 RFC 3280.
1.3 Updates Affecting TLS 1.2 (影响 TLS 1.2 的更新)
本文档定义若干可选影响 TLS 1.2 实现的变更, 包括不支持 TLS 1.3 的实现:
- 第 4.1.3 节描述 version downgrade protection mechanism.
- 第 4.2.3 节定义 RSASSA-PSS signature scheme.
- "supported_versions" ClientHello extension 可用于协商要使用的 TLS 版本, 优先于 ClientHello 的 legacy_version 字段.
- "signature_algorithms_cert" extension 允许 client 指示它可在 X.509 certificate 中验证哪些 signature algorithm.
此外, 本文档澄清早期 TLS 版本的一些合规要求. 见第 9.3 节.