共用方式為


硬體 DRM

本主題提供如何將 PlayReady 硬體型數位版權管理 (DRM) 新增至 通用 Windows 平台 (UWP) 應用程式的概觀。

注意

許多裝置都支援硬體型 PlayReady DRM,包括 Windows 和非 Windows 裝置,例如電視機、手機和平板電腦。 若要讓 Windows 裝置支援 PlayReady 硬體 DRM,它必須執行 Windows 10 且具有支援的硬體設定。

越來越多的內容提供者正走向硬體型保護,以授與在應用程式中播放完整高價值內容的許可權。 已新增對密碼編譯核心硬體實作的健全支援,以符合此需求。 這項支援可在多個裝置平台上安全地播放高畫質 (1080p) 和超高畫質 (UHD) 內容。 金鑰資料 (包括私鑰、內容金鑰,以及用來衍生或解除鎖定上述金鑰的任何其他金鑰資料),以及解密壓縮和未壓縮的視訊範例會利用硬體安全性來保護。

Windows TEE 實作

本主題提供 Windows 10 如何實作受信任執行環境 (TEE) 的簡短概觀。

Windows TEE 實作的詳細資料已不屬於本文件的範圍。 然而,簡要討論標準移植套件 TEE 連接埠和 Windows 連接埠之間的差異將是有益的。 Windows 會實作 OEM Proxy 層,並將串行化的 PRITEE 函式呼叫傳輸到 Windows Media Foundation 子系統中的使用者模式驅動程式。 這最終會路由傳送至 Windows TrEE (受信任的執行環境) 驅動程式或 OEM 的圖形驅動程式。 上述其中一種方法的詳細資料已不屬於本文件的範圍。 下圖顯示 Windows 連接埠的一般元件互動。 如果您要開發 Windows PlayReady TEE 實作,您可以連絡 WMLA@Microsoft.com

Windows 發球元件圖表

使用硬體 DRM 的考量事項

本主題提供開發設計成使用硬體 DRM 的應用程式時,應考慮的簡短項目清單。 如 PlayReady DRM 所述,對於 Windows 10 的 PlayReady HWDRM,所有輸出保護都是在 Windows TEE 實作中強制執行的,這會對輸出保護行為產生一些影響:

  • 支援未壓縮數位視訊 270 的輸出保護等級 (OPL):適用於 Windows 10 的 PlayReady HWDRM 不支援降低分解析度,並將強制啟用 HDCP。 我們建議 HWDRM 的高畫質內容具有大於 270 的 OPL (雖然不需要)。 此外,建議您在授權中設定 HDCP 類型限制 (Windows 10 上的 HDCP 2.2 版)。
  • 不同於軟體DRM (SWDRM),輸出保護會根據最不具功能的監視器在所有監視器上強制執行。 例如,如果使用者已連接兩個監視器,其中一個監視器支援 HDCP,而另一個則不支援,即使內容只在支援 HDCP 的監視器上轉譯,如果授權需要 HDCP,則播放將會失敗。 在軟體 DRM 中,只要內容只會在支援 HDCP 的監視器上轉譯,內容就會播放。
  • 除非內容金鑰和授權符合以下條件,否則不保證 HWDRM 能夠被用戶端使用且安全:
    • 用於影片內容金鑰的授權必須具有最低安全性層級屬性 3000。
    • 音訊必須加密為與視訊不同的內容金鑰,而用於音訊的授權必須具有最低安全性層級屬性 2000。 或者,音訊可以保持清晰。

此外,在使用 HWDRM 時,您應該考慮下列項目:

  • 不支援受保護的媒體程序 (PMP)。
  • 不支援 Windows 媒體視訊 (也稱為 VC-1) (請參閱覆寫硬體 DRM)。
  • 持續性授權不支援多個圖形處理單元 (GPU)。

若要在具有多個 GPU 的電腦上處理持續性授權,請考慮下列案例:

  1. 客戶購買具有整合式圖形卡的新機器。
  2. 客戶會在使用硬體 DRM 時,使用取得持續性授權的應用程式。
  3. 持續性授權現在繫結至該圖形卡的硬體金鑰。
  4. 然後,客戶會安裝新的圖形卡。
  5. 雜湊的資料存放區 (HDS) 中的所有授權都會繫結至整合式視訊卡,但客戶現在想要使用新安裝的圖形卡播放受保護的內容。

