SPEKEAPIv2--IF 规范的自定义和约束 DASH - 安全打包器和编码器密钥交换API规范

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

SPEKEAPIv2--IF 规范的自定义和约束 DASH

DASH行业论坛 CPIX2.3 规范支持多种用例和拓扑。SPEKEAPIv2.0 规范定义了CPIX配置文件和 fo API r。CPIX为了实现这两个目标,它遵守CPIX规范,并具有以下自定义和限制:

CPIX个人资料
  • SPEKE 遵循 Encryptor Consumer 工作流。

  • 对于加密的内容密钥,SPEKE应用以下限制:

    • SPEKE不支持请求或响应负载的数字签名验证 (XMLDSIG)。

    • SPEKE需要RSA基于 2048 的证书。

  • 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属性值为 “master”。

  • 当请求密钥时,加密程序可能会在 ContentKey 元素上使用可选的 @explicitIV 属性。密钥提供程序可以使用 @explicitIV 来响应 IV,即使该属性未包含在请求中。

  • 加密程序创建密钥标识符 (KID),这对于任何给定的内容 ID 和密钥周期保持不变。密钥提供程序在其对请求文档的响应中包含 KID

  • 加密程序应包含 CPIX@contentId 属性的值。当收到此属性的空值时,密钥提供者应返回一个错误,描述为 “Missing CPIX @contentId”。 CPIX@contentId值不能被密钥提供者覆盖。

    CPIX@id 值(如果不为空)应被密钥提供程序忽略。

  • 加密程序应包含 CPIX@version 属性的值。当收到此属性的空值时,密钥提供者应返回一个错误,描述为 “Miss CPIX ing @version”。当收到版本不支持的请求时,密钥提供程序返回的错误描述应为 “不支持 CPIX @version”。

    CPIX@version 值不能被密钥提供程序覆盖。

  • 加密程序应包括每个所请求密钥的 ContentKey@commonEncryptionScheme 属性值。当收到此属性的空值时,密钥提供者应返回一个错误,描述为 “缺少 ContentKey @ f commonEncryptionScheme or KIDid”。

    一个唯一的CPIX文档不能混合不同ContentKey@commonEncryptionScheme属性的多个值。收到此类组合时,密钥提供者应返回一条错误信息,描述为 “不合规 ContentKey @ commonEncryptionScheme 组合”。

    并非所有ContentKey@commonEncryptionScheme值都与所有DRM技术兼容。当收到这样的组合时,密钥提供者应返回一个错误,描述为 “ContentKey@ commonEncryptionScheme 不兼容 DRMSystemid”。

    ContentKey@commonEncryptionScheme 值不能被密钥提供程序覆盖。

  • 当在CPIX响应正文中接收不同值DRMSystem@PSSHDRMSystem.ContentProtectionData内部XML<pssh>元素时,加密器应停止并抛出错误。

API for CPIX
  • 密钥提供者应包含X-Speke-User-AgentHTTP响应标头的值。

  • SPEKE兼容的加密器充当客户端,并将POST操作发送到密钥提供程序端点。

  • 加密器应包含X-Speke-VersionHTTP请求标头的值,请求中使用的SPEKE版本应表述为 MajorVersion。 MinorVersion,比如 SPEKE v2.0 的 “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

不支持 @version CPIX

ContentKey@ commonEncryptionScheme 未定义

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

在单个CPIX文档中使用多个 ContentKey @ commonEncryptionScheme 值

不合规的 ContentKey @ commonEncryptionScheme 组合

ContentKey@ commonEncryptionScheme 与DRM技术不兼容

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

X-Speke-Version 标头值不是支持的版本 SPEKE

不支持的SPEKE版本

加密合约格式不正确

格式不正确的加密合约

加密合同与DRM安全级别限制相矛盾

不支持请求的CPIX加密合约

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

缺少CPIX加密合约