

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# SPEKE API v2 - DASH-IF 仕様のカスタマイズと制約
<a name="speke-constraints-v2"></a>

DASH Industry Forum [CPIX 2.3 仕様](https://dashif.org/docs/CPIX2.3/Cpix.html)は、多くのユースケースとトポロジをサポートしています。SPEKE API v2.0 仕様では、CPIX プロファイルと CPIX 用の API の両方が定義されています。この 2 つの目標を達成するために、次のカスタマイズと制約を適用した CPIX 仕様に準拠しています。

**CPIX プロファイル**
+ SPEKE は、エンクリプタコンシューマーのワークフローに従います。
+ 暗号化されたコンテンツキーの場合、SPEKE により次の制限が適用されます。
  + SPEKE は、リクエストおよびレスポンスペイロードにデジタル署名検証 (XMLDSIG) をサポートしていません。
  + SPEKE には 2048 ビットの RSA ベースの証明書が必要です。
+ SPEKE は CPIX 機能のサブセットのみを利用します。
  + SPEKE は `UpdateHistoryItemList` の機能を省略します。リストがレスポンスに存在する場合、SPEKE はそれを無視します。
  + SPEKE では、ルート/リーフキー機能は省略されます。`ContentKey@dependsOnKey` 属性がレスポンスに存在する場合、SPEKE はそれを無視します。
  + SPEKE では、`BitrateFilter` 要素と `VideoFilter@wcg` 属性は省略されます。これらの要素または属性が CPIX ペイロードに存在する場合、SPEKE はそれを無視します。
+ [スタンダードペイロードコンポーネント](standard-payload-components-v2.md)のページまたは[暗号化契約](encryption-contract-v2.md)のページで「サポートされる」として参照されている要素または属性のみ、SPEKE v2 と交換される CPIX ドキュメントで使用できます。
+ すべての要素および属性は、エンクリプタが CPIX リクエストに含めている場合、キープロバイダーの CPIX レスポンスで有効な値を保持します。そうでない場合、エンクリプタは停止してエラーをスローします。
+ SPEKE は `KeyPeriodFilter` 要素でキーローテーションをサポートします。SPEKE は `ContentKeyPeriod@index` のみを使用して、キー期間を追跡します。
+ HLS シグナリングの場合、複数の `DRMSystem.HLSSignalingData` 要素を使用する必要があります。`DRMSystem.HLSSignalingData@playlist` 属性値「media」で使用されるものと、`DRMSystem.HLSSignalingData@playlist` 属性値「master」で使用されるものです。
+ キーをリクエストするとき、エンクリプタは、`ContentKey` 要素にオプションの `@explicitIV` 属性を使用することがあります。キープロバイダーは、属性がリクエストに含まれていなくても、`@explicitIV` を使用して IV で応答することができます。
+ エンクリプタはキー識別子 (`KID`) を生成しますが、これは与えられたコンテンツ ID とキー期間に対して同じです。キープロバイダーには、リクエストドキュメントに対するレスポンスとして `KID` が含まれます。
+ エンクリプタは `CPIX@contentId` 属性の値を含めます。この属性に空の値を受け取ると、キープロバイダーは「Missing CPIX@contentId」(CPIX@contentId がありません) という説明を含むエラーを返します。`CPIX@contentId` 値をキープロバイダーでオーバーライドすることはできません。

   `CPIX@id` 値が null でない場合は、キープロバイダーによって無視されます。
+ エンクリプタは `CPIX@version` 属性の値を含めます。この属性に空の値を受け取ると、キープロバイダーは「Missing CPIX@version」(CPIX@version がありません) という説明を含むエラーを返します。サポートされていないバージョンのリクエストを受け取った場合、キープロバイダーから返されるエラーの説明は「Unsupported CPIX@version」(サポートされていない CPIX@version です) になります。

   `CPIX@version` 値をキープロバイダーでオーバーライドすることはできません。
+ エンクリプタは、リクエストされたキーごとに `ContentKey@commonEncryptionScheme` 属性の値を含めます。この属性に空の値を受け取ると、キープロバイダーは「Missing ContentKey@commonEncryptionScheme for KID `id`」(KID id の ContentKey@commonEncryptionScheme がありません) という説明を含むエラーを返します。

  一意の CPIX ドキュメントでは、異なる `ContentKey@commonEncryptionScheme` 属性に複数の値を混在させることはできません。このような組み合わせを受信すると、キープロバイダーは「Non compliant ContentKey@commonEncryptionScheme combination」(非準拠の ContentKey @commonEncryptionScheme の組み合わせがあります) という説明を含むエラーを返します。

  すべての `ContentKey@commonEncryptionScheme` 値がすべての DRM テクノロジと互換性があるわけではありません。このような組み合わせを受信すると、キープロバイダーは「ContentKey@commonEncryptionScheme non compatible with DRMSystem `id`」(ContentKey@commonEncryptionScheme は DRMSystem id と互換性がありません) という説明を含むエラーを返します。

   `ContentKey@commonEncryptionScheme` 値をキープロバイダーでオーバーライドすることはできません。
+ CPIX レスポンス本文で `DRMSystem@PSSH` と `DRMSystem.ContentProtectionData` innerXML `<pssh>` 要素に異なる値を受け取った場合、エンクリプタは停止してエラーをスローします。

**CPIX 用の API**
+ キープロバイダーは、`X-Speke-User-Agent` HTTP レスポンスヘッダーの値を含めます。
+ SPEKE 準拠のエンクリプタはクライアントとして機能し、POST オペレーションをキープロバイダーエンドポイントに送信します。
+ エンクリプタは、`X-Speke-Version` HTTP リクエストヘッダーの値と、リクエストで使用される SPEKE バージョンを含めます。その際に、バージョンは MajorVersion.MinorVersion として定式化されます (SPEKE v2.0 の場合は '2.0' など)。キープロバイダーがエンクリプタによって使用される SPEKE バージョンを現在のリクエストでサポートしていない場合、キープロバイダーは「Unsupported SPEKE version」(サポート対象外の SPEKE バージョン) という説明を含むエラーを返し、ベストエフォートベースでの CPIX ドキュメントの処理を試行しません。

  キープロバイダーは、エンクリプタによって定義された `X-Speke-Version` ヘッダー値をリクエストへのレスポンスで変更できません。
+ レスポンス本文でエラーを受信すると、エンクリプタはエラーをスローし、SPEKE v1.0 のバージョニングでリクエストを再試行しません。

  キープロバイダーがエラーを返さないものの、必須情報を含む CPIX ドキュメントを返さない場合、エンクリプタは停止してエラーをスローする必要があります。

次の表は、キープロバイダーがメッセージの本文で返す必要がある標準メッセージをまとめたものです。エラーの場合の HTTP レスポンスコードは 4XX または 5XX になり、200 ではありません。422 エラーコードは SPEKE/CPIX に関連するすべてのエラーに使用できます。


| エラーケース | エラーメッセージ | 
| --- | --- | 
|  CPIX @contentId が定義されていない  |  Missing CPIX@contentId (CPIX@contentId がありません)  | 
|  CPIX @version が定義されていない  |  Missing CPIX@version (CPIX@version がありません)  | 
|  CPIX@version がサポートされていない  |  Unsupported CPIX@version (サポート対象外の CPIX@version)  | 
|  ContentKey@commonEncryptionScheme が定義されていない  |  Missing ContentKey@commonEncryptionScheme for KID `id` (KID id の ContentKey@commonEncryptionScheme がありません) (ここで、`id` は ContentKey@kid の値と等しい)  | 
|  単一の CPIX ドキュメントで複数の ContentKey@commonEncryptionScheme 値が使用されている  |  Non compliant ContentKey@commonEncryptionScheme combination (非準拠の ContentKey@commonEncryptionScheme の組み合わせがあります)  | 
|  ContentKey@commonEncryptionScheme が DRM テクノロジーと互換性がない  |  ContentKey@commonEncryptionScheme non compatible with DRMSystem `id` (ContentKey@commonEncryptionScheme は DRMSystem id と互換性がありません) (ここで、`id` は DRMSystem@systemId の値と等しい)  | 
|  X-Speke-Version ヘッダー値がサポートされている SPEKE バージョンではない  |  Unsupported SPEKE version (サポート対象外の SPEKE バージョン)  | 
|  暗号化契約の形式が正しくない  |  Malformed encryption contract (不正な形式の暗号化契約)  | 
|  暗号化契約が DRM のセキュリティレベルの制約と矛盾している  |  Requested CPIX encryption contract not supported (リクエストされた CPIX 暗号化契約はサポートされていません)  | 
|  暗号化契約に VideoFilter または AudioFilter 要素が含まれていない  |  Missing CPIX encryption contract (CPIX 暗号化契約がありません)  | 