SPEKEAPIv2-加密合约 - 安全打包器和编码器密钥交换API规范

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

SPEKEAPIv2-加密合约

加密合约根据轨道特征定义使用哪些内容密钥来保护给定流集中的哪些轨道。

建议将多个内容密钥用于流集中的不同轨道,但这并不是强制性,而是建议的行业最佳实践 - 至少使用两个不同的内容密钥,一个用于音频轨道,一个用于视频轨道。使用单个内容密钥加密多首曲目是可能的,但需要在加密器发送给密钥提供者的CPIX文档中明确发出信号。一般而言,加密程序总是准确描述需要多少内容密钥以及如何利用它们来加密各种媒体轨道。

原则

加密合同位于CPIX文档的<cpix:ContentKeyUsageRuleList>部分中。在此部分中,<cpix:ContentKeyList> 部分中定义的每个内容密钥都对应一个特定的 <cpix:ContentKeyUsageRule> 元素,其中应包括:

  • 可以引用一个或多个子组件的 ContentKeyUsageRule@intendedTrackType 属性,如果使用多个子组件,则用“+”符号分隔。ContentKeyUsageRule@intendedTrackType 的值在加密合约中应是唯一的,并且不能用于多个 ContentKeyUsageRule 元素。

  • 一个或多个 <cpix:AudioFilter><cpix:VideoFilter> 子元素,具体取决于 ContentKeyUsageRule@intendedTrackType 属性的值。

管理这种关系的规则如下:

  • 当需要使用唯一的内容密钥保护流集中的所有音频和视频轨道时,必须使用字符串 'ALL' 作为 ContentKeyUsageRule@intendedTrackType 属性值。示例 1 显示这样的使用案例。在这种情况下,应包括没有任何属性的 <cpix:AudioFilter /><cpix:VideoFilter /> 子元素。在此特定上下文中,<cpix:AudioFilter> 和/或 <cpix:VideoFilter> 元素的任何其他组合均无效。

  • 对于所有其他使用案例,可以自由定义 ContentKeyUsageRule@intendedTrackType 属性的值,并且 <cpix:AudioFilter /><cpix:VideoFilter /> 子元素的数量必须与通过“+”符号聚合的子组件数量相对应。示例 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

<cpix : >VideoFilter

minPixels、maxPixels、hdr、minFps、 maxFps (可选属性)

wcg

<cpix : >AudioFilter

minChannels, maxChannels (可选属性)

<cpix : >KeyPeriodFilter

periodId (必填属性)

<cpix : >BitrateFilter

不适用

不适用

<cpix : >LabelFilter

不适用

不适用

根据CPIX规范 VideoFilter,[minPixels,maxPixels] 是两个维度的全包范围,而 (minFps,maxFps] 仅包含该 maxFps 维度。因为 AudioFilterminChannels,[,maxChannels] 是两个维度的包含范围。

问题情况

在某些情况下,加密合约中提供的信息可能不完整、含糊不清或存在错误。在这些情况下,加密程序和密钥提供程序必须采取适当的行为并保证对内容的适当保护。下表列出了在这些情况下的建议行为:

在这种情况下 加密程序器应该... 密钥提供程序应该...

没有规则适用于流集中的一个或多个轨道(参见下面的示例 3)

加密器应查看其配置(CPIX有效载荷外部),并验证相关轨道是否不需要加密。如果不是预期情况,则加密程序应引发错误并停止处理。

不相关:密钥提供程序不了解流集结构。

多个规则重叠并建议使用多个内容密钥来加密特定轨道

加密器应按文档顺序应用最后一次 ContentKeyUsageRule 成功评估的结果。

不相关:密钥提供程序不了解流集结构。

加密合同在单个SPEKE请求/响应周期内发生变化

加密程序应引发异常并停止处理,因为密钥提供程序不负责定义加密合约。

首先,为了防止这种情况发生,密钥提供者不得修改SPEKE请求CPIX有效载荷中收到的加密合约。

格式错误的加密合约: intendedTrackType/Filters 基数约束异常、不支持的过滤器或属性

加密器应引发异常,停止处理并且不向密钥提供者发送SPEKE请求,因为这很可能会导致错误的内容保护或使某些曲目不受保护。

密钥提供程序应引发异常并返回“格式错误的加密合约”错误。

格式良好的加密合同,但违反了DRM安全级别的限制:例如,要求使用单个内容密钥来保护音轨和UHD视频轨道

如果加密器知道DRM安全级别限制,则应引发异常,停止处理,不要将SPEKE请求发送给密钥提供者,因为这很可能会导致错误的内容保护。

密钥提供者应引发异常并返回 “不支持请求的CPIX加密合约” 错误。

缺少加密合约

加密器不得发送不包含任何 AudioFilter 内容 VideoFilter 或元素的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:不同的视频轨道有多个内容键(SDHD1/HD2/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 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>