Netflix 專注于提供最好的流媒體體驗(yàn)。我們希望可以立即開始回放(playback),并且在任何網(wǎng)絡(luò)環(huán)境中都不會(huì)意外停止。我們還致力于在不犧牲任
Netflix 專注于提供最好的流媒體體驗(yàn)。我們希望可以立即開始回放(playback),并且在任何網(wǎng)絡(luò)環(huán)境中都不會(huì)意外停止。我們還致力于在不犧牲任何回放體驗(yàn)的情況下保護(hù)用戶隱私和服務(wù)安全。為實(shí)現(xiàn)這一目標(biāo),我們正使用 ABR(自適性串流)來實(shí)現(xiàn)更好的播放體驗(yàn)。同時(shí),我們還使用 DRM(數(shù)字版權(quán)管理)來保護(hù)我們的服務(wù),用 TLS(傳輸層安全)來保護(hù)客戶隱私并創(chuàng)建一個(gè)更安全的流媒體體驗(yàn)。
在諸如電視、機(jī)頂盒等消費(fèi)類電子設(shè)備上,Netflix 最近才在流媒體業(yè)務(wù)上使用 TLS 1.2?,F(xiàn)在,為獲得更安全、更流暢的體驗(yàn),我們已經(jīng)支持 TLS 1.3。
TLS 是什么?
要實(shí)現(xiàn)雙方間的安全通信,就要有一個(gè)安全通道。該通道需要具有以下三個(gè)特性。
身份驗(yàn)證:驗(yàn)證通信雙方的身份。
保密性:通過通道發(fā)送的數(shù)據(jù)僅對(duì)端點(diǎn)可見。
完整性:通過通道發(fā)送的數(shù)據(jù)如果被攻擊者修改可以檢測(cè)到。
TLS 協(xié)議旨在通過提供實(shí)現(xiàn)上述特性的工具和方法,來提供兩個(gè)對(duì)等點(diǎn)之間的安全通道。
TLS 1.3
TLS 1.3 是傳輸層安全協(xié)議(Transport Layer Security)的最新版本。與前一個(gè)版本相比,它更簡(jiǎn)單、更安全、更高效。
Perfect Forward Secrecy對(duì) Netflix 而言,我們認(rèn)為非常重要的一點(diǎn)是提供 PFS (Perfect Forward Secrecy)。
PFS 是密鑰交換算法的一個(gè)特性,即使服務(wù)器的私鑰被破壞,它也可以確保會(huì)話密鑰不被破壞。通過為每個(gè)會(huì)話生成新的密鑰,PFS 可以保護(hù)過去的會(huì)話不受未來密鑰泄露的影響。
TLS 1.2 支持具備 PFS 特性的密鑰交換算法,但是它也允許不支持 PFS 的密鑰交換算法。即使在 TLS 1.2 的前一個(gè)版本中,Netflix 也總是會(huì)選擇一個(gè)提供 PFS 的密鑰交換算法,比如 ECDHE(Elliptic Curve Diffie Hellman Ephemeral)。不過,TLS 1.3 刪除了所有不提供 PFS 的密鑰交換算法(如靜態(tài) RSA),進(jìn)一步強(qiáng)化了這一概念。
認(rèn)證加密
對(duì)于加密,TLS 1.3 刪除了所有弱密碼,只使用帶有關(guān)聯(lián)數(shù)據(jù)(AEAD)的認(rèn)證加密。這保證了數(shù)據(jù)的保密性、完整性和真實(shí)性。我們使用 AES Galois/Counter 模式,因?yàn)樗瑫r(shí)還提供良好的性能和高吞吐量。
安全握手
雖然上述更改很重要,但 TLS 1.3 中最重要的變化可能是重新設(shè)計(jì)了握手協(xié)議。
TLS 1.2 的握手并不是為了保護(hù)整個(gè)握手過程的完整性而設(shè)計(jì)的。它只保護(hù) cipher suite negotiation 后的握手部分,這就增加了降級(jí)攻擊的可能性,讓攻擊者能強(qiáng)制使用不安全的 cipher suites。
使用 TLS 1.3,服務(wù)器會(huì)對(duì)整個(gè)握手過程(包括 cipher suite negotiation)進(jìn)行簽名,從而防止攻擊者降低 cipher suite 的級(jí)別。
同樣,在 TLS 1.2 中,擴(kuò)展在 ServerHello 中是明文發(fā)送的?,F(xiàn)在,在 TLS 1.3 中,甚至連擴(kuò)展都加密了,ServerHello 后的所有握手消息都加密了。
###減少握手TLS 1.2 支持許多密鑰交換算法、cipher suites 和數(shù)字簽名,包括易受攻擊的數(shù)字簽名。因此,它執(zhí)行一次握手需要更多的消息和兩次網(wǎng)絡(luò)往返。
相比之下,TLS 1.3 中的握手現(xiàn)在只需要一次往返,它簡(jiǎn)化了設(shè)計(jì),去掉了所有易受攻擊的算法。
此外,它還有一個(gè)針對(duì)重新握手的新特性,稱為 0-RTT 或 TLS 早期數(shù)據(jù)。這讓應(yīng)用程序可以在初始握手消息中包含應(yīng)用程序數(shù)據(jù),而不必等到握手完成。
在 Netflix,我們通過高效地恢復(fù) TLS 會(huì)話并謹(jǐn)慎地將 0-RTT 用于流數(shù)據(jù),來減少播放延遲。
A/B 測(cè)試結(jié)果
基于對(duì) TLS 1.3 的協(xié)議組合分析,我們確信它會(huì)給我們帶來更好的安全性,但是,我們不知道它在流媒體環(huán)境下的效果如何。
由于 TLS 1.3 的性能特性是支持重新握手的 0-RTT 模式,所以我們假設(shè) TLS 1.3 將減少延遲。我們不需要再等待握手完成,相反,我們可以更早地發(fā)送媒體數(shù)據(jù) HTTP 請(qǐng)求,并接收媒體數(shù)據(jù)的 HTTP 響應(yīng)。
為了解 TLS 1.3 在實(shí)際應(yīng)用時(shí)的性能,我們做了一個(gè)實(shí)驗(yàn):
用戶帳戶:每個(gè)組 50 萬個(gè)帳戶
設(shè)備類型:中端設(shè)備(Quad ARM core @ 1.7GHz)
對(duì)照組:TLS 1.2
實(shí)驗(yàn)組:TLS 1.3
播放延遲
播放延遲是指需要多少時(shí)間才開始播放。以下是在實(shí)驗(yàn)中測(cè)得的播放延遲數(shù)據(jù)。結(jié)果表明,在較慢或擁塞的網(wǎng)絡(luò)中(即分位數(shù)大于 0.75),TLS 1.3 的增益最大,并且在所有的網(wǎng)絡(luò)條件下都有所改善。
下面是實(shí)驗(yàn)所用的中端設(shè)備在實(shí)際應(yīng)用中的時(shí)序平均播放延遲圖。從中可以看出,使用 TLS 1.3 播放開始得更早。
Media Rebuffer(媒體重新緩沖)
在 Netflix,我們將媒體重新緩沖定義為非網(wǎng)絡(luò)起點(diǎn)的重新緩沖。其發(fā)生通常是由于 CPU 的負(fù)載過高導(dǎo)致設(shè)備處理媒體數(shù)據(jù)的速度不夠快。與對(duì)照組使用的 TLS 1.2 相比,使用 TLS 1.3 的實(shí)驗(yàn)組在媒體重新緩沖方面提高了大約 7.4%。
這個(gè)結(jié)果表明,使用 TLS 1.3 和 0-RTT 更高效,可以減少 CPU 負(fù)載。
小 結(jié)
此時(shí),互聯(lián)網(wǎng)正經(jīng)歷著比平時(shí)更高的流量和擁堵。我們相信,即使節(jié)省少量的數(shù)據(jù)和網(wǎng)絡(luò)往返也很有意義,如果它還能提供更安全、更高效的流媒體體驗(yàn),那就更好了。
因此,我們已經(jīng)開始在比較新的消費(fèi)類電子設(shè)備上部署 TLS 1.3,希望不久的將來可以部署到更多的設(shè)備上。
關(guān)鍵詞: Netflix