SPEKEAPIv2-加密合同 - 安全封裝器和編碼器金鑰交換API規格

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

SPEKEAPIv2-加密合同

加密合約會根據追蹤特性,定義哪些內容金鑰正在保護指定 Streamset 內的哪些追蹤。

儘管是業界建議的最佳實踐方式,但不是強制性的,但建議您至少使用兩個不同的內容鍵,一個用於音軌,另一個用於視頻軌道。使用單個內容密鑰來加密多個軌道是可能的,但需要在加密器發送給密鑰提供者的CPIX文檔中明確信號。一般而言,加密程式總是會精確描述需要多少個內容金鑰,以及如何利用這些金鑰來加密各種媒體軌道。

原理

加密合同位於CPIX文檔的<cpix:ContentKeyUsageRuleList>部分中。在本節中,在該<cpix:ContentKeyList>部分中定義的每個內容鍵對應於一個特定的<cpix:ContentKeyUsageRule>元素,其中應包括:

  • 可參照一個或多個子元件的ContentKeyUsageRule@intendedTrackType屬性,如果使用多個子元件,則以「+」符號分隔。的值ContentKeyUsageRule@intendedTrackType應在加密合同中是唯一的,並且不能在多個ContentKeyUsageRule元素中使用。

  • 一個或多個<cpix:AudioFilter><cpix:VideoFilter>子元素,這取決於ContentKeyUsageRule@intendedTrackType屬性的值。

管理此關係的規則如下:

  • 當流集的所有音頻和視頻軌道都需要使用唯一的內容鍵進行保護時,'ALL'必須使用該字符串作為ContentKeyUsageRule@intendedTrackType屬性值。範例 1 顯示了這樣的使用案例。在這種情況下,a <cpix:AudioFilter /> 和沒有任何屬性的<cpix:VideoFilter />子元素都應包括在內。在此特定上下文中,任何其他<cpix:AudioFilter>和/或<cpix:VideoFilter>元素的組合都是無效的。

  • 對於所有其他用例,ContentKeyUsageRule@intendedTrackType屬性的值可以自由定義,並且和<cpix:VideoFilter />子元素的<cpix:AudioFilter />數量必須與通過 '+' 符號聚合的子組件的數量相對應。實例 2/3/4/5/6/7/9/10 說明了這一要求,當一個單一的子組件存在於屬性值。ContentKeyUsageRule@intendedTrackType範例 8 在使用多個子元件時說明它:ContentKeyUsageRule@intendedTrackType="SD+HD"由具有不同屬性值的兩個不同<cpix:VideoFilter>子元素描述,並ContentKeyUsageRule@intendedTrackType="HDR+HFR+UHD"由具有不同屬性值的三個不同<cpix:VideoFilter>子元素描述。

篩選條件

CPIX定義了多個過濾元素和屬性,但僅SPEKE支持它的一個子集。下表摘要說明這些差異:

CPIX過濾器類型 整體SPEKE支援 支援的篩選器屬性 SPEKE 不支援的篩選器屬性 SPEKE

< 個人資料比例:> VideoFilter

minPixels,maxPixels, hdr,minFps, maxFps (可選屬性)

WCG

< 個人資料比例:> AudioFilter

minChannels, maxChannels (選擇性屬性)

< 個人資料比例:> KeyPeriodFilter

periodId (強制屬性)

< 個人資料比例:> BitrateFilter

N/A

N/A

< 個人資料比例:> LabelFilter

N/A

N/A

根據的CPIX規格 VideoFilter,[minPixels,maxPixels] 在兩個維度中都是一個全包範圍,而 (minFps,maxFps] 僅適用於尺 maxFps 寸。對於 AudioFilter,[minChannels,maxChannels] 是兩個維度的包含範圍。

問題的情況

在某些情況下,加密合同中提供的信息可能是部分,模糊或錯誤的。在這些情況下,加密程式和金鑰提供者必須採取適當的行為,並確保對內容有適當的保護,這一點很重要。下表顯示在這些情況下建議的行為:

在這種情況下 加密程序應該/應... 金鑰提供者應該/應...

