

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

# SPEKE API v1 - 內容金鑰加密
<a name="content-key-encryption"></a>

您可以選擇性地將內容金鑰加密新增至 SPEKE 實作。除了加密內容本身外，內容金鑰加密還會透過加密內容金鑰進行傳輸，以確保完整的端對端保護。如果您未為金鑰提供者實作此項目，則需要傳輸層加密加上強式身分驗證以確保安全。

若要對在 AWS 雲端中執行的加密程式使用內容金鑰加密，客戶會將憑證匯入 AWS Certificate Manager，然後使用產生的憑證 ARNs 進行加密活動。加密程式會使用憑證 ARNs 和 ACM 服務，將加密的內容金鑰提供給 DRM 金鑰提供者。

**限制**  
SPEKE 支援 DASH-IF CPIX 規格中指定的內容金鑰加密，但有下列限制：
+ SPEKE 不支援請求或回應承載的數位簽章驗證 (XMLDSIG)。
+ SPEKE 需要 2048 RSA 型憑證。

這些限制也會列在[自訂和 DASH-IF 規格的限制中](speke-constraints.md)。

**實作內容金鑰加密**  
若要提供內容金鑰加密，請在您的 DRM 金鑰提供者實作中包含下列內容：
+ 處理請求和回應承載中的 `<cpix:DeliveryDataList>` 元素。
+ 在回應承載的 `<cpix:ContentKeyList>` 中提供加密值。

如需這類元素的詳細資訊，請參閱 [DASH-IF CPIX 2.0 規定](https://dashif.org/docs/DASH-IF-CPIX-v2-0.pdf)。

 *請求承載中的` <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>
```