為了防止播放失敗,因為硬體無法解密授權,PlayReady 會針對它遇到的每個圖形卡使用不同的 HDS。 這會導致 PlayReady 嘗試取得一段內容的授權,其中 PlayReady 通常已經有授權 (也就是說,在軟體 DRM 案例或任何沒有硬體變更的情況下,PlayReady 不需要重新取得授權)。 因此,如果應用程式在使用硬體 DRM 時取得持續性授權,則如果終端使用者安裝 (或解除安裝) 圖形卡,您的應用程式必須能夠處理該授權實際上「遺失」的情況。 由於這不是常見的案例,因此當內容在硬體變更之後不再播放時,您可能會決定處理支援呼叫,而不是釐清如何處理用戶端/伺服器程式碼中的硬體變更。

覆寫硬體 DRM

本節說明如果要播放的內容不支援硬體 DRM,如何覆寫硬體 DRM (HWDRM)。

預設情況下,如果系統支援,則會使用硬體 DRM。 不過,硬體 DRM 不支援某些內容。 其中一個範例是雞尾酒內容。 另一個範例是使用 H.264 和 HEVC 以外的視訊轉碼器的任何內容。 另一個範例是 HEVC 內容,因為某些硬體 DRM 將支援 HEVC,有些則不支援。 因此,如果您想要播放一段內容,且硬體 DRM 不支援有問題的系統上,您可能會想要退出退出硬體 DRM。

下列範例示範如何退出硬體 DRM。 您只需要在切換之前執行這項操作。 此外,請確定記憶體中沒有任何 PlayReady 物件,否則行為未定義。

var applicationData = Windows.Storage.ApplicationData.current;
var localSettings = applicationData.localSettings.createContainer("PlayReady", Windows.Storage.ApplicationDataCreateDisposition.always);
localSettings.values["SoftwareOverride"] = 1;

若要切換回硬體 DRM,請將 SoftwareOverride 值設定為 0。

針對每個媒體播放,您必須將 MediaProtectionManager 設定為:

mediaProtectionManager.properties["Windows.Media.Protection.UseSoftwareProtectionLayer"] = true;

判斷您是否在硬體 DRM 或軟體 DRM 中的最佳方式是查看 C:\Users\<username>\AppData\Local\Packages\<application name>\LocalCache\PlayReady\*

  • 如果有 mspr.hds 檔案,您位於軟體 DRM 中。
  • 如果您有另一個 *.hds 檔案,您位於硬體 DRM 中。
  • 您也可以刪除整個 PlayReady 資料夾,然後重試測試。

偵測硬體 DRM 的類型

本節說明如何偵測系統上支援哪種類型的硬體 DRM。

您可以使用 PlayReadyStatics.CheckSupportedHardware 方法來判斷系統是否支援特定的硬體 DRM 功能。 例如:

bool isFeatureSupported = PlayReadyStatics.CheckSupportedHardware(PlayReadyHardwareDRMFeatures.HEVC);

PlayReadyHardwareDRMFeatures 列舉包含可查詢的硬體 DRM 功能值有效清單。 若要判斷是否支援硬體DRM,請使用查詢中的 HardwareDRM 成員。 若要判斷硬體是否支援高效視訊編碼 (HEVC)/H.265 轉碼器,請在查詢中使用 HEVC 成員。

您也可以使用 PlayReadyStatics.PlayReadyCertificateSecurityLevel 屬性來取得用戶端憑證的安全性層級,以判斷是否支援硬體 DRM。 除非傳回的憑證安全性層級大於或等於 3000,否則用戶端不會進行個別化或布建 (在此情況下,這個屬性會傳回 0) 或硬體 DRM 未使用中 (在此情況下,這個屬性會傳回小於 3000 的值)。

偵測 AES128CBC 硬體 DRM 的支援

從 Windows 10 版本 1709 開始,可以透過呼叫 PlayReadyStatics.CheckSupportedHardware並指定列舉值 PlayReadyHardwareDRMFeatures.Aes128Cbc 來偵測裝置上對 AES128CBC 硬體加密的支援。 在舊版 Windows 10 上,指定此值會導致擲回例外狀況。 基於這個理由,您應該先呼叫 ApiInformation.IsApiContractPresent,並指定主要合約第 5 版,再呼叫 CheckSupportedHardware,檢查列舉值是否存在。

bool supportsAes128Cbc = ApiInformation.IsApiContractPresent("Windows.Foundation.UniversalApiContract", 5);

if (supportsAes128Cbc)
{
    supportsAes128Cbc = PlayReadyStatics.CheckSupportedHardware(PlayReadyHardwareDRMFeatures.Aes128Cbc);
}

另請參閱