串流集中的一或多個音軌並不適用任何規則 (請參閱下面的範例 3)

加密器應查看其配置(CPIX有效負載外部),並驗證相關軌道不需要加密。如果這不是期望的,加密器應該拋出錯誤並停止處理。

不相關:關鍵提供者不了解流集結構。

多個規則重疊並建議多個內容密鑰來加密特定軌道

加密器應按照文檔的順序應用最後一次 ContentKeyUsageRule 成功評估。

不相關:關鍵提供者不了解流集結構。

加密合約在單SPEKE個請求/響應周期中變化

加密器應引發異常並停止處理,因為密鑰提供商不負責定義加密合同。

為了避免這種情況發生在首位,金鑰提供者不得修改在SPEKE要求的CPIX承載中收到的加密合約。

格式錯誤的加密合同: intendedTrackType/過濾器基數約束異常,不支持的過濾器或屬性

加密程序應引發異常,停止處理,並且不將SPEKE請求發送給密鑰提供商,因為這很可能導致錯誤的內容保護或使某些軌道不受保護。

金鑰提供者應引發例外狀況,並傳回「格式錯誤的加密合約」錯誤。

格式良好的加密合同,但違反了DRM安全級別的約束:例如,要求單個內容密鑰來保護音軌和UHD視頻軌道

如果加密程序已經了解DRM安全級別約束,它應該引發異常,停止處理並且不將SPEKE請求發送給密鑰提供者,因為這很可能會導致錯誤的內容保護。

金鑰提供者應引發例外狀況,並傳回「不支援要求的CPIX加密合約」錯誤。

缺少加密合同

加密器不得發送不包含任何 VideoFilter 或 AudioFilter 元素的CPIX文檔。

金鑰提供者應引發例外狀況,並傳回「缺少CPIX加密合約」錯誤。

加密合約範例

範例 1:適用於所有音訊和視訊軌道的一個內容金鑰

<cpix:ContentKeyUsageRuleList> <cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="ALL"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:AudioFilter /> <cpix:VideoFilter /> </cpix:ContentKeyUsageRule> </cpix:ContentKeyUsageRuleList>

範例 2:所有視訊軌道都有一個內容金鑰,所有音軌都有一個內容金鑰

<cpix:ContentKeyUsageRuleList> <cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="VIDEO"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter /> </cpix:ContentKeyUsageRule> <cpix:ContentKeyUsageRule kid="53abdba2-f210-43cb-bc90-f18f9a890a02" intendedTrackType="AUDIO"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:AudioFilter /> </cpix:ContentKeyUsageRule> </cpix:ContentKeyUsageRuleList>

範例 3:所有視訊軌道的一個內容金鑰、未加密的音軌

<cpix:ContentKeyUsageRuleList> <cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="VIDEO"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter /> </cpix:ContentKeyUsageRule> </cpix:ContentKeyUsageRuleList>

範例 4:不同視訊軌道 (SD/HD) 的多個內容金鑰,所有音軌都有一個內容金鑰

<cpix:ContentKeyUsageRuleList> <!-- Rule for SD video tracks (up to 1024x576) --> <cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="SD"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter maxPixels="589824" /> </cpix:ContentKeyUsageRule> <!-- Rule for HD video tracks (more than 1024x576) --> <cpix:ContentKeyUsageRule kid="37e3de05-9a3b-4c69-8970-63c17a95e0b7" intendedTrackType="HD"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter minPixels="589825" /> </cpix:ContentKeyUsageRule> <!-- Rule for all audio tracks --> <cpix:ContentKeyUsageRule kid="53abdba2-f210-43cb-bc90-f18f9a890a02" intendedTrackType="AUDIO"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:AudioFilter /> </cpix:ContentKeyUsageRule> </cpix:ContentKeyUsageRuleList>

範例 5:不同視訊軌道 (SD/HD/UHD) 的多個內容鍵,所有音軌都有一個內容金鑰

