哈嚕~進來看這篇文章的你,如果不是想增廣見聞、學習新知,就是想多了解一些好用來壞壞。
基於上一篇簡單的介紹了mpd是什麼,最後聽在了講解mpd檔案內(nèi)的結(jié)構(gòu),那麼從這個部分繼續(xù)往下講!
這次我是到 DASH-IF 網(wǎng)站上,裡面有一些測試用的 MPD,可以讓我們了解 Dash 規(guī)格。我選擇的是 [Google] Shaka Demo Assets: Angel-One Widevine來當作範例。
在這個網(wǎng)站上的測試影片基本上都是經(jīng)過加密後的,那可以試著用IDM下載影片看看。
可以發(fā)現(xiàn)後面都寫著「受保護的內(nèi)容」,這代表著影片受到數(shù)位版權(quán)管理(英語:Digitalrights management,縮寫為DRM)。
這是什麼東西?來看看維基百科怎麼寫。
「數(shù)位版權(quán)管理(英語:Digitalrights management,縮寫為DRM)是一系列訪問控制技術(shù),通常用於控制數(shù)位內(nèi)容和裝置在被銷售之後的使用過程。DRM有時也稱為拷貝保護、複製控制、技術(shù)保護措施等,但這些稱呼存在爭議。許多數(shù)位出版社和軟體廠商都使用了DRM,例如亞馬遜、AT&T、AOL、AppleInc.、Netflix、Google[7]、BBC、微軟、Sony、Valve Corporation(以及其旗下的Steam)等。」
終於進入正題了,「加密系統(tǒng)」,說到了影片經(jīng)過了加密來保護,那肯定就有用來解密的金鑰,正如一扇門肯定會有用來開門的鑰匙。
這裡我們要知道的是,這裡採用的是Widevine的DRM,對於Widevine而言,其密鑰是一個字串,結(jié)構(gòu)由兩個部分組成:
< Key ID 公鑰(KID) > : < Key 私鑰>
如上所示,這是一個金鑰(用於解密影片)。
可以看到該金鑰由兩部分組成,前面的稱為Key ID,中文則稱為公鑰,而後面的稱為Key,中文則稱為私鑰。
金鑰的基本特徵是:
① 由公鑰(Key ID)和私鑰(Key)兩部分組成,中間透過一個冒號(:)串接起來。
② 公鑰和私鑰為隨機的字符,且長度較長,若透過暴力破解,所需時間可達百年以上,這樣的隨機性和不可猜測性確保了被加密的檔案的安全性。
③ 公鑰儲存在mpd檔案中,從使用者向伺服器發(fā)送驗證訊息(Authorization),伺服器核驗後向客戶端發(fā)送一個長字串,其中就會包含私鑰。
由於受到了保護因此是無法使用IDM來下載影片的,首先先透過瀏覽器的開發(fā)者工具( DevTools)將mpd檔案抓取下來查看。
找尋蛛絲馬跡,果然找到了 < ContentProtection 內(nèi)容保護 > 的標籤,那我們來看看裡面寫的內(nèi)容
<ContentProtectionvalue="Widevine"schemeIdUri="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed">
首先先來看"Widevine",這個是Google的技術(shù),後面的"UUID"全名為 「Content Protection System ID」,下面列出了目前市面上常見的幾個DRN技術(shù)提供商
公司 | DRM | UUID |
Widevine | EDEF8BA9-79D6-4ACE-A3C8-27DCD51D21ED | |
Microsoft | PlayReady | 9A04F079-9840-4286-AB92-E65BE0885F95 |
Apple | FairPlay | 94CE86FB-07FF-4F43-ADB8-93D2FA968CA2 |
那這樣就可以簡單一眼看出此技術(shù)是誰提供的。
眼尖的你一定發(fā)現(xiàn)了,圖中反白的上方那一大串東西內(nèi)赫然寫著"PlayReady",是的沒錯,這個影片上所使用的加密技術(shù)適用於Google和Microsoft。
接著我們來看一個很重要的東西,PSSH
<cenc:pssh>AAAANHBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAABQIARIQblodJidXR9eARuql0dNLWg==</cenc:pssh>
這個"PSSH"的全名是「ProtectionSystem Specific Header」,翻譯是「保護系統(tǒng)特定標題」,什麼?你說你在圖中來看到了KID?
果然細心的你一定也發(fā)現(xiàn)了,還記得上面提到的第三點嗎?
公鑰儲存在mpd檔案中,從使用者向伺服器發(fā)送驗證訊息(Authorization),伺服器核驗後向客戶端發(fā)送一個長字串,其中就會包含私鑰。
對的!公鑰 ( Key ID, KID ) 就是這麼囂張地展示在你的眼前,你問那跟PSSH有什麼關(guān)係?
PSSH就是要向伺服器發(fā)送的驗證訊息不可或缺的東西!這串字符裡面就包含了KID!所以想要獲得金鑰你必須要湊齊兩種不可或缺的資料,1. PSSH 以及 2. 驗證伺服器的網(wǎng)址。
那麼文章進入了尾聲,來做一個小小行列式總結(jié)吧。
1. mpd內(nèi)包含了加密技術(shù)商的訊息
2. mpd內(nèi)可以找到KID和PSSH
3. 想要獲得解密金鑰必須獲取兩件必要的資料,驗證伺服器網(wǎng)址以及PSSH