分享方式:


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 的內容流程

遺漏 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 遺失。

遺失 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 模式中存取以相同金鑰加密的相同內容,可以更輕鬆地解密內容,而不需要授權。