本文最初发布于 Netflix 技术博客,由 InfoQ 中文站翻译并分享。
Netflix 专注于提供最好的流媒体体验。我们希望可以立即开始回放(playback),并且在任何网络环境中都不会意外停止。我们还致力于在不牺牲任何回放体验的情况下保护用户隐私和服务安全。为实现这一目标,我们正使用 ABR(自适性串流)来实现更好的播放体验。同时,我们还使用 DRM(数字版权管理)来保护我们的服务,用 TLS(传输层安全)来保护客户隐私并创建一个更安全的流媒体体验。
在诸如电视、机顶盒等消费类电子设备上,Netflix 最近才在流媒体业务上使用 TLS 1.2。现在,为获得更安全、更流畅的体验,我们已经支持 TLS 1.3。
TLS 是什么?
要实现双方间的安全通信,就要有一个安全通道。该通道需要具有以下三个特性。
身份验证:验证通信双方的身份。
保密性:通过通道发送的数据仅对端点可见。
完整性:通过通道发送的数据如果被攻击者修改可以检测到。
TLS 协议旨在通过提供实现上述特性的工具和方法,来提供两个对等点之间的安全通道。
TLS 1.3
TLS 1.3 是传输层安全协议(Transport Layer Security)的最新版本。与前一个版本相比,它更简单、更安全、更高效。
Perfect Forward Secrecy
对 Netflix 而言,我们认为非常重要的一点是提供 PFS (Perfect Forward Secrecy)。
PFS 是密钥交换算法的一个特性,即使服务器的私钥被破坏,它也可以确保会话密钥不被破坏。通过为每个会话生成新的密钥,PFS 可以保护过去的会话不受未来密钥泄露的影响。
TLS 1.2 支持具备 PFS 特性的密钥交换算法,但是它也允许不支持 PFS 的密钥交换算法。即使在 TLS 1.2 的前一个版本中,Netflix 也总是会选择一个提供 PFS 的密钥交换算法,比如 ECDHE(Elliptic Curve Diffie Hellman Ephemeral)。不过,TLS 1.3 删除了所有不提供 PFS 的密钥交换算法(如静态 RSA),进一步强化了这一概念。
认证加密
对于加密,TLS 1.3 删除了所有弱密码,只使用带有关联数据(AEAD)的认证加密。这保证了数据的保密性、完整性和真实性。我们使用 AES Galois/Counter 模式,因为它同时还提供良好的性能和高吞吐量。
安全握手
虽然上述更改很重要,但 TLS 1.3 中最重要的变化可能是重新设计了握手协议。
TLS 1.2 的握手并不是为了保护整个握手过程的完整性而设计的。它只保护 cipher suite negotiation 后的握手部分,这就增加了降级攻击的可能性,让攻击者能强制使用不安全的 cipher suites。
使用 TLS 1.3,服务器会对整个握手过程(包括 cipher suite negotiation)进行签名,从而防止攻击者降低 cipher suite 的级别。
同样,在 TLS 1.2 中,扩展在 ServerHello 中是明文发送的。现在,在 TLS 1.3 中,甚至连扩展都加密了,ServerHello 后的所有握手消息都加密了。
减少握手
TLS 1.2 支持许多密钥交换算法、cipher suites 和数字签名,包括易受攻击的数字签名。因此,它执行一次握手需要更多的消息和两次网络往返。
相比之下,TLS 1.3 中的握手现在只需要一次往返,它简化了设计,去掉了所有易受攻击的算法。
此外,它还有一个针对重新握手的新特性,称为 0-RTT 或 TLS 早期数据。这让应用程序可以在初始握手消息中包含应用程序数据,而不必等到握手完成。
在 Netflix,我们通过高效地恢复 TLS 会话并谨慎地将 0-RTT 用于流数据,来减少播放延迟。
A/B 测试结果
基于对 TLS 1.3 的协议组合分析,我们确信它会给我们带来更好的安全性,但是,我们不知道它在流媒体环境下的效果如何。
由于 TLS 1.3 的性能特性是支持重新握手的 0-RTT 模式,所以我们假设 TLS 1.3 将减少延迟。我们不需要再等待握手完成,相反,我们可以更早地发送媒体数据 HTTP 请求,并接收媒体数据的 HTTP 响应。
为了解 TLS 1.3 在实际应用时的性能,我们做了一个实验:
用户帐户:每个组 50 万个帐户
设备类型:中端设备(Quad ARM core @ 1.7GHz)
对照组:TLS 1.2
实验组:TLS 1.3
播放延迟
播放延迟是指需要多少时间才开始播放。以下是在实验中测得的播放延迟数据。结果表明,在较慢或拥塞的网络中(即分位数大于 0.75),TLS 1.3 的增益最大,并且在所有的网络条件下都有所改善。
下面是实验所用的中端设备在实际应用中的时序平均播放延迟图。从中可以看出,使用 TLS 1.3 播放开始得更早。
Media Rebuffer(媒体重新缓冲)
在 Netflix,我们将媒体重新缓冲定义为非网络起点的重新缓冲。其发生通常是由于 CPU 的负载过高导致设备处理媒体数据的速度不够快。与对照组使用的 TLS 1.2 相比,使用 TLS 1.3 的实验组在媒体重新缓冲方面提高了大约 7.4%。
这个结果表明,使用 TLS 1.3 和 0-RTT 更高效,可以减少 CPU 负载。
小结
从安全性分析来看,我们相信 TLS 1.3 的通信安全性比 TLS 1.2 高。从现场测试来看,我们相信 TLS 1.3 能为我们提供更好的流媒体体验。
此时,互联网正经历着比平时更高的流量和拥堵。我们相信,即使节省少量的数据和网络往返也很有意义,如果它还能提供更安全、更高效的流媒体体验,那就更好了。
因此,我们已经开始在比较新的消费类电子设备上部署 TLS 1.3,希望不久的将来可以部署到更多的设备上。
英文原文:
评论