PlayReady 內容加密模式
本主題提供 PlayReady 系統中內容加密模式的概觀。 如需 PlayReady 和內容加密的概觀,請參閱 PlayReady 內容加密。 請參閱加密詞彙和定義的 詞彙 。
PlayReady 1.0 版引進了 AES-128 CTR 內容加密模式,除了先前用於 WMDRM (Windows Media Digital Rights Management) 的Microsoft特定 ENCRYPTION 加密模式。 AES-128 CTR 內容加密模式會使用 AES 金鑰,在計數器模式的內容檔案上使用長度為 128 位, (CTR) 。
從 4.0 版開始,PlayReady 系統同時支援計數器模式 (CTR) 和加密區塊鏈結模式 (CBC) 中的 AES 128 位金鑰。
這項變更可確保使用 PlayReady 的服務可以充分利用所有裝置上的唯一資料流程和檔案格式。 此外,Microsoft支援 CMAF (Common Media Application Format) standard,如ISO/IEC FDIS 23000-19中所定義。
常見的加密模式
ISO 標準 ISO/IEC 23001-7 會定義四種通用加密模式。
從 4.0 版開始的 PlayReady 用戶端支援 AES CBC 金鑰,除了通用加密模式 'cenc' 的 AES CTR 金鑰之外,還允許支援通用加密模式 'cbcs'。 在 4.0 版之前,AES CTR 是 PlayReady 用戶端主要支援的模式,可支援通用加密模式 'cenc'。 請注意,允許通用加密模式 'cens' 和 'cbc1',且在 PlayReady 生態系統中技術上可行,但不受支援。
支援 'cbcs' AES-CBC 加密配置
在 PlayReady PK 4.0 版或之後建置的所有用戶端都可能支援 CBC 金鑰。 不過,用戶端支援是選擇性的,並透過授權取得通訊協定中的其他屬性向授權伺服器發出訊號。
版本 | 雞尾酒 | 'cenc' | 'cbcs' |
---|---|---|---|
PlayReady Client 1.0 | 支援 | 支援 | 不支援 |
PlayReady Client 2.0 | 支援 | 支援 | 不支援 |
PlayReady Client 2.5 | 支援 | 支援 | 不支援 |
PlayReady Client 3.0 | 不支援 | 支援 | 不支援 |
PlayReady Client 3.3 | 不支援 | 支援 | 不支援 |
PlayReady Client 4.0 | 不支援 | 支援 | 支援 |
注意
- 升級版本 1709 或更高版本的所有 Xbox One 單元都支援 'cbcs'。
- 從 4.0 版開始的所有 PlayReady 授權伺服器都支援使用 CBC 金鑰發行授權。
向 PlayReady 標頭中的 ALGID 發出訊號
PlayReady 標頭是 XML 檔,通常包含在內容檔案或資料流程的標頭中。 它描述用戶端解密此內容所需的 PlayReady 屬性。 PlayReady 標頭有自己的規格和版本設定。 如需詳細資訊,請參閱 PlayReady 標頭規格。
版本 | PlayReady 標頭 4.3 | PlayReady 標頭 4.2 | PlayReady 標頭 4.1 | PlayReady 標頭 4.0 |
---|---|---|---|---|
PlayReady Client 4.0 (請參閱附注 4) |
✔ | ✔ | ✔ | ✔ |
PlayReady Client 3.3 (請參閱附注 3) |
✔ | ✔ | ✔ | |
PlayReady Client 3.0 (請參閱附注 3) |
✔ | ✔ | ✔ | |
PlayReady Client 2.5 (請參閱附注 2) |
✔ | ✔ | ||
PlayReady Client 2.0 (請參閱附注 2) |
✔ | ✔ | ||
PlayReady Client 1.0 (請參閱附注 1) |
✔ |
注意
- (4) Xbox One 1709 版或更高版本為 PlayReady 4.X 用戶端。
- (3) Windows 10所有版本和 Xbox One 1703 版或更低版本都是 PlayReady 3.X 用戶端。 最新的非 Windows 裝置 (例如,2017 年之後發行的智慧型電視) 是 PlayReady 3.X 用戶端。
- (2) Silverlight 和 Windows 8,8.1 是 PlayReady 2.X 用戶端。 例如,大部分非 Windows 裝置 (,在 2011 年到 2017 年之間發行的智慧) 型電視都是 PlayReady 2.X 用戶端。
- 例如, (1) 大部分的非 Windows 裝置 (,在 2008 到 2011 年之間發行的智慧型) 電視都是 PlayReady 1.X 用戶端。
以下是 PlayReady 標頭 v4.2 的範例。
<WRMHEADER
version="4.2.0.0"
xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader">
<DATA>
<PROTECTINFO>
<KIDS>
<KID ALGID="AESCTR" CHECKSUM="xNvWVxoWk04=" VALUE="0IbHou/5s0yzM80yOkKEpQ=="></KID>
<KID ALGID="AESCTR" CHECKSUM="GnKaQIRacPU=" VALUE="/qgG2xbs4k2SKCxx6bhWqw=="></KID>
</KIDS>
</PROTECTINFO>
<LA_URL>http://rm.contoso.com/rightsmanager.asmx</LA_URL>
<DS_ID>AH+03juKbUGbHl1V/QIwRA==</DS_ID>
<DECRYPTORSETUP>ONDEMAND</DECRYPTORSETUP>
</DATA>
</WRMHEADER>
ALGID (演算法識別碼) 是一個可加密內容的屬性,並指定用來加密內容的加密演算法。 從 PlayReady 標頭 4.2 版開始,ALGID 是必要的,而且必須設定為 「AESCTR」 或 「一個「要求」。 不過,從 4.3 版開始,ALGID 也可以設定為值 「AESCBC」。 下列範例顯示 PlayReady 標頭 4.3 版,其中 ALGID 值設定為 「AESCBC」。
<WRMHEADER
version="4.3.0.0"
xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader">
<DATA>
<PROTECTINFO>
<KIDS>
<KID VALUE="PV1LM/VEVk+kEOB8qqcWDg==" ALGID="AESCBC"/>
<KID VALUE="tuhDoKUN7EyxDPtMRNmhyA==" ALGID="AESCBC"/>
</KIDS>
</PROTECTINFO>
<LA_URL>http://rm.contoso.com/rightsmanager.asmx</LA_URL>
<DS_ID>AH+03juKbUGbHl1V/QIwRA==</DS_ID>
<DECRYPTORSETUP>ONDEMAND</DECRYPTORSETUP>
</DATA>
</WRMHEADER>
下圖顯示內容流程,其中授權要求是以 PlayReady 標頭為基礎,並指定 ALGID。
遺漏 ALGID
從 PlayReady 標頭 4.3 版開始,ALGID 可能會遺失。 下列範例顯示遺漏 ALGID 值的 PlayReady 標頭 4.3 版。
<WRMHEADER
version="4.3.0.0"
xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader">
<DATA>
<PROTECTINFO>
<KIDS>
<KID VALUE="PV1LM/VEVk+kEOB8qqcWDg=="/>
</KIDS>
</PROTECTINFO>
<LA_URL>http://rm.contoso.com/rightsmanager.asmx</LA_URL>
<DS_ID>AH+03juKbUGbHl1V/QIwRA==</DS_ID>
<DECRYPTORSETUP>ONDEMAND</DECRYPTORSETUP>
</DATA>
</WRMHEADER>
下圖顯示內容流程,其中授權要求使用 CDMi 模組,而 ALGID 遺失。
注意
每個 PlayReady 標頭可能具有:
- 只有一種加密類型。 例如,如果 ALGID=「AESCTR」,標頭的所有索引鍵都會在 CTR 模式中使用。 當 ALGID=「AESCBC」時,此標頭的所有索引鍵都會用於 CBC 模式。
- 遺失 ALGID 時,此標頭的所有索引鍵都會用於計數器模式或加密區塊鏈結,但值不會插入標頭中。
- 對 v4.0 以下的授權伺服器提出具有 PlayReady Header v4.3 的授權取得要求將會擲回例外狀況。
- 授權回應可以包含一或多個授權,其中每個授權都包含一個金鑰和任意數目的原則。
為何遺漏 ALGID 值
Microsoft建議加密者一律在 PlayReady 標頭中包含相同的 ALGID 值,這些值會在處理內容時包含這些值。
在標準案例中,加密程式會加密內容,並在內容中產生 PlayReady 標頭。 加密程式知道用於加密的 AES 模式;因此,它會在 PlayReady 標頭的 ALGID 屬性中包含這項資訊。 用戶端會根據剖析出實際內容的 PlayReady 標頭起始授權要求,因此 ALGID 值存在且有效。
在某些案例中,用戶端會根據簡單的 KID 值起始授權要求, (128 位 GUID) 。 在此情況下,插入授權要求之 PlayReady 標頭中的 ALGID 值將會遺失, (也稱為未指定) 。 其中一個範例是當用戶端使用 HTML5 EME API 提出授權要求時。
用戶端如何處理遺漏的 ALGID
如果用戶端根據傳入的 PlayReady 標頭起始授權要求,則授權要求中的 ALGID 值會反映標頭中找到的值,因為授權取得挑戰包含 PlayReady 標頭的複本。 在此案例中:
- 對於所有 PlayReady Headers v4.2 或更低版本,ALGID 值是必要的,而且必須有效。
- 針對 PlayReady 標頭 v4.3 或更高版本,ALGID 值可以存在且有效或遺失。
伺服器 SDK 如何處理遺漏的 ALGID
透過授權回應傳遞的所有授權都必須包含有效的 ALGID 值。
如果在傳入授權要求中未指定 ALGID,授權伺服器必須從服務的後端取得此資訊,並將正確的值放在授權回應中。
初始化向量 (IV)
在 PlayReady 3.3 版和更早版本中,CTR 模式僅支援 64 位 IV (8 位元組 IV) 。 從 PlayReady 4.0 版開始,CTR 和 CBC 模式都支援 64 位和 128 位 IV (8 位元組和 16 位元組 I) V。
範例:
- 現在支援經常在 CBC 模式中使用 128 位 IV 的 HLS 相容資料流程。
- 現在支援在 CTR 模式中使用 128 位 IV 的一些 HbbTV 一致性資料流程。
限制
- PlayReady 標頭必須只針對所有的 KID 元素使用一個 ALGID 值。 換句話說,用來加密資產不同曲目和品質的所有金鑰都必須是 AES CTR 或 AES CBC。 如果 ALGID 在任何一個 KID 元素上遺失,則必須從所有的 KID 元素中遺失它。
- 在 PlayReady 4.4 版之前,當傳入用戶端憑證為 Windows 且 SL2000 擲回例外狀況時,使用 CBC 金鑰產生授權。 這是因為 Windows 用戶端僅支援 SL3000 單位上的 CBC。 不過,如果此用戶端最低為 PlayReady 4.0 版,且宣告 CBC 模式支援,則可能會將具有 CBC 金鑰的授權傳遞至 SL2000 用戶端。
- 當傳入用戶端憑證是使用 4.0 之前的移植套件版本的裝置時,產生具有 CBC 金鑰的授權將會擲回例外狀況。
- 當傳入授權要求未指出 AES CBC 支援時,產生具有 CBC 金鑰的授權將會擲回例外狀況。
重要
服務不得以 CTR 模式和 CBC 模式使用相同的 {KID, Ck} 加密單一內容。
- 基於功能考慮,用戶端會同時取得 {KID、Ck、AESCTR} 和 {KID、Ck、AESCBC} 的授權,將無法運作。
- 基於健全性理由,攻擊者在 CBC 和 CTR 模式中存取以相同金鑰加密的相同內容,可以更輕鬆地解密內容,而不需要授權。