

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# SPEKE API v2
<a name="the-speke-api-v2"></a>

Dies ist die REST-API für Secure Packager und Encoder Key Exchange (SPEKE) v2. Mit dieser Spezifizierung stellen Sie Kunden, die Verschlüsselung verwenden, DRM-Urheberrechtsschutz bereit. Um SPEKE-konform zu sein, muss Ihr DRM-Schlüsselanbieter die in dieser Spezifikation beschriebene REST-API verfügbar machen. Der Verschlüsseler führt API-Aufrufe Ihres Schlüsselanbieters durch.

**Anmerkung**  
Die Codebeispiele in dieser Spezifikation dienen lediglich der Illustration. Sie können die Beispiele nicht ausführen, da sie nicht Teil einer vollständigen SPEKE-Implementierung sind.

SPEKE verwendet die Datenstrukturdefinition des DASH Industry Forum Content Protection Information Exchange Format (DASH-IF-CPIX) für den Schlüsselaustausch, mit einigen Einschränkungen. DASH-IF-CPIXdefiniert ein Schema, das einen erweiterbaren Multi-DRM-Austausch von der DRM-Plattform zum Verschlüsseler ermöglicht. So wird für alle Verpackungsformate mit adaptiven Bitraten zum Zeitpunkt der Inhaltkompression und -verpackung Inhaltsverschlüsselung bereitgestellt. Zu den Verpackungsformaten mit adaptiven Bitraten gehören HLS, DASH und MSS.

Ab der Version 2.0 ist SPEKE auf eine bestimmte CPIX-Version ausgerichtet:

Auf der SPEKE-Seite wird dies durch die Verwendung des `X-Speke-Version` HTTP-Headers und auf der CPIX-Seite durch die Verwendung des Attributs erzwungen. `CPIX@version` Das Fehlen dieser Elemente in den Anfragen ist typisch für ältere SPEKE v1-Workflows. In SPEKE v2-Workflows wird erwartet, dass der Schlüsselanbieter CPIX-Dokumente nur verarbeitet, wenn er beide Versionsparameter unterstützt.

