本主題提供用來保護 PlayReady 生態系統中內容的加密演算法概觀。
備註
如需加密相關詞彙,請參閱 詞彙表。
加密基本概念
對稱金鑰加密 是最簡單的加密類型。 使用對稱金鑰加密時,會使用相同的金鑰來加密內容並將其解密。 對稱金鑰演演算法通常很小且快速。 一般而言,大部分的加密工作都是由某種形式的對稱密鑰加密來處理。
相反地,公鑰密碼編譯會使用已發佈的公鑰來加密,並使用不同的秘密、私鑰來解密。 因此,如果使用者 「A」 提供使用者 「B」 公鑰,B 可以加密 A 的內容,而不需要任何其他資訊。 無論內容如何傳輸,只有 A 才能讀取它。 內容攔截器缺少私鑰(秘密金鑰),無法解密訊息。 因為公鑰可供公開使用,任何人都可以加密 A,但只能解密 A。 公鑰密碼編譯需要計算複雜的演算法。
橢圓曲線密碼編譯 (ECC) 是用來加密和解密內容的公鑰密碼編譯演算法。 這是描述橢圓曲線的計算複雜函式。 此演算法的元件會以公鑰的形式共用。 用於解密的其他元件會形成私鑰。
單鍵訊息驗證碼 (OMAC) 是從區塊加密建構的訊息驗證碼。 有兩種 OMAC 演算法:OMAC1 和 OMAC2。
憑證 是用來確保不受信任實體的真實性。 憑證的傳送者會使用其私鑰簽署其名稱(裝置標識符)。 接著,憑證的收件者會使用寄件人的公鑰來驗證憑證的簽章,以確保寄件者的身分識別。 因為傳送者是私鑰的唯一擁有者,所以很難在公鑰下建立私鑰,除非憑證是使用私鑰簽署,否則憑證將無法正確驗證:在此情況下,系統會假設數據源正確且經過認證的通訊是安全的。
PlayReady 加密演算法
對稱演算法
支援下列 AES 加密模式:
AES 128 CTR 模式 - PlayReady 系統可以保護在 CTR 模式下加密的檔案和串流,其中樣本可以是全樣本加密或部分樣本加密。 其中包括通用加密模式 『cenc』 (通用加密配置) 和 『cens』 (使用未加密/加密位元組模式的通用加密配置),這些模式定義於 ISO/IEC 23001-7 中。
AES 128 CBC 模式 - 從 4.0 版開始的 PlayReady 系統,可以在 CBC 模式中,保護使用 AES 128 內容金鑰完整或部分加密的檔案和數據流。 其中包括通用加密模式 『cbc1』 和 『cbcs』,如 ISO/IEC 23001-7 中所定義,以及 CBC 模式中以 AES 128 內容密鑰加密的任何其他格式。
備註
具有 1.X、2.X 和 3.X 版的 PlayReady 系統只能保護以 CTR 模式加密的檔案(通用加密模式 'cenc')。 不支援 『cens』。 具有 4.0 版和更新版本的 PlayReady 系統可以保護以 CTR 模式加密的檔案(一般加密模式 'cenc') 和 CBC 模式 (通用加密模式 'cbcs' )。 不支援其他模式 『cens』 和 『cbc1』。
ECC 演算法
Microsoft PlayReady 系統使用 ECC(橢圓曲線密碼編譯)來加密內容密鑰和簽署通訊協定訊息。
- ECC ElGamal 演算法 - 用於加密內容金鑰。
- ECDSA (橢圓曲線數位簽名演算法) - 用於簽署 PlayReady 通訊協定中適用的訊息。
- NIST — Microsoft PlayReady 系統會針對適用的 ECC 加密使用標準 NIST 演算法,且目前使用 P-256 橢圓曲線。
簽署演算法
對於簽署授權、暫時性密鑰或數據,PlayReady 系統會使用 AES OMAC1,這相當於 CMAC(加密式訊息驗證碼),並在 2005 年 5 月成為 NIST 建議。 會隨機產生索引鍵,但數據會以SHA256進行哈希處理,然後使用ECC256簽署哈希。
運行時間和效能考慮
觸發內容播放時,PlayReady 用戶端必須先執行一些步驟,才能開始初始播放。 這包括尋找授權、系結或解譯授權、解密內容密鑰,最後準備解密內容。 PlayReady 用戶端堆疊需要一些時間才能將授權系結至內容片段,而且在開始內容解密和轉譯之前,必須先執行此作業。 這表示綁定授權的時間會影響從開始播放到顯示第一個畫面的時間,或影響播放軌之間的時間間隔。 用戶端開發人員和應用程式開發人員可能想要考慮優化其程式代碼以處理運行時間和效能問題,以減少第一個畫面的時間,並允許無間距的播放。
受保護的容器會使用對稱密鑰加密來加密大量內容。 不過,公鑰加密會在授權內使用。 這是因為授權包含內容的對稱密鑰,而伺服器會使用用戶端的公鑰來加密內容的對稱金鑰。
當是時候解密內容時,用戶端的私鑰會用來解密授權中的對稱密鑰。 只有授權系結的用戶端才能擷取對稱密鑰。
私鑰解密在計算上比對稱解密更密集;因此,解譯授權需要大量運算。 一旦正確處理授權,對稱密鑰就會解密,而且內容可以使用小型且快速的演算法來解密。
對於資源受限的應用程式或裝置,啟動需要大量的時間和資源。 不過,一旦完成,資源就會釋出,解密可能會有效率地進行,而且需要少數 CPU 週期或系統資源。