<cpix:ContentKeyUsageRuleList> <!-- Rule for SD video tracks (up to 1024x576) --> <cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="SD"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter maxPixels="589824" /> </cpix:ContentKeyUsageRule> <!-- Rule for HD video tracks (more than 1024x576, up to 1920x1080) --> <cpix:ContentKeyUsageRule kid="37e3de05-9a3b-4c69-8970-63c17a95e0b7" intendedTrackType="HD"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter minPixels="589825" maxPixels="2073600" /> </cpix:ContentKeyUsageRule> <!-- Rule for UHD video tracks (more than 1920x1080) --> <cpix:ContentKeyUsageRule kid="75c6fa78-8b5d-6d75-9653-26f41b78d1a3" intendedTrackType="UHD"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter minPixels="2073601" /> </cpix:ContentKeyUsageRule> <!-- Rule for all audio tracks --> <cpix:ContentKeyUsageRule kid="53abdba2-f210-43cb-bc90-f18f9a890a02" intendedTrackType="AUDIO"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:AudioFilter /> </cpix:ContentKeyUsageRule> </cpix:ContentKeyUsageRuleList>

範例 6:不同視訊軌道的多個內容鍵 (SD/HD/UHD1/UHD2),所有音軌都有一個內容金鑰

<cpix:ContentKeyUsageRuleList> <!-- Rule for SD video tracks (up to 1024x576) --> <cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="SD"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter maxPixels="589824" /> </cpix:ContentKeyUsageRule> <!-- Rule for HD video tracks (more than 1024x576, up to 1920x1080) --> <cpix:ContentKeyUsageRule kid="37e3de05-9a3b-4c69-8970-63c17a95e0b7" intendedTrackType="HD"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter minPixels="589825" maxPixels="2073600" /> </cpix:ContentKeyUsageRule> <!-- Rule for UHD1 video tracks (more than 1920x1080, up to 4096x2160) --> <cpix:ContentKeyUsageRule kid="75c6fa78-8b5d-6d75-9653-26f41b78d1a3" intendedTrackType="UHD1"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter minPixels="2073601" maxPixels="8847360" /> </cpix:ContentKeyUsageRule> <!-- Rule for UHD2 video tracks (more than 4096x2160) --> <cpix:ContentKeyUsageRule kid="63d2ec36-6b7c-9f34-4546-97d01f36f7c5" intendedTrackType="UHD2"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter minPixels="8847361" /> </cpix:ContentKeyUsageRule> <!-- Rule for all audio tracks --> <cpix:ContentKeyUsageRule kid="53abdba2-f210-43cb-bc90-f18f9a890a02" intendedTrackType="AUDIO"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:AudioFilter /> </cpix:ContentKeyUsageRule> </cpix:ContentKeyUsageRuleList>

範例 7:不同視訊軌道的多個內容鍵 (SD/HD1/HD2UHD1/UHD2),所有音軌都有一個內容金鑰

<cpix:ContentKeyUsageRuleList> <!-- Rule for SD video tracks (up to 1024x576) --> <cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="SD"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter maxPixels="589824" /> </cpix:ContentKeyUsageRule> <!-- Rule for HD1 video tracks (more than 1024x576, up to 1280x720) --> <cpix:ContentKeyUsageRule kid="37e3de05-9a3b-4c69-8970-63c17a95e0b7" intendedTrackType="HD1"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter minPixels="589825" maxPixels="921600" /> </cpix:ContentKeyUsageRule> <!-- Rule for HD2 video tracks (more than 1280x720, up to 1920x1080) --> <cpix:ContentKeyUsageRule kid="cda406d8-9d87-4f76-92da-31110e756176" intendedTrackType="HD2"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter minPixels="921601" maxPixels="2073600" /> </cpix:ContentKeyUsageRule> <!-- Rule for UHD1 video tracks (more than 1920x1080, up to 4096x2160) --> <cpix:ContentKeyUsageRule kid="75c6fa78-8b5d-6d75-9653-26f41b78d1a3" intendedTrackType="UHD1"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter minPixels="2073601" maxPixels="8847360" /> </cpix:ContentKeyUsageRule> <!-- Rule for UHD2 video tracks (more than 4096x2160) --> <cpix:ContentKeyUsageRule kid="63d2ec36-6b7c-9f34-4546-97d01f36f7c5" intendedTrackType="UHD2"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter minPixels="8847361" /> </cpix:ContentKeyUsageRule> <!-- Rule for all audio tracks --> <cpix:ContentKeyUsageRule kid="53abdba2-f210-43cb-bc90-f18f9a890a02" intendedTrackType="AUDIO"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:AudioFilter /> </cpix:ContentKeyUsageRule> </cpix:ContentKeyUsageRuleList>

