SPEKEAPIv2-對 DASH-IF 規範的自定義和約束 - 安全封裝器和編碼器金鑰交換API規格

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

SPEKEAPIv2-對 DASH-IF 規範的自定義和約束

DASH產業論壇 CPIX2.3 規格支援多種使用案例和拓撲。SPEKEAPIv2.0 規格定義了CPIX設定檔和用API於CPIX。為了實現這兩個目標,它遵循具有以下自定義和約束的CPIX規範:

CPIX設定檔
  • SPEKE 遵循加密程式消費者工作流程。

  • 對於加密的內容金鑰,會SPEKE套用下列限制:

    • SPEKE不支援要求或回應承載的數位簽章驗證 (XMLDSIG)。

    • SPEKE需要以 2048 RSA 為基礎的憑證。

  • SPEKE僅利用CPIX功能的一部分:

    • SPEKE 省略 UpdateHistoryItemList 功能。如果列表存在於響應中,則SPEKE忽略它。

    • SPEKE省略根/葉鍵功能。如果該ContentKey@dependsOnKey屬性存在於響應中,則SPEKE忽略它。

    • SPEKE省略元BitrateFilter素和VideoFilter@wcg屬性。如果這些元素或屬性存在於有CPIX效負載中,請SPEKE忽略它。

  • 只有在「標準承載元件」頁面或「加密」合約頁面上參照為「支援」的元素或屬性,才能用於與 SPEKE v2 交換的CPIX文件。

  • 當加密器包含在CPIX請求中時,所有元素和屬性應在密鑰提供者CPIX響應中攜帶有效值。如果沒有,加密器應停止並拋出錯誤。

  • SPEKE支援KeyPeriodFilter元素的按鍵旋轉。SPEKE僅使用ContentKeyPeriod@index來追蹤金鑰期間。

  • 對於HLS信令,必須使用多個DRMSystem.HLSSignalingData元素:一個具有「媒體」的DRMSystem.HLSSignalingData@playlist屬性值,另一個具有「主」DRMSystem.HLSSignalingData@playlist 屬性值。

  • 當請求金鑰時,加密程式必須使用 ContentKey 元素上的可選 @explicitIV 屬性。金鑰提供者可以使用 @explicitIV 來回應 IV,即使該屬性未包含在請求中。

  • 加密程式會建立金鑰識別符 (KID),無論任何指定的內容 ID 和金鑰期間都將提供相同識別符。金鑰提供者會在對請求文件的回應中包括 KID

  • 加密器應包括CPIX@contentId屬性的值。當收到此屬性的空值時,密鑰提供者應返回描述為「缺少 CPIX @contentId」的錯誤。 CPIX@contentId金鑰提供者無法覆寫值。

    CPIX@id值,如果不是 null,則應由密鑰提供者忽略。

  • 加密器應包括CPIX@version屬性的值。當收到此屬性的空值時,金鑰提供者應傳回描述為「缺少 CPIX @version」的錯誤。當收到具有不支援版本的要求時,金鑰提供者傳回的錯誤描述應為「不支援的 CPIX @version」。

    CPIX@version金鑰提供者無法覆寫值。

  • 加密器應包括每個請求密鑰的ContentKey@commonEncryptionScheme屬性值。當收到此屬性的空值時,密鑰提供者應返回一個錯誤,描述commonEncryptionScheme 為「缺少 ContentKey @ KIDid」。

    唯一CPIX文件無法針對不同ContentKey@commonEncryptionScheme屬性混合使用多個值。當收到這樣的組合時,密鑰提供者應返回一個描述為「不兼容 ContentKey @ commonEncryptionScheme 組合」的錯誤。

    並非所有ContentKey@commonEncryptionScheme值都與所有DRM技術相容。當收到這樣的組合時,密鑰提供者應返回描述 'ContentKey@ 與' commonEncryptionScheme 不兼容 DRMSystem id '的錯誤。

    ContentKey@commonEncryptionScheme金鑰提供者無法覆寫值。

  • 當在CPIX響應體中接收到不同的值DRMSystem@PSSHDRMSystem.ContentProtectionData內部XML<pssh>元素時,加密器應停止並拋出錯誤。

適用於 CPIX 的 API
  • 金鑰提供者應包含X-Speke-User-AgentHTTP回應標頭的值。

  • SPEKE符合標準的加密器充當客戶端,並將POST操作發送到密鑰提供者端點。

  • 加密程序應包括X-Speke-VersionHTTP請求頭的值,與請求一起使用的SPEKE版本,制定為 MajorVersion。 MinorVersion,就像 2.0 版的 SPEKE「2.0」一樣。如果金鑰提供者不支援加密程式針對目前要求所使用的SPEKE版本,金鑰提供者應傳回錯誤,其說明為「不受支援的SPEKE版本」,而不會嘗試以最佳方式處理CPIX文件。

    加密器定義的X-Speke-Version標頭值無法由金鑰提供者在回應要求時修改。

  • 在回應主體中收到錯誤時,加密程式應擲回錯誤,而不是使用 SPEKE v1.0 版本重試要求。

    如果金鑰提供者沒有傳回錯誤,但無法傳回包含必要資訊的CPIX文件,則加密程式應停止並擲回錯誤。

下表摘要列出訊息主體中金鑰提供者必須傳回的標準訊息。在錯誤的情況下,HTTP響應代碼應該是一個 4XX 或 5XX,從來沒有一個 200。422 錯誤代碼可用於與SPEKE/CPIX相關的所有錯誤。

錯誤大小寫 錯誤訊息

CPIX@ contentId 未定義

遺失 CPIX @ contentId

CPIX@version 尚未定義

遺失 CPIX @version

CPIX不支援 @version

不支援的 CPIX @version

ContentKey@ commonEncryptionScheme 未定義

缺少 ContentKey @ commonEncryptionScheme KIDid(其中id等於 ContentKey @kid 值)

在單個CPIX文檔中使用多個 ContentKey @ commonEncryptionScheme 值

不合規 ContentKey @ commonEncryptionScheme 組合

ContentKey@與commonEncryptionScheme DRM技術不兼容

ContentKey@ commonEncryptionScheme 不兼容 DRMSystemid(其中id等於 DRMSystem @ systemId 值)

X-Speke-版本標頭值不是支援的版本 SPEKE

不支援SPEKE版本

加密合約格式錯誤

格式錯誤的加密合約

加密合同與DRM安全級別限制相矛盾

不支援要求的CPIX加密合約

加密合同不包含任何 VideoFilter 或 AudioFilter 元素

缺少CPIX加密合同