0%

还没写完,可以先留言,写完会通知你

TLS 主要功能

TLS 协议为网络通信提供了以下两种功能:

  1. 建立一个安全的连接:对其中传输的数据提供加密保护,防止被中间人嗅探到可见明文;对数据提供完整性校验,防止传输的数据被中间人修改。
  2. 建立一个可信的连接:对连接双方的实体提供身份认证。

TLS 1.2

TLS 1.2 存在的问题

  1. 许多新的安全性漏洞被发现
  2. RTT 次数过多

TLS 1.2 主要功能实现

  1. 加密:用非对称加密算法 来加密一个 对称加密的密钥, 然后用这个对称加密的密钥来加密需要传递的数据
  2. 完整性校验:使用 MAC 对发送的报文进行完整性校验计算,先计算 MAC 再加密。在 TLS 1.2 中引入了更具有安全性的 AEAD 算法(同时完成加密和完整性校验)作为一个加密机制的备选选项 。
  3. 身份认证:所有的身份认证都基于证书公钥体系完成。

TLS 1.3

TLS 1.3 主要改变

  1. TLS 1.3 废弃了使用 MAC 的块加密和流加密机制,仅采用 AEAD 类对称加密算法作为唯一的加密选项。
  2. TLS 1.3 引入了一种新的密钥协商机制——PSK。
  3. 支持 0-RTT 数据传输
  4. 废弃了 3DES、RC4、AES-CBC 等加密组件。废弃了 SHA1、MD5 等哈希算法。
  5. 不再允许对加密报文进行压缩、不再允许双方发起重协商,密钥的改变不再需要发送 change_cipher_spec 报文给对方。
  6. 握手阶段的报文可见明文大大减少。

TLS 1.3 子协议

  1. handshake 协议负责协商使用的 TLS 版本、加密算法、哈希算法、密钥材料和其他与通信过程有关的信息,对服务器进行身份认证,对客户端进行可选的身份认证,最后对整个握手阶段信息进行完整性校验以防范中间人攻击,是整个 TLS 协议的核心。
  2. record 协议负责对接收到的报文进行加密解密,将其分片为合适的长度后转发给其他协议层。
  3. alert 协议负责处理消息传输与握手阶段中的异常情况。

此前的协议中还定义了一个子协议 change_cipher_spec 来决定何时对传递的数据进行加密,TLS 1.3 取消了这一机制,密钥的使用和改变随着服务器和客户端状态的改变自然进行。

PSK(pre_shared_key)新的密钥交换暨身份认证机制

  1. 0-RTT:客户端和服务端的一次交互(客户端发一个报文,服务端回应一个报文)叫做一个 RTT,TLS 1.2 普遍采用 2-RTT 的握手过程,服务器延迟明显。因此 TLS 1.3 引入了一种 0-RTT 的机制,即在刚开始 TLS 密钥协商的时候,就能附送一部分经过加密的数据传递给对方。
  2. 为了实现 0-RTT,需要双方在刚开始建立连接的时候就已经持有一个对称密钥,这个密钥在 TLS 1.3 中称为 PSK(pre_shared_key)。
  3. PSK 是 TLS 1.2 中的 rusumption 机制的一个升级,TLS 握手结束后,服务器可以发送一个 NST(new_session_ticket)的报文给客户端,该报文中记录 PSK 的值、名字和有效期等信息,双方下一次建立连接可以使用该 PSK 值作为初始密钥材料。
  4. 因为 PSK 是从以前建立的安全信道中获得的,只要证明了双方都持有相同的 PSK,不再需要证书认证,就可以证明双方的身份,因此,PSK 也是一种身份认证机制。

ps: 0-RTT 的实现有一定的安全缺陷,自身没有抗重放攻击的机制

HKDF(HMAC_based_key_derivation_function)新的密钥导出函数

  1. 经过密钥协商得出来的密钥材料因为随机性可能不够,协商的过程能被攻击者获知,需要使用一种密钥导出函数来从初始密钥材料(PSK 或者 DH 密钥协商计算出来的 key)中获得安全性更强的密钥。
  2. HKDF 正是 TLS 1.3 中所使用的这样一个算法,使用协商出来的密钥材料和握手阶段报文的哈希值作为输入,可以输出安全性更强的新密钥。
  3. HKDF 包括 extract_then_expand 的两阶段过程。extract 过程增加密钥材料的随机性,在 TLS 1.2 中使用的密钥导出函数 PRF 实际上只实现了 HKDF 的 expand 部分,并没有经过 extract,而直接假设密钥材料的随机性已经符合要求。

AEAD(Authenticated_Encrypted_with_associated_data)唯一保留的加密方式

  1. TLS 协议的最终目的是协商出会话过程使用的对称密钥和加密算法,双方最终使用该密钥和对称加密算法对报文进行加密。
  2. AEAD 将完整性校验和数据加密两种功能集成在同一算法中完成,是 TLS 1.3 中唯一支持的加密方式。
  3. 但是有研究表明 AEAD 也有一定局限性:使用同一密钥加密的明文达到一定长度后,就不能再保证密文的安全性。因此,TLS 1.3 中引入了密钥更新机制,一方可以(通常是服务器)向另一方发送 Key Update(KU)报文,对方收到报文后对当前会话密钥再使用一次 HKDF,计算出新的会话密钥,使用该密钥完成后续的通信。

TLS 1.3 握手执行步骤

wip

参考资料

  1. TLS 1.3 科普——新特性与协议实现