Detaillierte Informationen zum Austauschformat finden Sie in der [CPIX](https://dashif.org/docs/CPIX2.3/Cpix.html) 2.3-Spezifikation des DASH Industry Forum.

Insgesamt bringt SPEKE v2.0 im Vergleich zu SPEKE v1.0 die folgenden Weiterentwicklungen:
+ Alle Tags aus dem SPEKE-XML-Namespace sind zugunsten gleichwertiger Tags im CPIX-XML-Namespace veraltet
+  `SPEKE:ProtectionHeader`ist veraltet und wird ersetzt durch `CPIX:DRMSystem.SmoothStreamingProtectionHeaderData` 
+  `CPIX:URIExtXKey`, `SPEKE:KeyFormat` und `SPEKE:KeyFormatVersions` sind veraltet und wurden ersetzt durch `CPIX:DRMSystem.HLSSignalingData` 
+  `CPIX@id`wird ersetzt durch `CPIX@contentId` 
+ Neue obligatorische CPIX-Attribute:, `CPIX@version` `ContentKey@commonEncryptionScheme` 
+ Neues optionales CPIX-Element: `DRMSystem.ContentProtectionData` 
+ Support für mehrere Inhaltsschlüssel
+ Versionsübergreifender Mechanismus zwischen SPEKE und CPIX
+ Entwicklung der HTTP-Header: neuer Header, Header umbenannt in `X-Speke-Version` `Speke-User-Agent` `X-Speke-User-Agent` 
+ Veraltete Heartbeat-API

Da die SPEKE v1.0-Spezifikation unverändert bleibt, müssen bestehende Implementierungen nicht geändert werden, um SPEKE v1.0-Workflows weiterhin zu unterstützen.

**Topics**
+ [SPEKE API v2 — Anpassungen und Einschränkungen der DASH-IF-Spezifikation](speke-constraints-v2.md)
+ [SPEKE API v2 — Standard-Payload-Komponenten](standard-payload-components-v2.md)
+ [SPEKE API v2 - Verschlüsselungsvertrag](encryption-contract-v2.md)
+ [SPEKE API v2 — Beispiele für Live-Workflow-Methodenaufrufe](live-workflow-methods-v2.md)
+ [SPEKE API v2 — Beispiele für VOD-Workflow-Methodenaufrufe](vod-workflow-method-v2.md)
+ [SPEKE API v2 — Verschlüsselung von Inhaltsschlüsseln](content-key-encryption-v2.md)
+ [SPEKE API v2 — Überschreiben der Schlüssel-ID](kid-override-v2.md)

# SPEKE API v2 — Anpassungen und Einschränkungen der DASH-IF-Spezifikation
<a name="speke-constraints-v2"></a>

Die [CPIX 2.3-Spezifikation](https://dashif.org/docs/CPIX2.3/Cpix.html) des DASH Industry Forum unterstützt eine Reihe von Anwendungsfällen und Topologien. Die SPEKE API v2.0-Spezifikation definiert sowohl ein CPIX-Profil als auch eine API für CPIX. Um diese beiden Ziele zu erreichen, hält sie sich an die CPIX-Spezifikation mit den folgenden Anpassungen und Einschränkungen:

**CPIX-Profil**
+ SPEKE folgt dem Encryptor Consumer-Workflow.
+ Für verschlüsselte Inhaltsschlüssel wendet SPEKE die folgenden Einschränkungen an:
  + SPEKE unterstützt keine Überprüfung digitaler Signaturen (XMLDSIG) für Payloads von Anfragen oder Antworten.
  + SPEKE benötigt 2048 RSA-basierte Zertifikate.
+ SPEKE nutzt nur einen Teil der CPIX-Funktionen:
  + SPEKE lässt die Funktionalität weg. `UpdateHistoryItemList` Wenn die Liste in der Antwort vorhanden ist, ignoriert SPEKE sie.
  + SPEKE lässt die wichtigsten Funktionen aus. root/leaf Wenn das `ContentKey@dependsOnKey` Attribut in der Antwort vorhanden ist, ignoriert SPEKE es.
  + SPEKE lässt das `BitrateFilter` Element und das Attribut weg. `VideoFilter@wcg` Wenn diese Elemente oder Attribute in der CPIX-Nutzlast vorhanden sind, ignoriert SPEKE sie.
+ Nur die Elemente oder Attribute, auf die auf der Seite [Standard-Payload-Komponenten oder der Seite](standard-payload-components-v2.md) mit dem [Verschlüsselungsvertrag](encryption-contract-v2.md) als „Unterstützt“ verwiesen wird, können in CPIX-Dokumenten verwendet werden, die mit SPEKE v2 ausgetauscht werden.
+ Wenn sie vom Verschlüsseler in einer CPIX-Anfrage enthalten sind, müssen alle Elemente und Attribute in der CPIX-Antwort des Schlüsselanbieters einen gültigen Wert enthalten. Wenn nicht, stoppt der Verschlüsseler und gibt einen Fehler aus.
+ SPEKE unterstützt die Schlüsselrotation mit `KeyPeriodFilter` Elementen. SPEKE verwendet nur die`ContentKeyPeriod@index`, um den Schlüsselzeitraum zu verfolgen.
+ Für die HLS-Signalisierung müssen mehrere `DRMSystem.HLSSignalingData` Elemente verwendet werden: eines mit dem `DRMSystem.HLSSignalingData@playlist` Attributwert „media“ und eines mit dem `DRMSystem.HLSSignalingData@playlist` Attributwert „master“.
+ Beim Anfordern von Schlüsseln verwendet der Verschlüsseler möglicherweise das optionale Attribut `@explicitIV` des Elements `ContentKey`. Der Schlüsselanbieter kann mit einem IV unter Verwendung von `@explicitIV` antworten, auch wenn das Attribut nicht in der Anforderung enthalten ist.
+ Die Verschlüsseler erstellt die Schlüssel-ID (`KID`), die für alle Inhalts-IDs und Schlüsselzeiträume gleich bleibt. Der Schlüsselanbieter schließt `KID` in seiner Antwort auf das Anforderungsdokument ein.
+ Der Verschlüsseler muss einen Wert für das Attribut enthalten. `CPIX@contentId` Wenn der Schlüsselanbieter einen leeren Wert für dieses Attribut erhält, gibt er einen Fehler mit der Beschreibung „Missing CPIX @contentId“ zurück. `CPIX@contentId`Der Wert kann vom Schlüsselanbieter nicht überschrieben werden.

   `CPIX@id`Wert, falls nicht Null, muss vom Schlüsselanbieter ignoriert werden.
+ Der Verschlüsseler muss einen Wert für das `CPIX@version` Attribut enthalten. Wenn der Schlüsselanbieter einen leeren Wert für dieses Attribut erhält, gibt er einen Fehler mit der Beschreibung „Missing CPIX @version“ zurück. Wenn eine Anfrage mit einer nicht unterstützten Version empfangen wird, muss die vom Schlüsselanbieter zurückgegebene Fehlerbeschreibung „Unsupported CPIX @version“ lauten.

   `CPIX@version`Der Wert kann vom Schlüsselanbieter nicht überschrieben werden.
+ Der Verschlüsseler muss für jeden angeforderten Schlüssel einen Wert für das `ContentKey@commonEncryptionScheme` Attribut angeben. Wenn der Schlüsselanbieter einen leeren Wert für dieses Attribut erhält, gibt er einen Fehler mit der Beschreibung „Missing ContentKey @ commonEncryptionScheme for KID`id`“ zurück.

  Ein einzelnes CPIX-Dokument kann nicht mehrere Werte für verschiedene Attribute kombinieren. `ContentKey@commonEncryptionScheme` Beim Empfang einer solchen Kombination gibt der Schlüsselanbieter einen Fehler mit der Beschreibung „Nicht konforme ContentKey @-Kombination“ zurück. commonEncryptionScheme 

  Nicht alle `ContentKey@commonEncryptionScheme` Werte sind mit allen DRM-Technologien kompatibel. Beim Empfang einer solchen Kombination gibt der Schlüsselanbieter einen Fehler mit der Beschreibung „ContentKey@ commonEncryptionScheme nicht kompatibel mit DRMSystem `id`“ zurück.

   `ContentKey@commonEncryptionScheme`Der Wert kann vom Schlüsselanbieter nicht überschrieben werden.
+ Beim Empfang verschiedener Werte für ein `DRMSystem.ContentProtectionData` `<pssh>` InnerXML-Element im CPIX-Antworttext stoppt der Verschlüsseler `DRMSystem@PSSH` und gibt einen Fehler aus.

**API für CPIX**
+ Der Schlüsselanbieter muss einen Wert für den `X-Speke-User-Agent` HTTP-Antwort-Header angeben.
+ Ein SPEKE-kompatibler Verschlüsseler fungiert als Client und sendet POST-Operationen an den Endpunkt des Schlüsselanbieters.
+ Der Verschlüsseler muss einen Wert für den `X-Speke-Version` HTTP-Anforderungsheader enthalten, wobei die SPEKE-Version, die bei der Anfrage verwendet wurde, formuliert ist als. MajorVersion MinorVersion, wie '2.0' für SPEKE v2.0. Wenn der Schlüsselanbieter die vom Verschlüsseler für die aktuelle Anfrage verwendete SPEKE-Version nicht unterstützt, gibt der Schlüsselanbieter einen Fehler mit der Beschreibung „SPEKE-Version nicht unterstützt“ zurück und versucht nicht, das CPIX-Dokument nach bestem Wissen zu verarbeiten.

  Der vom Verschlüsseler definierte `X-Speke-Version` Header-Wert kann vom Schlüsselanbieter in der Antwort auf die Anfrage nicht geändert werden.
+ Beim Empfang von Fehlern im Antworttext gibt der Verschlüsseler einen Fehler aus und versucht die Anfrage nicht erneut mit einer SPEKE v1.0-Version.

  Wenn der Schlüsselanbieter keinen Fehler zurückgibt, aber kein CPIX-Dokument zurückgibt, das die obligatorischen Informationen enthält, sollte der Verschlüsseler den Vorgang beenden und einen Fehler ausgeben.

In der folgenden Tabelle sind die Standardnachrichten zusammengefasst, die vom Schlüsselanbieter im Hauptteil der Nachricht zurückgegeben werden müssen. Der HTTP-Antwortcode muss in Fehlerfällen ein 4XX oder ein 5XX sein, niemals ein 200. Der 422-Fehlercode kann für alle Fehler im Zusammenhang mit SPEKE/CPIX verwendet werden.


| Fehlerfall | Fehlermeldung | 
| --- | --- | 
|  CPIX @contentId ist nicht definiert  |  CPIX @contentId fehlt  | 
|  CPIX @version ist nicht definiert  |  CPIX @version fehlt  | 
|  CPIX @version wird nicht unterstützt  |  CPIX @version wird nicht unterstützt  | 
|  ContentKey@ commonEncryptionScheme ist nicht definiert  |   ContentKey@ commonEncryptionScheme für KID fehlt `id` (wo dem Wert ContentKey @kid `id` entspricht)  | 
|  In einem einzigen CPIX-Dokument werden mehrere ContentKey commonEncryptionScheme @-Werte verwendet  |  Nicht konforme @-Kombination ContentKey commonEncryptionScheme   | 
|  ContentKey@ commonEncryptionScheme ist nicht mit der DRM-Technologie kompatibel  |  ContentKey@ ist commonEncryptionScheme nicht kompatibel mit DRMSystem `id` (wo dem `id` Wert DRMSystem @systemId entspricht)  | 
|  X-Speke-Version Der Header-Wert ist keine unterstützte SPEKE-Version  |  SPEKE-Version wird nicht unterstützt  | 
|  Der Verschlüsselungsvertrag ist falsch formatiert  |  Fehlerhafter Verschlüsselungsvertrag  | 
|  Der Verschlüsselungsvertrag widerspricht den Einschränkungen der DRM-Sicherheitsstufen  |  Der angeforderte CPIX-Verschlüsselungsvertrag wird nicht unterstützt  | 
|  Der Verschlüsselungsvertrag enthält keine OE-Elemente VideoFilter AudioFilter   |  Fehlender CPIX-Verschlüsselungsvertrag  | 

# SPEKE API v2 — Standard-Payload-Komponenten
<a name="standard-payload-components-v2"></a>

Durch eine einzige SPEKE-Anfrage kann der Verschlüsseler mehrere Inhaltsschlüssel zusammen mit der erforderlichen Manifestsignalisierung für mehrere Verpackungsformate anfordern, je nach dem Verschlüsselungsvertrag, der für einen bestimmten Inhalt definiert ist.

Um all diese Aspekte abzudecken, besteht ein Standard-CPIX-Dokument aus drei obligatorischen Listenabschnitten sowie einem optionalen Listenabschnitt für die Schlüsselrotation bei Live-Inhalten.

**<cpix:CPIX><cpix: ContentKeyList > Abschnitt und Element der obersten Ebene**  
Dies ist ein obligatorischer Abschnitt, der sowohl für Live- als auch für VOD-Streaming relevant ist und die verschiedenen Inhaltsschlüssel definiert, die vom Verschlüsseler verwendet werden müssen. Das `<cpix:ContentKeyList>` Element kann ein oder mehrere `<cpix:ContentKey>` untergeordnete Elemente enthalten, von denen jedes einen eigenen Inhaltsschlüssel beschreibt.

Gemäß der CPIX-Spezifikation sind die möglichen Werte des `ContentKey@commonEncryptionScheme` Attributs in der Spezifikation Common Encryption in ISO-Basisdateien für Mediendateien (ISO/IEC 23001-7:2016) definiert:
+ 'cenc': Verschlüsselung von Vollproben im AES-CTR-Modus und Video-NAL-Untermusterverschlüsselung
+ 'cbc1': AES-CBC-Modus für vollständige Stichproben und Video-NAL-Teilmusterverschlüsselung
+ 'cens': Partielle Video-NAL-Musterverschlüsselung im AES-CTR-Modus
+ 'cbcs': Partielle Video-NAL-Musterverschlüsselung im AES-CBC-Modus

Das folgende Beispiel zeigt ein CPIX-Dokument mit einem einzigen, unverschlüsselten Inhaltsschlüssel:

```
<cpix:CPIX contentId="abc123" version="2.3" xmlns:cpix="urn:dashif:org:cpix" xmlns:pskc="urn:ietf:params:xml:ns:keyprov:pskc">
	<cpix:ContentKeyList>
		<cpix:ContentKey explicitIV="OFj2IjCsPJFfMAxmQxLGPw==" kid="98ee5596-cd3e-a20d-163a-e382420c6eff" commonEncryptionScheme="cbcs">
			<cpix:Data>
				<pskc:Secret>
					<pskc:PlainValue>5dGAgwGuUYu4dHeHtNlxJw==</pskc:PlainValue>
				</pskc:Secret>
			</cpix:Data>
		</cpix:ContentKey>
	</cpix:ContentKeyList>
	...
</cpix:CPIX>
```

Standardmäßig sind Inhaltsschlüssel nicht verschlüsselt, wie im Beispiel unten. Die Verschlüsselung von Inhaltsschlüsseln kann jedoch vom Verschlüsseler mithilfe des Elements <cpix : >angefordert werden. DeliveryDataList Weitere Informationen finden Sie im Abschnitt Verschlüsselung von Inhaltsschlüsseln.


| Element, das von SPEKE unterstützt wird | Obligatorische Attribute | Optionale Attribute | Obligatorische untergeordnete Elemente | Optionale untergeordnete Elemente | 
| --- | --- | --- | --- | --- | 
|  <cpix:CPIX>  |  Inhalts-ID, Version, xmlns: cpix, xmlns: pskc  |  name, xmlns:enc  |  eins <cpix: ContentKeyList >, eins<cpix : List>, eins <cpix : >DRMSystemContentKeyUsageRuleList  |  ein <cpix: DeliveryDataList ContentKeyPeriodList >, eins <cpix : >  | 
|  <cpixContentKeyList: >  |  -  |  id  |  mindestens ein <cpix : >ContentKey  |  -  | 
|  <cpix : >ContentKey  |  Kind, Data commonEncryptionScheme  |  id, Algorithmus, explizitiv  |  eins <pskc:Secret>  |  -  | 
|  <pskc:Secret>  |  PlainValue oder EncryptedValue  |  Wert MAC  |  -  |  <enc: EncryptionMethod >, <enc : >CipherData  | 

**<cpix : Liste>Abschnitt DRMSystem**  
Dies ist ein obligatorischer Abschnitt, der sowohl für Live- als auch für VOD-Streaming relevant ist und in dem die verschiedenen DRM-Systeme definiert werden, die zusammen mit den Inhaltsschlüsseln genutzt werden müssen.

Das folgende Beispiel zeigt eine DRM-Systemliste mit einer einzigen PlayReady DRM-Systemspezifikation:

```
<cpix:DRMSystemList>
	<cpix:DRMSystem kid="98ee5596-cd3e-a20d-163a-e382420c6eff" systemId="9a04f079-9840-4286-ab92-e65be0885f95">
		<cpix:HLSSignalingData playlist="media">HicXmbZ2m[...]4==</cpix:HLSSignalingData>
		<cpix:HLSSignalingData playlist="master">HicXmbZ2m[...]jEi</cpix:HLSSignalingData>
		<cpix:ContentProtectionData>t7WwH24FI[...]YCC</cpix:ContentProtectionData>
		<cpix:PSSH>FFFFanBzc[...]A==</cpix:PSSH>
		<cpix:SmoothStreamingProtectionHeaderData>s5RrJ12HL[...]UBB</cpix:SmoothStreamingProtectionHeaderData>
	</cpix:DRMSystem>
</cpix:DRMSystemList>
```

Eine vollständige Liste der DRM-Systeme IDs finden Sie im [Abschnitt Content Protection](https://dashif.org/identifiers/content_protection/) des DASH-IF Identifiers-Repositorys.


| Element, das von SPEKE unterstützt wird | Obligatorische Attribute | Optionale Attribute | Obligatorische untergeordnete Elemente | Optionale untergeordnete Elemente | 
| --- | --- | --- | --- | --- | 
|  <cpix : Liste>DRMSystem  |  -  |  id  |  mindestens ein <cpix : >DRMSystem  |  -  | 
|  <cpix : >DRMSystem  |  Kind, SystemID  |  ID, Name, PSSH  |  -  |  ContentProtectionData, SmoothStreamingProtectionHeaderData, zwei <cpix: HLSSignaling Data>-Elemente mit unterschiedlichen Playlist-Attributwerten  | 

 `DRMSystem@PSSH`ist obligatorisch, wenn die ISO-BMFF-Kapselung auf Mediensegmente angewendet wird. `DRMSystem.ContentProtectionData`Das `<pssh>` InnerXML-Element wird vom Verschlüsseler nur für manifeste Signalzwecke genutzt.

Wenn vorhanden `DRMSystem@PSSH` ist und ein `<pssh>` InnerXML-Element `DRMSystem.ContentProtectionData` enthält, müssen beide Werte identisch sein.

Wenn die `DRMSystem` Signalisierung in HLS-Manifesten erfolgen soll, müssen sowohl a `<cpix:HLSSignalingData playlist="media">` - als auch `<cpix:HLSSignalingData playlist="master">` a-Elemente in der CPIX-Anfrage und -Antwort enthalten sein.

**<cpix : >Abschnitt ContentKeyPeriodList**  
Dies ist ein optionaler Abschnitt, der nur für Live-Streaming relevant ist und in dem die Krypto-Perioden definiert werden, die auf den Inhalt angewendet werden.

Das `<cpix:ContentKeyPeriodList>` Element kann ein oder mehrere `<cpix:ContentKeyPeriod>` untergeordnete Elemente enthalten, von denen jedes eine bestimmte Krypto-Periode in der Live-Timeline beschreibt. Die Verwendung UUIDs als Teil des Werts des ID-Attributs ist ein häufig verwendeter Ansatz.

```
<cpix:ContentKeyPeriodList>
	<cpix:ContentKeyPeriod id="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f" index="1" />
</cpix:ContentKeyPeriodList>
```


| Element, das von SPEKE unterstützt wird | Obligatorische Attribute | Optionale Attribute | Obligatorische untergeordnete Elemente | Optionale untergeordnete Elemente | 
| --- | --- | --- | --- | --- | 
|  <cpix : >ContentKeyPeriodList  |  -  |  id  |  mindestens ein <cpix : >ContentKeyPeriod  |  -  | 
|  <cpix : >ContentKeyPeriod  |  ID, Index  |  -  |  -  |  -  | 

Wenn Kryptoperioden verwendet werden, müssen die Verschlüsselungsschlüssel auch an eine der Kryptoperioden im CPIX-Dokument angehängt werden, wie im folgenden Abschnitt gezeigt.

**<cpix : >Abschnitt ContentKeyUsageRuleList**  
Dies ist ein obligatorischer Abschnitt, der sowohl für Live- als auch für VOD-Streaming relevant ist und definiert, wie die verschiedenen Inhaltsschlüssel Tracks innerhalb des Streamsets und während der Krypto-Perioden schützen.

Das <cpix: ContentKeyUsageRuleList > -Element kann ein oder mehrere untergeordnete <cpix: ContentKeyUsageRule > -Elemente enthalten, von denen jedes die Spuren beschreibt, auf die der Verschlüsseler einen bestimmten Inhaltsschlüssel angewendet hat, möglicherweise während einer bestimmten Kryptoperiode. In einem <cpix: AudioFilter > -Element muss mindestens ein <cpix : >- oder ein <cpix: VideoFilter > -Element vorhanden sein. ContentKeyUsageRule

Das folgende Beispiel zeigt eine einfache Liste mit nur einer Regel, die einen einzigen Inhaltsschlüssel auf alle Audio- und Videotracks während einer bestimmten Kryptoperiode anwendet.

```
<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>
```


| Element, das von SPEKE unterstützt wird | Obligatorische Attribute | Optionale Attribute | Obligatorische untergeordnete Elemente | Optionale untergeordnete Elemente | 
| --- | --- | --- | --- | --- | 
|  <cpix : >ContentKeyUsageRuleList  |  -  |  id  |  mindestens ein <cpix : >ContentKeyUsageRule  |  -  | 
|  <cpix : >ContentKeyUsageRule  |  Kind, intendedTrackType  |  -  |  mindestens ein <cpix: AudioFilter > oder ein <cpix : >(\$1) VideoFilter  |  <cpix : >KeyPeriodFilter  | 
|  <cpix : >KeyPeriodFilter  |  Perioden-ID  |  -  |  -  |  -  | 
|  <cpix : >AudioFilter  |  -  |  MinChannels, MaxChannels  |  -  |  -  | 
|  <cpix : >VideoFilter  |  -  |  MinPixels, MaxPixels, hdr, MinFPS, MaxFPS  |  -  |  -  | 

 *[(\$1) Eine ausführliche Erklärung zur Verwendung einzelner oder mehrerer Inhaltsschlüssel zum Schutz eines oder mehrerer Tracks in einem Streamset finden Sie in der Dokumentation zum Verschlüsselungsvertrag.](encryption-contract-v2.md) \$1* 

# SPEKE API v2 - Verschlüsselungsvertrag
<a name="encryption-contract-v2"></a>

Der Verschlüsselungsvertrag legt auf der Grundlage der Eigenschaften der Tracks fest, welche Inhaltsschlüssel welche Tracks innerhalb eines bestimmten Streamsets schützen.

Die Verwendung mehrerer Inhaltsschlüssel für verschiedene Titel in einem Streamset ist zwar eine in der Branche empfohlene bewährte Methode, ist aber nicht verpflichtend, wird aber empfohlen — mindestens zwei verschiedene Inhaltsschlüssel, einer für Audiotracks und einer für Videotracks. Die Verwendung eines einzigen Inhaltsschlüssels zur Verschlüsselung mehrerer Titel ist möglich, muss aber in dem vom Verschlüsseler an den Schlüsselanbieter gesendeten CPIX-Dokument explizit signalisiert werden. Im Allgemeinen beschreibt der Verschlüsseler immer genau, wie viele Inhaltsschlüssel benötigt werden und wie sie zur Verschlüsselung der verschiedenen Medientracks genutzt werden.

**Prinzipien**  
Der Verschlüsselungsvertrag befindet sich im `<cpix:ContentKeyUsageRuleList>` Abschnitt des CPIX-Dokuments. In diesem Abschnitt entspricht jeder in diesem `<cpix:ContentKeyList>` Abschnitt definierte Inhaltsschlüssel einem bestimmten `<cpix:ContentKeyUsageRule>` Element, das Folgendes beinhalten muss:
+ ein `ContentKeyUsageRule@intendedTrackType` Attribut, das auf eine oder mehrere Unterkomponenten verweisen kann, getrennt durch das Zeichen „\$1“, wenn mehrere Unterkomponenten verwendet werden. Der Wert von `ContentKeyUsageRule@intendedTrackType` muss in einem Verschlüsselungsvertrag einmalig sein und kann nicht in mehreren `ContentKeyUsageRule` Elementen verwendet werden.
+ ein oder mehrere `<cpix:AudioFilter>` oder `<cpix:VideoFilter>` untergeordnete Elemente, abhängig vom Wert des `ContentKeyUsageRule@intendedTrackType` Attributs.

Für diese Beziehung gelten die folgenden Regeln:
+ Wenn alle Audio- und Videotracks des Streamsets mit einem eindeutigen Inhaltsschlüssel geschützt werden müssen, `'ALL'` muss die Zeichenfolge als `ContentKeyUsageRule@intendedTrackType` Attributwert verwendet werden. Beispiel 1 zeigt einen solchen Anwendungsfall. In dieser Situation müssen `<cpix:AudioFilter />` sowohl ein als auch ein `<cpix:VideoFilter />` untergeordnetes Element ohne Attribut enthalten sein. Jede andere Kombination von `<cpix:AudioFilter>` and/or `<cpix:VideoFilter>` Elementen ist in diesem speziellen Kontext ungültig.
+ Für alle anderen Anwendungsfälle kann der Wert des `ContentKeyUsageRule@intendedTrackType` Attributs frei definiert werden, und die Anzahl der `<cpix:AudioFilter />` `<cpix:VideoFilter />` untergeordneten Elemente muss der Anzahl der Unterkomponenten entsprechen, die durch das Pluszeichen aggregiert werden. Die Beispiele 2/3/4/5/6/7/9/10 veranschaulichen diese Anforderung, wenn eine einzelne Unterkomponente im Attributwert vorhanden ist. `ContentKeyUsageRule@intendedTrackType` Beispiel 8 verdeutlicht die Verwendung mehrerer Unterkomponenten: `ContentKeyUsageRule@intendedTrackType="SD+HD"` wird durch zwei unterschiedliche `<cpix:VideoFilter>` untergeordnete Elemente mit unterschiedlichen Attributwerten beschrieben und `ContentKeyUsageRule@intendedTrackType="HDR+HFR+UHD"` wird durch drei unterschiedliche untergeordnete Elemente mit unterschiedlichen Attributwerten beschrieben. `<cpix:VideoFilter>`

**Filter**  
CPIX definiert mehrere Filterelemente und Attribute, aber SPEKE unterstützt nur eine Teilmenge davon. Die folgende Tabelle fasst diese Unterschiede zusammen:


| CPIX-Filtertyp | Allgemeine SPEKE-Unterstützung | Von SPEKE unterstützte Filterattribute | Filterattribute werden von SPEKE nicht unterstützt | 
| --- | --- | --- | --- | 
|  <cpix : >VideoFilter  |  Ja  |  minPixels, maxPixels, hdr, minFps, maxFPS (optionale Attribute)  |  wcg  | 
|  <cpix : >AudioFilter  |  Ja  |  minChannels, maxChannels (optionale Attribute)  |  | 
|  <cpix : >KeyPeriodFilter  |  Ja  |  PeriodID (obligatorisches Attribut)  |  | 
|  <cpix : >BitrateFilter  |  Nein  |  –  |  –  | 
|  <cpix : >LabelFilter  |  Nein  |  –  |  –  | 

Gemäß der CPIX-Spezifikation für ist [minPixels VideoFilter, maxPixels] ein All-Inclusive-Bereich in beiden Dimensionen, während (minFPS, maxFPS] nur für die maxFPS-Dimension inklusiv ist. Denn [minChannels AudioFilter, maxChannels] ist ein inklusiver Bereich in beiden Dimensionen.

**Problematische Situationen**  
Es gibt Situationen, in denen die im Verschlüsselungsvertrag enthaltenen Informationen unvollständig, mehrdeutig oder falsch sein können. In diesen Fällen ist es wichtig, dass sich der Verschlüsseler und der Schlüsselanbieter angemessen verhalten und einen angemessenen Schutz der Inhalte gewährleisten. Die folgende Tabelle zeigt das empfohlene Verhalten in diesen Situationen:


| In dieser Situation | Der Verschlüsseler... should/shall  | Der Schlüsselanbieter... should/shall  | 
| --- | --- | --- | 
|  Für einen oder mehrere Titel im Streamset gilt keine Regel (siehe Beispiel 3 unten)  |  Der Verschlüsseler sollte sich seine Konfiguration (außerhalb der CPIX-Payload) ansehen und sicherstellen, dass die betreffenden Tracks nicht verschlüsselt werden müssen. Wenn dies nicht den Erwartungen entspricht, sollte der Verschlüsseler einen Fehler ausgeben und die Verarbeitung beenden.  |   *Nicht relevant: Der Schlüsselanbieter hat keine Kenntnis von der Streamset-Struktur.*   | 
|  Mehrere Regeln überschneiden sich und schlagen mehrere Inhaltsschlüssel vor, um einen bestimmten Titel zu verschlüsseln  |  Der Verschlüsseler sollte den zuletzt ContentKeyUsageRule erfolgreich bewerteten Code in der Reihenfolge des Dokuments anwenden.  |   *Nicht relevant: Der Schlüsselanbieter hat keine Kenntnis von der Streamset-Struktur.*   | 
|  Der Verschlüsselungsvertrag ändert sich in einem einzigen SPEKE-Zyklus request/response   |  Der Verschlüsseler löst eine Ausnahme aus und stoppt die Verarbeitung, da der Schlüsselanbieter nicht für die Definition des Verschlüsselungsvertrags verantwortlich ist.  |  Um zu verhindern, dass diese Situation von vornherein eintritt, darf der Schlüsselanbieter einen Verschlüsselungsvertrag, der in der CPIX-Payload der SPEKE-Anfrage empfangen wurde, nicht ändern.  | 
|  Fehlerhafter Verschlüsselungsvertrag: Ausnahme mit intendedTrackType/Filters Kardinalitätseinschränkungen, nicht unterstützte Filter oder Attribute  |  Der Verschlüsseler muss eine Ausnahme auslösen, die Verarbeitung beenden und die SPEKE-Anfrage nicht an den Schlüsselanbieter senden, da dies höchstwahrscheinlich zu einem fehlerhaften Schutz der Inhalte führen oder einige Spuren ungeschützt lassen würde.  |  Der Schlüsselanbieter löst eine Ausnahme aus und gibt die Fehlermeldung „Fehlerhafter Verschlüsselungsvertrag“ zurück.  | 
|  Gut formulierter Verschlüsselungsvertrag, der jedoch gegen die DRM-Sicherheitsregeln verstößt: Beispielsweise wird ein einziger Inhaltsschlüssel angefordert, um sowohl Audiotracks als auch UHD-Videotracks zu schützen  |  Wenn der Verschlüsseler die Einschränkungen der DRM-Sicherheitsstufen kennt, sollte er eine Ausnahme auslösen, die Verarbeitung beenden und die SPEKE-Anfrage nicht an den Schlüsselanbieter senden, da dies höchstwahrscheinlich zum Schutz fehlerhafter Inhalte führen würde.  |  Der Schlüsselanbieter muss eine Ausnahme auslösen und den Fehler „Angeforderter CPIX-Verschlüsselungsvertrag wird nicht unterstützt“ zurückgeben.  | 
|  Fehlender Verschlüsselungsvertrag  |  Der Verschlüsseler darf keine CPIX-Dokumente versenden, die kein OE-Element enthalten. VideoFilter AudioFilter   |  Der Schlüsselanbieter löst eine Ausnahme aus und gibt die Fehlermeldung „Fehlender CPIX-Verschlüsselungsvertrag“ zurück.  | 

**Beispiele für Verschlüsselungsverträge**  
 *Beispiel 1: Ein Inhaltsschlüssel für alle Audio- und Videotracks* 

```
<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>
```

 *Beispiel 2: ein Inhaltsschlüssel für alle Videospuren, ein Inhaltsschlüssel für alle Audiospuren* 

```
<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>
```

 *Beispiel 3: ein Inhaltsschlüssel für alle Videospuren, unverschlüsselte Audiospuren* 

```
<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>
```

 *Beispiel 4: mehrere Inhaltsschlüssel für verschiedene Videospuren (SD/HD), ein Inhaltsschlüssel für alle Audiospuren* 

```
<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>
```

 *Beispiel 5: mehrere Inhaltsschlüssel für verschiedene Videospuren (SD/HD/UHD), ein Inhaltsschlüssel für alle Audiospuren* 

```
<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>
```

 *Beispiel 6: mehrere Inhaltsschlüssel für verschiedene Videospuren (SD/HD/UHD1/UHD2), ein Inhaltsschlüssel für alle Audiospuren* 

```
<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>
```

 *Beispiel 7: mehrere Inhaltsschlüssel für verschiedene Videospuren (SD/HD1/HD2/UHD1/UHD2), ein Inhaltsschlüssel für alle Audiospuren* 

```
<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>
```

 *Beispiel 8: mehrere Inhaltsschlüssel für verschiedene Videospuren (basierend auf mehreren Attributtypen), ein Inhaltsschlüssel für alle Audiospuren* 

```
<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>
```

 *Beispiel 9: eine Inhaltstaste für alle Videospuren, mehrere Inhaltstasten für Stereo- und Mehrkanal-Audiospuren* 

```
<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>
```

 *Beispiel 10: ein Inhaltstasten für alle Videospuren, mehrere Inhaltstasten für Stereo und zwei Arten von Mehrkanal-Audiospuren* 

```
<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>
```

# SPEKE API v2 — Beispiele für Live-Workflow-Methodenaufrufe
<a name="live-workflow-methods-v2"></a>

 *Beispiel für eine Anforderungssyntax* 

Die folgende URL ist lediglich ein Beispiel und gibt kein bestimmtes Format vor:

```
POST https://speke-compatible-server/speke/v2.0/copyProtection
```

 *Anforderungstext* 

Ein CPIX-Dokument.

 *Anforderungs-Header* 


| Name | Typ | Auftreten | Description | 
| --- | --- | --- | --- | 
|   `AWS Authorization`   |  Zeichenfolge  |  1..1  |  Weitere Informationen finden Sie unter [AWS Sigv4](https://docs.aws.amazon.com/general/latest/gr/sigv4_signing.html).   | 
|   `X-Amz-Security-Token`   |  Zeichenfolge  |  1..1  |  Weitere Informationen finden Sie unter [AWS Sigv4](https://docs.aws.amazon.com/general/latest/gr/sigv4_signing.html).   | 
|   `X-Amz-Date`   |  Zeichenfolge  |  1..1  |  Weitere Informationen finden Sie unter [AWS Sigv4](https://docs.aws.amazon.com/general/latest/gr/sigv4_signing.html).   | 
|   `Content-Type`   |  Zeichenfolge  |  1..1  |  application/xml  | 
|   `X-Speke-Version`   |  Zeichenfolge  |  1..1  |  SPEKE-API-Version, die mit der Anfrage verwendet wurde, formuliert als. MajorVersion MinorVersion, wie '2.0' für SPEKE v2.0  | 

 *Antwort-Header* 


| Name | Typ | Auftreten | Description | 
| --- | --- | --- | --- | 
|   `X-Speke-User-Agent`   |  Zeichenfolge  |  1..1  |  Zeichenfolge, die den Schlüsselanbieter identifiziert.  | 
|   `Content-Type`   |  Zeichenfolge  |  1..1  |  application/xml  | 
|   `X-Speke-Version`   |  Zeichenfolge  |  1..1  |  SPEKE-API-Version, die mit der Anfrage verwendet wurde, formuliert als. MajorVersion MinorVersion, wie '2.0' für SPEKE v2.0  | 

 *Request Response (Antwort anfordern)* 


| HTTP-CODE | Name der Nutzlast | Auftreten | Description | 
| --- | --- | --- | --- | 
|   `200 (Success)`   |  CPIX  |  1..1  |  DASH-CPIX-Nutzlastantwort  | 
|   `4XX (Client error)`   |  Client-Fehlermeldung  |  1..1  |  Beschreibung des Client-Fehlers.  | 
|   `5XX (Server error)`   |  Server-Fehlermeldung  |  1..1  |  Beschreibung des Server-Fehlers.  | 

**Anmerkung**  
Die Beispiele in diesem Abschnitt zeigen keine Inhaltsschlüssel-Verschlüsselung. Informationen zum Hinzufügen von Inhaltsschlüsselverschlüsselung finden Sie unter [Inhaltsschlüsselverschlüsselung](content-key-encryption-v2.md).

 *Beispiel für eine Live-Anforderungsnutzlast mit entschlüsselten Schlüsseln* 

Das folgende Beispiel zeigt eine typische Payload für Live-Anfragen vom Verschlüsseler an den DRM-Schlüsselanbieter mit einem Inhaltsschlüssel für alle Videospuren und einem Inhaltsschlüssel für alle Audiospuren:

```
<cpix:CPIX contentId="abc123" version="2.3" xmlns:cpix="urn:dashif:org:cpix" xmlns:pskc="urn:ietf:params:xml:ns:keyprov:pskc">
	<cpix:ContentKeyList>
		<cpix:ContentKey explicitIV="OFj2IjCsPJFfMAxmQxLGPw==" kid="98ee5596-cd3e-a20d-163a-e382420c6eff" commonEncryptionScheme="cbcs"></cpix:ContentKey>
		<cpix:ContentKey explicitIV="L6jzdXrXAFbCJGBuMrrKrG==" kid="53abdba2-f210-43cb-bc90-f18f9a890a02" commonEncryptionScheme="cbcs"></cpix:ContentKey>
	</cpix:ContentKeyList>
	<cpix:DRMSystemList>
		<!-- FairPlay -->
		<cpix:DRMSystem kid="98ee5596-cd3e-a20d-163a-e382420c6eff" systemId="94ce86fb-07ff-4f43-adb8-93d2fa968ca2">
			<cpix:HLSSignalingData playlist="media"></cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master"></cpix:HLSSignalingData>
		</cpix:DRMSystem>
		<cpix:DRMSystem kid="53abdba2-f210-43cb-bc90-f18f9a890a02" systemId="94ce86fb-07ff-4f43-adb8-93d2fa968ca2">
			<cpix:HLSSignalingData playlist="media"></cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master"></cpix:HLSSignalingData>
		</cpix:DRMSystem>
		<!-- Widevine -->
		<cpix:DRMSystem kid="98ee5596-cd3e-a20d-163a-e382420c6eff" systemId="edef8ba9-79d6-4ace-a3c8-27dcd51d21ed">
			<cpix:HLSSignalingData playlist="media"></cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master"></cpix:HLSSignalingData>
			<cpix:ContentProtectionData></cpix:ContentProtectionData>
			<cpix:PSSH></cpix:PSSH>
		</cpix:DRMSystem>
		<cpix:DRMSystem kid="53abdba2-f210-43cb-bc90-f18f9a890a02" systemId="edef8ba9-79d6-4ace-a3c8-27dcd51d21ed">
			<cpix:HLSSignalingData playlist="media"></cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master"></cpix:HLSSignalingData>
			<cpix:ContentProtectionData></cpix:ContentProtectionData>
			<cpix:PSSH></cpix:PSSH>
		</cpix:DRMSystem>
		<!-- Playready -->
		<cpix:DRMSystem kid="98ee5596-cd3e-a20d-163a-e382420c6eff" systemId="9a04f079-9840-4286-ab92-e65be0885f95">
			<cpix:HLSSignalingData playlist="media"></cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master"></cpix:HLSSignalingData>
			<cpix:ContentProtectionData></cpix:ContentProtectionData>
			<cpix:PSSH></cpix:PSSH>
			<cpix:SmoothStreamingProtectionHeaderData></cpix:SmoothStreamingProtectionHeaderData>
		</cpix:DRMSystem>
		<cpix:DRMSystem kid="53abdba2-f210-43cb-bc90-f18f9a890a02" systemId="9a04f079-9840-4286-ab92-e65be0885f95">
			<cpix:HLSSignalingData playlist="media"></cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master"></cpix:HLSSignalingData>
			<cpix:ContentProtectionData></cpix:ContentProtectionData>
			<cpix:PSSH></cpix:PSSH>
			<cpix:SmoothStreamingProtectionHeaderData></cpix:SmoothStreamingProtectionHeaderData>
		</cpix:DRMSystem>
	</cpix:DRMSystemList>
	<cpix:ContentKeyPeriodList>
		<cpix:ContentKeyPeriod id="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f" index="1" />
	</cpix:ContentKeyPeriodList>
	<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>
</cpix:CPIX>
```

 *Beispiel für eine Live-Antwortnutzlast mit entschlüsselten Schlüsseln* 

Das folgende Beispiel zeigt eine typische Antwortnutzlast des DRM-Schlüsselanbieters (die zurückgegebenen Werte wurden aus Gründen der Lesbarkeit mit [...] gekürzt):

```
<cpix:CPIX contentId="abc123" version="2.3" xmlns:cpix="urn:dashif:org:cpix" xmlns:pskc="urn:ietf:params:xml:ns:keyprov:pskc">
	<cpix:ContentKeyList>
		<cpix:ContentKey explicitIV="OFj2IjCsPJFfMAxmQxLGPw==" kid="98ee5596-cd3e-a20d-163a-e382420c6eff" commonEncryptionScheme="cbcs">
			<cpix:Data>
				<pskc:Secret>
					<pskc:PlainValue>5dGAgwGuUYu4dHeHtNlxJw==</pskc:PlainValue>
				</pskc:Secret>
			</cpix:Data>
		</cpix:ContentKey>
		<cpix:ContentKey explicitIV="L6jzdXrXAFbCJGBuMrrKrG==" kid="53abdba2-f210-43cb-bc90-f18f9a890a02" commonEncryptionScheme="cbcs">
			<cpix:Data>
				<pskc:Secret>
					<pskc:PlainValue>h3toSFIlyAYpfXVQ795m6x==</pskc:PlainValue>
				</pskc:Secret>
			</cpix:Data>
		</cpix:ContentKey>
	</cpix:ContentKeyList>
	<cpix:DRMSystemList>
		<!-- FairPlay -->
		<cpix:DRMSystem kid="98ee5596-cd3e-a20d-163a-e382420c6eff" systemId="94ce86fb-07ff-4f43-adb8-93d2fa968ca2">
			<cpix:HLSSignalingData playlist="media">aHR0cHM6L[...]WZm</cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master">Y29tLmFwc[...]XJ5</cpix:HLSSignalingData>
		</cpix:DRMSystem>
		<cpix:DRMSystem kid="53abdba2-f210-43cb-bc90-f18f9a890a02" systemId="94ce86fb-07ff-4f43-adb8-93d2fa968ca2">
			<cpix:HLSSignalingData playlist="media">trBAnbMcj[...]u44</cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master">mn626PjyR[...]2fi</cpix:HLSSignalingData>
		</cpix:DRMSystem>
		<!-- Widevine -->
		<cpix:DRMSystem kid="98ee5596-cd3e-a20d-163a-e382420c6eff" systemId="edef8ba9-79d6-4ace-a3c8-27dcd51d21ed">
			<cpix:HLSSignalingData playlist="media">Ifa2V5LWl[...]nNB</cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master">oIARIQeSI[...]Nd2l</cpix:HLSSignalingData>
			<cpix:ContentProtectionData>RoNd2lkZXZ[...]Nib</cpix:ContentProtectionData>
			<cpix:PSSH>AAAAanBzc[...]A==</cpix:PSSH>
		</cpix:DRMSystem>
		<cpix:DRMSystem kid="53abdba2-f210-43cb-bc90-f18f9a890a02" systemId="edef8ba9-79d6-4ace-a3c8-27dcd51d21ed">
			<cpix:HLSSignalingData playlist="media">lTznjvtzL[...]GfJ</cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master">XgzdzQH7p[...]zeX</cpix:HLSSignalingData>
			<cpix:ContentProtectionData>TdgRnuJsZ[...]wDw</cpix:ContentProtectionData>
			<cpix:PSSH>mYZbjpWdS[...]D==</cpix:PSSH>
		</cpix:DRMSystem>
		<!-- Playready -->
		<cpix:DRMSystem kid="98ee5596-cd3e-a20d-163a-e382420c6eff" systemId="9a04f079-9840-4286-ab92-e65be0885f95">
			<cpix:HLSSignalingData playlist="media">HicXmbZ2m[...]4==</cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master">GVzdCIfa2[...]Eta</cpix:HLSSignalingData>
			<cpix:ContentProtectionData>t7WwH24FI[...]YCC</cpix:ContentProtectionData>
			<cpix:PSSH>FFFFanBzc[...]A==</cpix:PSSH>
			<cpix:SmoothStreamingProtectionHeaderData>s5RrJ12HL[...]UBB</cpix:SmoothStreamingProtectionHeaderData>
		</cpix:DRMSystem>
		<cpix:DRMSystem kid="53abdba2-f210-43cb-bc90-f18f9a890a02" systemId="9a04f079-9840-4286-ab92-e65be0885f95">
			<cpix:HLSSignalingData playlist="media">BptGzwis2[...]Iej</cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master">3c9SXdVa0[...]MBH</cpix:HLSSignalingData>
			<cpix:ContentProtectionData>HotJCMQyc[...]GpU</cpix:ContentProtectionData>
			<cpix:PSSH>S6UD43ybN[...]f==</cpix:PSSH>
			<cpix:SmoothStreamingProtectionHeaderData>VBFUv2or0[...]JeP</cpix:SmoothStreamingProtectionHeaderData>
		</cpix:DRMSystem>
	</cpix:DRMSystemList>
	<cpix:ContentKeyPeriodList>
		<cpix:ContentKeyPeriod id="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f" index="1" />
	</cpix:ContentKeyPeriodList>
	<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>
</cpix:CPIX>
```

# SPEKE API v2 — Beispiele für VOD-Workflow-Methodenaufrufe
<a name="vod-workflow-method-v2"></a>

 *Beispiel für eine Anforderungssyntax* 

Die folgende URL ist lediglich ein Beispiel und gibt kein bestimmtes Format vor.

```
POST https://speke-compatible-server/speke/v2.0/copyProtection
```

 *Anforderungstext* 

Ein CPIX-Dokument.

 *Anforderungs-Header* 


| Name | Typ | Auftreten | Description | 
| --- | --- | --- | --- | 
|   `AWS Authorization`   |  Zeichenfolge  |  1..1  |  Weitere Informationen finden Sie unter [AWS Sigv4](https://docs.aws.amazon.com/general/latest/gr/sigv4_signing.html).   | 
|   `X-Amz-Security-Token`   |  Zeichenfolge  |  1..1  |  Weitere Informationen finden Sie unter [AWS Sigv4](https://docs.aws.amazon.com/general/latest/gr/sigv4_signing.html).   | 
|   `X-Amz-Date`   |  Zeichenfolge  |  1..1  |  Weitere Informationen finden Sie unter [AWS Sigv4](https://docs.aws.amazon.com/general/latest/gr/sigv4_signing.html).   | 
|   `Content-Type`   |  Zeichenfolge  |  1..1  |  application/xml  | 
|   `X-Speke-Version`   |  Zeichenfolge  |  1..1  |  SPEKE-API-Version, die mit der Anfrage verwendet wurde, formuliert als. MajorVersion MinorVersion, wie '2.0' für SPEKE v2.0  | 

 *Antwort-Header* 


| Name | Typ | Auftreten | Description | 
| --- | --- | --- | --- | 
|   `X-Speke-User-Agent`   |  Zeichenfolge  |  1..1  |  Zeichenfolge, die den Schlüsselanbieter identifiziert.  | 
|   `Content-Type`   |  Zeichenfolge  |  1..1  |  application/xml  | 
|   `X-Speke-Version`   |  Zeichenfolge  |  1..1  |  SPEKE-API-Version, die mit der Anfrage verwendet wurde, formuliert als. MajorVersion MinorVersion, wie '2.0' für SPEKE v2.0  | 

 *Request Response (Antwort anfordern)* 


| HTTP-CODE | Name der Nutzlast | Auftreten | Description | 
| --- | --- | --- | --- | 
|   `200 (Success)`   |  CPIX  |  1..1  |  DASH-CPIX-Nutzlastantwort  | 
|   `4XX (Client error)`   |  Client-Fehlermeldung  |  1..1  |  Beschreibung des Client-Fehlers.  | 
|   `5XX (Server error)`   |  Server-Fehlermeldung  |  1..1  |  Beschreibung des Server-Fehlers.  | 

**Anmerkung**  
Die Beispiele in diesem Abschnitt zeigen keine Inhaltsschlüssel-Verschlüsselung. Informationen zum Hinzufügen von Inhaltsschlüsselverschlüsselung finden Sie unter [Inhaltsschlüsselverschlüsselung](content-key-encryption-v2.md).

 *Beispiel für eine VOD-Anforderungsnutzlast mit entschlüsselten Schlüsseln* 

Das folgende Beispiel zeigt eine typische Payload für VOD-Anfragen vom Verschlüsseler an den DRM-Schlüsselanbieter mit einem Inhaltsschlüssel für alle Videospuren und einem Inhaltsschlüssel für alle Audiospuren:

```
<cpix:CPIX contentId="abc123" version="2.3" xmlns:cpix="urn:dashif:org:cpix" xmlns:pskc="urn:ietf:params:xml:ns:keyprov:pskc">
	<cpix:ContentKeyList>
		<cpix:ContentKey explicitIV="OFj2IjCsPJFfMAxmQxLGPw==" kid="98ee5596-cd3e-a20d-163a-e382420c6eff" commonEncryptionScheme="cbcs"></cpix:ContentKey>
		<cpix:ContentKey explicitIV="L6jzdXrXAFbCJGBuMrrKrG==" kid="53abdba2-f210-43cb-bc90-f18f9a890a02" commonEncryptionScheme="cbcs"></cpix:ContentKey>
	</cpix:ContentKeyList>
	<cpix:DRMSystemList>
		<!-- FairPlay -->
		<cpix:DRMSystem kid="98ee5596-cd3e-a20d-163a-e382420c6eff" systemId="94ce86fb-07ff-4f43-adb8-93d2fa968ca2">
			<cpix:HLSSignalingData playlist="media"></cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master"></cpix:HLSSignalingData>
		</cpix:DRMSystem>
		<cpix:DRMSystem kid="53abdba2-f210-43cb-bc90-f18f9a890a02" systemId="94ce86fb-07ff-4f43-adb8-93d2fa968ca2">
			<cpix:HLSSignalingData playlist="media"></cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master"></cpix:HLSSignalingData>
		</cpix:DRMSystem>
		<!-- Widevine -->
		<cpix:DRMSystem kid="98ee5596-cd3e-a20d-163a-e382420c6eff" systemId="edef8ba9-79d6-4ace-a3c8-27dcd51d21ed">
			<cpix:HLSSignalingData playlist="media"></cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master"></cpix:HLSSignalingData>
			<cpix:ContentProtectionData></cpix:ContentProtectionData>
			<cpix:PSSH></cpix:PSSH>
		</cpix:DRMSystem>
		<cpix:DRMSystem kid="53abdba2-f210-43cb-bc90-f18f9a890a02" systemId="edef8ba9-79d6-4ace-a3c8-27dcd51d21ed">
			<cpix:HLSSignalingData playlist="media"></cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master"></cpix:HLSSignalingData>
			<cpix:ContentProtectionData></cpix:ContentProtectionData>
			<cpix:PSSH></cpix:PSSH>
		</cpix:DRMSystem>
		<!-- Playready -->
		<cpix:DRMSystem kid="98ee5596-cd3e-a20d-163a-e382420c6eff" systemId="9a04f079-9840-4286-ab92-e65be0885f95">
			<cpix:HLSSignalingData playlist="media"></cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master"></cpix:HLSSignalingData>
			<cpix:ContentProtectionData></cpix:ContentProtectionData>
			<cpix:PSSH></cpix:PSSH>
			<cpix:SmoothStreamingProtectionHeaderData></cpix:SmoothStreamingProtectionHeaderData>
		</cpix:DRMSystem>
		<cpix:DRMSystem kid="53abdba2-f210-43cb-bc90-f18f9a890a02" systemId="9a04f079-9840-4286-ab92-e65be0885f95">
			<cpix:HLSSignalingData playlist="media"></cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master"></cpix:HLSSignalingData>
			<cpix:ContentProtectionData></cpix:ContentProtectionData>
			<cpix:PSSH></cpix:PSSH>
			<cpix:SmoothStreamingProtectionHeaderData></cpix:SmoothStreamingProtectionHeaderData>
		</cpix:DRMSystem>
	</cpix:DRMSystemList>
	<cpix:ContentKeyUsageRuleList>
		<cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="VIDEO">
			<cpix:VideoFilter />
		</cpix:ContentKeyUsageRule>
		<cpix:ContentKeyUsageRule kid="53abdba2-f210-43cb-bc90-f18f9a890a02" intendedTrackType="AUDIO">
			<cpix:AudioFilter />
		</cpix:ContentKeyUsageRule>
	</cpix:ContentKeyUsageRuleList>
</cpix:CPIX>
```

 *Beispiel für eine VOD-Antwortnutzlast mit entschlüsselten Schlüsseln* 

Das folgende Beispiel zeigt eine typische Antwort-Payload des DRM-Schlüsselanbieters (die zurückgegebenen Werte wurden aus Gründen der Lesbarkeit mit [...] gekürzt):

```
<cpix:CPIX contentId="abc123" version="2.3" xmlns:cpix="urn:dashif:org:cpix" xmlns:pskc="urn:ietf:params:xml:ns:keyprov:pskc">
	<cpix:ContentKeyList>
		<cpix:ContentKey explicitIV="OFj2IjCsPJFfMAxmQxLGPw==" kid="98ee5596-cd3e-a20d-163a-e382420c6eff" commonEncryptionScheme="cbcs">
			<cpix:Data>
				<pskc:Secret>
					<pskc:PlainValue>5dGAgwGuUYu4dHeHtNlxJw==</pskc:PlainValue>
				</pskc:Secret>
			</cpix:Data>
		</cpix:ContentKey>
		<cpix:ContentKey explicitIV="L6jzdXrXAFbCJGBuMrrKrG==" kid="53abdba2-f210-43cb-bc90-f18f9a890a02" commonEncryptionScheme="cbcs">
			<cpix:Data>
				<pskc:Secret>
					<pskc:PlainValue>h3toSFIlyAYpfXVQ795m6x==</pskc:PlainValue>
				</pskc:Secret>
			</cpix:Data>
		</cpix:ContentKey>
	</cpix:ContentKeyList>
	<cpix:DRMSystemList>
		<!-- FairPlay -->
		<cpix:DRMSystem kid="98ee5596-cd3e-a20d-163a-e382420c6eff" systemId="94ce86fb-07ff-4f43-adb8-93d2fa968ca2">
			<cpix:HLSSignalingData playlist="media">aHR0cHM6L[...]WZm</cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master">Y29tLmFwc[...]XJ5</cpix:HLSSignalingData>
		</cpix:DRMSystem>
		<cpix:DRMSystem kid="53abdba2-f210-43cb-bc90-f18f9a890a02" systemId="94ce86fb-07ff-4f43-adb8-93d2fa968ca2">
			<cpix:HLSSignalingData playlist="media">trBAnbMcj[...]u44</cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master">mn626PjyR[...]2fi</cpix:HLSSignalingData>
		</cpix:DRMSystem>
		<!-- Widevine -->
		<cpix:DRMSystem kid="98ee5596-cd3e-a20d-163a-e382420c6eff" systemId="edef8ba9-79d6-4ace-a3c8-27dcd51d21ed">
			<cpix:HLSSignalingData playlist="media">Ifa2V5LWl[...]nNB</cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master">oIARIQeSI[...]Nd2l</cpix:HLSSignalingData>
			<cpix:ContentProtectionData>RoNd2lkZXZ[...]Nib</cpix:ContentProtectionData>
			<cpix:PSSH>AAAAanBzc[...]A==</cpix:PSSH>
		</cpix:DRMSystem>
		<cpix:DRMSystem kid="53abdba2-f210-43cb-bc90-f18f9a890a02" systemId="edef8ba9-79d6-4ace-a3c8-27dcd51d21ed">
			<cpix:HLSSignalingData playlist="media">lTznjvtzL[...]GfJ</cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master">XgzdzQH7p[...]zeX</cpix:HLSSignalingData>
			<cpix:ContentProtectionData>TdgRnuJsZ[...]wDw</cpix:ContentProtectionData>
			<cpix:PSSH>mYZbjpWdS[...]D==</cpix:PSSH>
		</cpix:DRMSystem>
		<!-- Playready -->
		<cpix:DRMSystem kid="98ee5596-cd3e-a20d-163a-e382420c6eff" systemId="9a04f079-9840-4286-ab92-e65be0885f95">
			<cpix:HLSSignalingData playlist="media">HicXmbZ2m[...]4==</cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master">GVzdCIfa2[...]Eta</cpix:HLSSignalingData>
			<cpix:ContentProtectionData>t7WwH24FI[...]YCC</cpix:ContentProtectionData>
			<cpix:PSSH>FFFFanBzc[...]A==</cpix:PSSH>
			<cpix:SmoothStreamingProtectionHeaderData>s5RrJ12HL[...]UBB</cpix:SmoothStreamingProtectionHeaderData>
		</cpix:DRMSystem>
		<cpix:DRMSystem kid="53abdba2-f210-43cb-bc90-f18f9a890a02" systemId="9a04f079-9840-4286-ab92-e65be0885f95">
			<cpix:HLSSignalingData playlist="media">BptGzwis2[...]Iej</cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master">3c9SXdVa0[...]MBH</cpix:HLSSignalingData>
			<cpix:ContentProtectionData>HotJCMQyc[...]GpU</cpix:ContentProtectionData>
			<cpix:PSSH>S6UD43ybN[...]f==</cpix:PSSH>
			<cpix:SmoothStreamingProtectionHeaderData>VBFUv2or0[...]JeP</cpix:SmoothStreamingProtectionHeaderData>
		</cpix:DRMSystem>
	</cpix:DRMSystemList>
	<cpix:ContentKeyUsageRuleList>
		<cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="VIDEO">
			<cpix:VideoFilter />
		</cpix:ContentKeyUsageRule>
		<cpix:ContentKeyUsageRule kid="53abdba2-f210-43cb-bc90-f18f9a890a02" intendedTrackType="AUDIO">
			<cpix:AudioFilter />
		</cpix:ContentKeyUsageRule>
	</cpix:ContentKeyUsageRuleList>
</cpix:CPIX>
```

# SPEKE API v2 — Verschlüsselung von Inhaltsschlüsseln
<a name="content-key-encryption-v2"></a>

Sie können Ihrer SPEKE-Implementierung optional eine Inhaltsschlüsselverschlüsselung hinzufügen. Die Inhaltsschlüsselverschlüsselung garantiert vollständigen end-to-end Schutz, indem sie zusätzlich zur Verschlüsselung des Inhalts selbst auch die Inhaltsschlüssel für die Übertragung verschlüsselt. Wenn Sie dies nicht für Ihren Schlüsselanbieter implementieren, verlassen Sie sich aus Sicherheitsgründen auf die Verschlüsselung der Transportschicht sowie auf eine starke Authentifizierung.

Um die Inhaltsschlüsselverschlüsselung für Verschlüsseler zu verwenden, die in der AWS-Cloud ausgeführt werden, importieren Kunden Zertifikate in den AWS Certificate Manager und verwenden das resultierende Zertifikat dann ARNs für ihre Verschlüsselungsaktivitäten. Der Verschlüsseler verwendet das Zertifikat ARNs und den ACM-Service, um dem DRM-Schlüsselanbieter verschlüsselte Inhaltsschlüssel bereitzustellen.

**Einschränkungen**  
SPEKE unterstützt die Verschlüsselung von Inhaltsschlüsseln gemäß der DASH-IF CPIX-Spezifikation mit den folgenden Einschränkungen:
+ SPEKE unterstützt keine Überprüfung digitaler Signaturen (XMLDSIG) für Payloads von Anfragen oder Antworten.
+ SPEKE benötigt 2048 RSA-basierte Zertifikate.

Diese Einschränkungen sind auch unter [Anpassungen und Einschränkungen der DASH-IF-Spezifikation](speke-constraints-v2.md) aufgeführt.

**Implementieren der Inhaltsschlüssel-Verschlüsselung**  
Um Inhaltsschlüssel-Verschlüsselung bereitzustellen, führen Sie in den Implementierungen Ihres DRM-Schlüsselanbieters Folgendes aus:
+ Verarbeiten Sie das Element `<cpix:DeliveryDataList>` in den Anforderungs- und Antwortnutzlasten.
+ Stellen Sie in der `<cpix:ContentKeyList>` der Antwortnutzlasten verschlüsselte Werte bereit.

Weitere Informationen zu diesen Elementen finden Sie in der [DASH-IF](https://dashif.org/docs/CPIX2.3/Cpix.html) CPIX 2.3-Spezifikation.

 *Beispiel für das Inhaltsschlüssel-Verschlüsselungselement ` <cpix:DeliveryDataList> ` in der Anforderungsnutzlast* 

```
<cpix:CPIX contentId="abc123"
    version="2.3"
    xmlns:cpix="urn:dashif:org:cpix"
    xmlns:pskc="urn:ietf:params:xml:ns:keyprov:pskc">
    <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>
```

 *Beispiel für das Inhaltsschlüssel-Verschlüsselungselement ` <cpix:DeliveryDataList> ` in der Antwortnutzlast* 

```
<cpix:CPIX contentId="abc123"
    version="2.3"
    xmlns:cpix="urn:dashif:org:cpix"
    xmlns:pskc="urn:ietf:params:xml:ns:keyprov:pskc">
    <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>
```

 *Beispiel für das Inhaltsschlüssel-Verschlüsselungselement ` <cpix:ContentKeyList> ` in der Antwortnutzlast* 

Das folgende Beispiel zeigt die Behandlung des verschlüsselten Inhaltsschlüssels im `<cpix:ContentKeyList>`-Element der Antwortnutzlast. Hier wird das Element `<pskc:EncryptedValue>` verwendet:

```
<cpix:ContentKeyList>
     <cpix:ContentKey explicitIV="OFj2IjCsPJFfMAxmQxLGPw==" kid="98ee5596-cd3e-a20d-163a-e382420c6eff" commonEncryptionScheme="cbcs">
         <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>
```

Im Vergleich dazu zeigt das folgende Beispiel eine ähnliche Antwortnutzlast mit dem unverschlüsselten Inhaltsschlüssel als entschlüsselter Schlüssel. Hier wird das Element `<pskc:PlainValue>` verwendet:

```
<cpix:ContentKeyList>
    <cpix:ContentKey explicitIV="OFj2IjCsPJFfMAxmQxLGPw==" kid="98ee5596-cd3e-a20d-163a-e382420c6eff" commonEncryptionScheme="cbcs">
        <cpix:Data>
            <pskc:Secret>
                <pskc:PlainValue>5dGAgwGuUYu4dHeHtNlxJw==</pskc:PlainValue>
            </pskc:Secret>
        </cpix:Data>
    </cpix:ContentKey>
</cpix:ContentKeyList>
```

# SPEKE API v2 — Überschreiben der Schlüssel-ID
<a name="kid-override-v2"></a>

Der Verschlüsseler erstellt bei jeder Rotation der Schlüssel eine neue Schlüssel-ID (Key Identifier, KID). Er übergibt die KID an den DRM-Schlüsselanbieter bei dessen Anforderungen. Beinahe immer antwortet der Schlüsselanbieter mit derselben KID. Er kann jedoch in der Antwort auch einen anderen Wert für die KID bereitstellen.

Im Folgenden finden Sie eine Beispielanforderung mit der KID `11111111-1111-1111-1111-111111111111`:

```
<cpix:CPIX contentId="abc123" version="2.3" xmlns:cpix="urn:dashif:org:cpix" xmlns:pskc="urn:ietf:params:xml:ns:keyprov:pskc">
	<cpix:ContentKeyList>
		<cpix:ContentKey explicitIV="OFj2IjCsPJFfMAxmQxLGPw==" kid="11111111-1111-1111-1111-111111111111" commonEncryptionScheme="cbcs"></cpix:ContentKey>
	</cpix:ContentKeyList>
	<cpix:DRMSystemList>
		<!-- Widevine -->
		<cpix:DRMSystem kid="11111111-1111-1111-1111-111111111111" systemId="edef8ba9-79d6-4ace-a3c8-27dcd51d21ed">
			<cpix:HLSSignalingData playlist="media"></cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master"></cpix:HLSSignalingData>
			<cpix:ContentProtectionData></cpix:ContentProtectionData>
			<cpix:PSSH></cpix:PSSH>
		</cpix:DRMSystem>
	</cpix:DRMSystemList>
	<cpix:ContentKeyPeriodList>
		<cpix:ContentKeyPeriod id="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f" index="1" />
	</cpix:ContentKeyPeriodList>
	<cpix:ContentKeyUsageRuleList>
		<cpix:ContentKeyUsageRule kid="11111111-1111-1111-1111-111111111111" intendedTrackType="VIDEO">
			<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
			<cpix:VideoFilter />
		</cpix:ContentKeyUsageRule>
	</cpix:ContentKeyUsageRuleList>
</cpix:CPIX>
```

Die folgende Antwort überschreibt die KID zu `22222222-2222-2222-2222-222222222222`:

```
<cpix:CPIX contentId="abc123" version="2.3" xmlns:cpix="urn:dashif:org:cpix" xmlns:pskc="urn:ietf:params:xml:ns:keyprov:pskc">
	<cpix:ContentKeyList>
		<cpix:ContentKey explicitIV="OFj2IjCsPJFfMAxmQxLGPw==" kid="22222222-2222-2222-2222-222222222222" commonEncryptionScheme="cbcs">
			<cpix:Data>
				<pskc:Secret>
					<pskc:PlainValue>5dGAgwGuUYu4dHeHtNlxJw==</pskc:PlainValue>
				</pskc:Secret>
			</cpix:Data>
		</cpix:ContentKey>
	</cpix:ContentKeyList>
	<cpix:DRMSystemList>
		<!-- Widevine -->
		<cpix:DRMSystem kid="22222222-2222-2222-2222-222222222222" systemId="edef8ba9-79d6-4ace-a3c8-27dcd51d21ed">
			<cpix:HLSSignalingData playlist="media">Ifa2V5LWl[...]nNB</cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master">oIARIQeSI[...]Nd2l</cpix:HLSSignalingData>
			<cpix:ContentProtectionData>RoNd2lkZXZ[...]Nib</cpix:ContentProtectionData>
			<cpix:PSSH>AAAAanBzc[...]A==</cpix:PSSH>
		</cpix:DRMSystem>
	</cpix:DRMSystemList>
	<cpix:ContentKeyPeriodList>
		<cpix:ContentKeyPeriod id="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f" index="1" />
	</cpix:ContentKeyPeriodList>
	<cpix:ContentKeyUsageRuleList>
		<cpix:ContentKeyUsageRule kid="22222222-2222-2222-2222-222222222222" intendedTrackType="VIDEO">
			<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
			<cpix:VideoFilter />
		</cpix:ContentKeyUsageRule>
	</cpix:ContentKeyUsageRuleList>
</cpix:CPIX>
```