SPEKE API v1 - 内容密钥加密 - 安全包装程序和编码器密钥交换 API 规范

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

SPEKE API v1 - 内容密钥加密

您可以选择将内容密钥加密添加到 SPEKE 实现。内容密钥加密除了对内容本身进行加密外,还通过加密传输的内容密钥来确保全面 end-to-end 保护。如果您未为密钥提供程序实现此项,则依靠传输层加密以及强大的身份验证来实现安全性。

要将内容密钥加密用于在 AWS 云中运行的加密程序,客户将证书导入 AWS Certificate Manager 中,然后对其加密活动使用生成的证书 ARN。加密程序使用证书 ARN 和 ACM 服务来向 DRM 密钥提供程序提供加密的内容密钥。

限制

SPEKE 支持具有以下限制的 DASH-IF CPIX 规范中指定的内容密钥加密:

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

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

这些限制也在 DASH-IF 规范的自定义项和约束中列出。

实现内容密钥加密

要提供内容密钥加密,请在您的 DRM 密钥提供程序实现中包含以下内容:

  • 处理请求和响应负载中的 <cpix:DeliveryDataList> 元素。

  • 在响应负载的 <cpix:ContentKeyList> 中提供加密值。

有关这些元素的更多信息,请参阅 DASH-IF CPIX 2.0 规范

请求负载中的示例内容密钥加密元素 <cpix:DeliveryDataList>

下面的示例以粗体突出显示了增加的 <cpix:DeliveryDataList> 元素:

<?xml version="1.0" encoding="UTF-8"?> <cpix:CPIX id="example-test-doc-encryption" xmlns:cpix="urn:dashif:org:cpix" xmlns:pskc="urn:ietf:params:xml:ns:keyprov:pskc" xmlns:speke="urn:aws:amazon:com:speke"> <cpix:DeliveryDataList> <cpix:DeliveryData id="<ORIGIN SERVER ID>"> <cpix:DeliveryKey> <ds:X509Data> <ds:X509Certificate><X.509 CERTIFICATE, BASE-64 ENCODED></ds:X509Certificate> </ds:X509Data> </cpix:DeliveryKey> </cpix:DeliveryData> </cpix:DeliveryDataList> <cpix:ContentKeyList> ... </cpix:ContentKeyList> </cpix:CPIX>

响应负载中的示例内容密钥加密元素 <cpix:DeliveryDataList>

下面的示例以粗体突出显示了增加的 <cpix:DeliveryDataList> 元素:

<cpix:CPIX xmlns:cpix="urn:dashif:org:cpix" xmlns:enc="http://www.w3.org/2001/04/xmlenc#" xmlns:pskc="urn:ietf:params:xml:ns:keyprov:pskc" xmlns:speke="urn:aws:amazon:com:speke" id="hls_test_001"> <cpix:DeliveryDataList> <cpix:DeliveryData id="<ORIGIN SERVER ID>"> <cpix:DeliveryKey> <ds:X509Data> <ds:X509Certificate><X.509 CERTIFICATE, BASE-64 ENCODED></ds:X509Certificate> </ds:X509Data> </cpix:DeliveryKey> <cpix:DocumentKey Algorithm="http://www.w3.org/2001/04/xmlenc#aes256-cbc"> <cpix:Data> <pskc:Secret> <pskc:EncryptedValue> <enc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p" /> <enc:CipherData> <enc:CipherValue><RSA CIPHER VALUE></enc:CipherValue> </enc:CipherData> </pskc:EncryptedValue> <pskc:ValueMAC>qnei/5TsfUwDu+8bhsZrLjDRDngvmnUZD2eva7SfXWw=</pskc:ValueMAC> </pskc:Secret> </cpix:Data> </cpix:DocumentKey> <cpix:MACMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#hmac-sha512"> <cpix:Key> <pskc:EncryptedValue> <enc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p" /> <enc:CipherData> <enc:CipherValue><RSA CIPHER VALUE></enc:CipherValue> </enc:CipherData> </pskc:EncryptedValue> <pskc:ValueMAC>DGqdpHUfFKxdsO9+EWrPjtdTCVfjPLwwtzEcFC/j0xY=</pskc:ValueMAC> </cpix:Key> </cpix:MACMethod> </cpix:DeliveryData> </cpix:DeliveryDataList> <cpix:ContentKeyList> ... </cpix:ContentKeyList> </cpix:CPIX>

响应负载中的示例内容密钥加密元素 <cpix:ContentKeyList>

下面的示例显示了在响应负载的 <cpix:ContentKeyList> 元素中的加密内容密钥处理。这将使用 <pskc:EncryptedValue> 元素:

<cpix:ContentKeyList> <cpix:ContentKey kid="682681c8-69fa-4434-9f9f-1a7f5389ec02"> <cpix:Data> <pskc:Secret> <pskc:EncryptedValue> <enc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes256-cbc" /> <enc:CipherData> <enc:CipherValue>NJYebfvJ2TdMm3k6v+rLNVYb0NoTJoTLBBdbpe8nmilEfp82SKa7MkqTn2lmQBPB</enc:CipherValue> </enc:CipherData> </pskc:EncryptedValue> <pskc:ValueMAC>t9lW4WCebfS1GP+dh0IicMs+2+jnrAmfDa4WU6VGHc4=</pskc:ValueMAC> </pskc:Secret> </cpix:Data> </cpix:ContentKey> </cpix:ContentKeyList>

相比而言,以下示例显示了类似的响应负载,其中包含以未加密的明文密钥形式提供的内容密钥。这将使用 <pskc:PlainValue> 元素:

<cpix:ContentKeyList> <cpix:ContentKey explicitIV="OFj2IjCsPJFfMAxmQxLGPw==" kid="682681c8-69fa-4434-9f9f-1a7f5389ec02"> <cpix:Data> <pskc:Secret> <pskc:PlainValue>5dGAgwGuUYu4dHeHtNlxJw==</pskc:PlainValue> </pskc:Secret> </cpix:Data> </cpix:ContentKey> </cpix:ContentKeyList>