範例 8:不同視訊軌道的多個內容鍵 (根據多種屬性類型),所有音軌都有一個內容金鑰

<cpix:ContentKeyUsageRuleList> <!-- Rule for SD and HD video tracks--> <cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="SD+HD"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter maxPixels="442368" maxFps="30" hdr="false"/> <cpix:VideoFilter minPixels="442369" maxPixels="2073600" maxFps="30" hdr="false"/> </cpix:ContentKeyUsageRule> <!-- Rule for HDR, HFR and UHD video tracks--> <cpix:ContentKeyUsageRule kid="37e3de05-9a3b-4c69-8970-63c17a95e0b7" intendedTrackType="HDR+HFR+UHD"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter hdr="true" /> <cpix:VideoFilter minFps="30" /> <cpix:VideoFilter minPixels="20736001" /> </cpix:ContentKeyUsageRule> <!-- Rule for all audio tracks--> <cpix:ContentKeyUsageRule kid="53abdba2-f210-43cb-bc90-f18f9a890a02" intendedTrackType="AUDIO"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:AudioFilter /> </cpix:ContentKeyUsageRule> </cpix:ContentKeyUsageRuleList>

範例 9:所有視訊軌道都有一個內容按鍵,立體聲和多聲道音軌的多個內容按鍵

<cpix:ContentKeyUsageRuleList> <!-- Rule for video tracks--> <cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="VIDEO"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter /> </cpix:ContentKeyUsageRule> <!-- Rule for stereo audio tracks--> <cpix:ContentKeyUsageRule kid="53abdba2-f210-43cb-bc90-f18f9a890a02" intendedTrackType="STEREO_AUDIO"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:AudioFilter maxChannels="2"/> </cpix:ContentKeyUsageRule> <!-- Rule for multichannel audio tracks--> <cpix:ContentKeyUsageRule kid="7ae8e96f-309e-42c3-a510-24023d923373" intendedTrackType="MULTICHANNEL_AUDIO"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <AudioFilter minChannels="3"/> </cpix:ContentKeyUsageRule> </cpix:ContentKeyUsageRuleList>

範例 10:一個內容按鍵可用於所有視訊軌道、多個立體聲內容按鍵,以及兩種多聲道音軌

<cpix:ContentKeyUsageRuleList> <!-- Rule for video tracks--> <cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="VIDEO"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:VideoFilter /> </cpix:ContentKeyUsageRule> <!-- Rule for stereo audio tracks--> <cpix:ContentKeyUsageRule kid="53abdba2-f210-43cb-bc90-f18f9a890a02" intendedTrackType="STEREO_AUDIO"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:AudioFilter maxChannels="2"/> </cpix:ContentKeyUsageRule> <!-- Rule for multichannel audio tracks (3 to 6 channels)--> <cpix:ContentKeyUsageRule kid="7ae8e96f-309e-42c3-a510-24023d923373" intendedTrackType="MULTICHANNEL_AUDIO_3_6"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:AudioFilter minChannels="3" maxChannels="6"/> </cpix:ContentKeyUsageRule> <!-- Rule for multichannel audio tracks (7 channels and more)--> <cpix:ContentKeyUsageRule kid="81eb3761-55ff-4d22-a31d-94f01bbfd8ba" intendedTrackType="MULTICHANNEL_AUDIO_7"> <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/> <cpix:AudioFilter minChannels="7"/> </cpix:ContentKeyUsageRule> </cpix:ContentKeyUsageRuleList>