NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

Netflix 如何在网络不好时提供更安全、更流畅的流媒体体验?

  • 2020-05-07
  • 本文字数:2101 字

    阅读完需:约 7 分钟

Netflix如何在网络不好时提供更安全、更流畅的流媒体体验?


本文最初发布于 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,希望不久的将来可以部署到更多的设备上。


英文原文:


How Netflix brings safer and faster streaming experience to the living room on crowded networks using TLS 1.3


2020-05-07 16:161803
用户头像

发布了 690 篇内容, 共 399.5 次阅读, 收获喜欢 1498 次。

关注

评论

发布
暂无评论
发现更多内容

不管卷不卷,面试还是得问问你G1原理!

艾小仙

Java 编程 程序员

有状态应用如何在Kubernetes平台上快速迁移和重建

焱融科技

云计算 Kubernetes 容器 云原生 高性能

使用 VideoToolbox 探索低延迟视频编码 | WWDC 演讲实录

网易云信

低延时

容器化 | MySQL on K8s 开源开放的高可用容器编排方案

RadonDB

MySQL 容器 RadonDB KubeSphere

阿里P8架构师(花名:霍州)Java程序性能优化“学习日记”

Java架构追梦

Java 阿里巴巴 架构 面试 性能优化

技术干货 | macOS桌面端录屏采集实现教程

ZEGO即构

大前端 音视频 WebRTC 屏幕录制

高可用 | Xenon:后 MHA 时代的选择

青云技术社区

云小课 | 华为云KYON之ELB混合负载均衡

华为云开发者联盟

负载均衡 华为云 云网络 KYON企业级云网络 弹性负载均衡ELB

迷惘的六月份

卢卡多多

生活状态 6月日更

极狐GitLab致力打造DevSecOps 行业标准

极狐GitLab

ci 修复措施 安全扫描器 安全测试

Python——默认字典 (defaultdict)

在即

6月日更

基于 Kubesphere 的 Nebula Graph 多云架构管理实践

青云技术社区

KubeSphere

如何基于MindSpore实现万亿级参数模型算法?

华为云开发者联盟

算法 mindspore 万亿级参数 大模型

jenkins-01 | 安装

Python研究所

持续集成 jenkins CI/CD

Vue-3-生命周期管理

Python研究所

Vue 大前端 签约计划

最新阿里+头条+腾讯大厂Android笔试真题,附详细答案

欢喜学安卓

android 程序员 面试 移动开发

在windows上用Nginx做正向代理

Python研究所

网络 Proxy 正向代理

万字长文详解HiveSQL执行计划

五分钟学大数据

sql 大数据 hive Hive SQL

Java进阶 | 泛型机制与反射原理

晨雨听风

Java

一次性搞清Java中的类加载问题

华为云开发者联盟

Java

“AI赋能”大学计划落地,英特尔联合生态伙伴推进产教融合

E科讯

云小课|RDS实例连接又失败?看我祭出杀手锏!

华为云开发者联盟

数据库 关系型数据库 云数据库 RDS GaussDB(for MySQL)

在云原生场景下构建企业级存储方案

青云技术社区

云原生

澳鹏Appen:用高质量的训练数据,赋能更好的智能驾驶

澳鹏Appen

人工智能 自动驾驶 训练数据

最新大厂Android校招面试经验汇总,看完没有不懂的

欢喜学安卓

android 程序员 面试 移动开发

文件保险箱——用区块链保护文件

趣链科技

区块链 区块链应用

详解Java中static关键字和final关键字的功能

华为云开发者联盟

Java static关键字 final关键字 静态变量

GO database/sql 连接池源码分析

非晓为骁

源码分析 Go 语言 连接池 database

分布式数据库在抖音春晚活动中的应用

火山引擎开发者社区

数据库 后端

继BAT之后,又一头部厂商开始构建低代码生态!=

优秀

低代码

和12岁小同志搞创客开发:设计一款亮度可调节灯

不脱发的程序猿

DIY pwm 创客开发

Netflix如何在网络不好时提供更安全、更流畅的流媒体体验?_安全_Netflix技术博客_InfoQ精选文章