

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

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

Esta es la API REST para Secure Packager and Encoder Key Exchange (SPEKE) v1. Utilice esta especificación para ofrecer protección de derechos de autor DRM a los clientes que utilicen el cifrado. Para que sea compatible con SPEKE, su proveedor de claves DRM debe exponer la API de REST que se describe en esta especificación. El encriptador realiza llamadas a API al proveedor de claves.

**nota**  
Los ejemplos de código de esta especificación se proporcionan únicamente con fines ilustrativos. Los ejemplos no pueden ejecutarse porque no conforman una implementación de SPEKE completa.

SPEKE utiliza la definición de estructura de datos del DASH Industry Forum Content Protection Information Exchange Forum (DASH-IF-CPIX) para el intercambio de claves, con algunas restricciones. DASH-IF-CPIXdefine un esquema para proporcionar un intercambio extensible y multiDRM desde la plataforma DRM hasta el cifrador. Esto permite cifrar el contenido en todos los formatos de empaquetado con velocidades de bits adaptativas en el momento en que se comprime y empaqueta el contenido. Los formatos de empaquetamiento con velocidades de bits adaptativas son HLS, DASH y MSS.

Para obtener información detallada sobre el formato de intercambio, consulte la especificación CPIX del DASH Industry Forum en https://dashif. org/docs/DASH-IF-CPIX-v2-0.pdf.

**Topics**
+ [SPEKE API v1: personalizaciones y restricciones a la especificación de DASH-IF](speke-constraints.md)
+ [SPEKE API v1: componentes de carga estándar](standard-payload-components.md)
+ [SPEKE API v1: ejemplos de llamadas al método de flujo de trabajo en directo](live-workflow-methods.md)
+ [SPEKE API v1: ejemplos de llamadas de método de flujo de trabajo VOD](vod-workflow-methods.md)
+ [SPEKE API v1: cifrado de claves de contenido](content-key-encryption.md)
+ [API SPEKE v1: latido](heartbeat.md)
+ [API SPEKE v1: anulación del identificador clave](kid-override.md)

# SPEKE API v1: personalizaciones y restricciones a la especificación de DASH-IF
<a name="speke-constraints"></a>

La especificación CPIX de DASH-IF, https://dashif. org/docs/DASH-IF-CPIX-v2-0.pdf admite varios casos de uso y topologías. La especificación de API de SPEKE se ajusta a la especificación CPIX con las siguientes personalizaciones y restricciones:
+ SPEKE sigue el flujo de trabajo Encriptador-Consumidor.
+ En las claves de contenido cifradas, SPEKE aplica las siguientes restricciones:
  + SPEKE no admite la verificación de firma digital (XMLDSIG) para cargas de solicitud o respuesta.
  + SPEKE requiere 2048 certificados basados en RSA.
+ En los flujos de trabajo de rotación de claves, SPEKE requiere el filtro `ContentKeyUsageRule`, `KeyPeriodFilter`. SPEKE omite todos los demás ajustes `ContentKeyUsageRule`.
+ SPEKE omite la funcionalidad `UpdateHistoryItemList`. Si la lista está presente en la respuesta, SPEKE la omite.
+ SPEKE admite la rotación de claves. SPEKE utiliza únicamente el `ContentKeyPeriod@index para realizar un seguimiento del período clave.
+ Para admitir MSS PlayReady, SPEKE usa un parámetro personalizado debajo de la `DRMSystem` etiqueta,. `SPEKE:ProtectionHeader`
+ En el empaquetado HLS, si `URIExtXKey` está presente en la respuesta, debe contener todos los datos que se van a agregar en el parámetro de la etiqueta `EXT-X-KEY` del URI como una lista de reproducción de HLS, sin ningún otro requisito de señalización.
+ En la lista de reproducción de HLS, en la etiqueta `DRMSystem`, SPEKE proporciona los parámetros personalizados opcionales `speke:KeyFormat` y `speke:KeyFormatVersions` para los valores de los parámetros `KEYFORMAT` y `KEYFORMATVERSIONS` de la etiqueta `EXT-X-KEY`.

  El vector de inicialización (IV) de HLS siempre sigue el número de segmentos a menos que el operador lo especifique de forma explícita.
+ Al solicitar claves, el encriptador puede utilizar el atributo `@explicitIV` opcional en el elemento `ContentKey`. El proveedor de claves puede responder con un IV mediante `@explicitIV`, aunque el atributo no esté incluido en la solicitud.
+ El encriptador crea el identificador de la clave (`KID`), que es el mismo para cualquier ID de contenido y periodo de clave especificados. El proveedor de claves incluye el `KID` en la respuesta al documento de solicitud.
+ El proveedor de claves podría incluir un valor para el encabezado de respuesta de `Speke-User-Agent` a fin de que se identifique con fines de depuración.
+ Actualmente, SPEKE no admite varios seguimientos o claves por contenido.

  El encriptador compatible con SPEKE actúa como cliente y envía operaciones `POST` al punto de conexión del proveedor de claves. El encriptador podría enviar una solicitud `heartbeat` periódica para asegurarse de que la conexión entre el encriptador y el punto de conexión del proveedor de claves está en buen estado.

# SPEKE API v1: componentes de carga estándar
<a name="standard-payload-components"></a>

En cualquier solicitud de SPEKE, el encriptador puede solicitar respuestas de uno o varios sistemas DRM. El encriptador especifica los sistemas DRM en `<cpix:DRMSystemList>` de la carga de la solicitud. Cada especificación del sistema incluye la clave e indica el tipo de respuesta que se va a devolver.

En el siguiente ejemplo, se muestra una lista de sistemas DRM con una única especificación:

![\[RequestIntroSimple\]](http://docs.aws.amazon.com/es_es/speke/latest/documentation/images/RequestIntroSimple.png)


En la siguiente tabla, se muestran los componentes principales de cada `<cpix:DRMSystem>`.


| Identificador | Description (Descripción) | 
| --- | --- | 
|   `systemId` o `schemeId`   |  Identificador único del tipo de sistema DRM, tal como se registró con la organización de DASH IF. Para ver una lista, consulte Sistema [DASH-IF](https://dashif.org/identifiers/content_protection/). IDs  | 
|   `kid`   |  ID de la clave. Esta no es la clave real, sino un identificador que apunta a la clave de una tabla hash.  | 
|   `<cpix:UriExtXKey>`   |  Solicita una clave estándar no cifrada. El tipo de respuesta de clave debe ser esta o la respuesta `PSSH`.  | 
|   `<cpix:PSSH>`   |  Solicita un encabezado específico del sistema de protección (PSSH). Este tipo de encabezado contiene una referencia al `kid`, `systemID`, así como datos personalizados sobre el proveedor de DRM, como parte de Common Encryption (CENC). El tipo de respuesta de clave debe ser esta o la respuesta `UriExtXKey`.  | 

\$1Ejemplo de solicitudes de clave estándar y PSSH \$1

En el siguiente ejemplo se muestra parte de una solicitud de ejemplo procedente del encriptador y dirigida al proveedor de claves de DRM, con los componentes principales resaltados. La primera solicitud es para a una clave estándar, mientras que la segunda es para una respuesta PSSH:

![\[RequestIntro1\]](http://docs.aws.amazon.com/es_es/speke/latest/documentation/images/RequestIntro1.png)


\$1Ejemplo de respuestas de una clave estándar y PSSH \$1

En el ejemplo siguiente se muestra la respuesta correspondiente del proveedor de claves de DRM al encriptador:

![\[ResponseIntro1\]](http://docs.aws.amazon.com/es_es/speke/latest/documentation/images/ResponseIntro1.png)


# SPEKE API v1: ejemplos de llamadas al método de flujo de trabajo en directo
<a name="live-workflow-methods"></a>

 *Ejemplo de la sintaxis de la solicitud* 

La siguiente URL es un ejemplo y no indica un formato fijo:

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

 *Cuerpo de la solicitud* 

Un elemento CPIX.

 *Encabezados de la solicitud* 


| Name | Tipo | Se ejecuta | Description (Descripción) | 
| --- | --- | --- | --- | 
|   `AWS Authorization`   |  Cadena  |  1..1  |  Consulte [AWS Sigv4](https://docs.aws.amazon.com/general/latest/gr/sigv4_signing.html)   | 
|   `X-Amz-Security-Token`   |  Cadena  |  1..1  |  Consulte [AWS Sigv4](https://docs.aws.amazon.com/general/latest/gr/sigv4_signing.html)   | 
|   `X-Amz-Date`   |  Cadena  |  1..1  |  Consulte [AWS Sigv4](https://docs.aws.amazon.com/general/latest/gr/sigv4_signing.html)   | 
|   `Content-Type`   |  Cadena  |  1..1  |  application/xml  | 

 *Encabezados de la respuesta* 


| Name | Tipo | Se ejecuta | Description (Descripción) | 
| --- | --- | --- | --- | 
|   `Speke-User-Agent`   |  Cadena  |  1..1  |  Cadena que identifica al proveedor de claves  | 
|   `Content-Type`   |  Cadena  |  1..1  |  application/xml  | 

 *Respuesta a la solicitud* 


| CÓDIGO HTTP | Nombre de la carga | Se ejecuta | Description (Descripción) | 
| --- | --- | --- | --- | 
|   `200 (Success)`   |  CPIX  |  1..1  |  Respuesta de la carga de DASH-CPIX  | 
|   `4XX (Client error)`   |  Mensaje de error del cliente  |  1..1  |  Descripción del error del cliente  | 
|   `5XX (Server error)`   |  Mensaje de error del servidor  |  1..1  |  Descripción del error del servidor  | 

**nota**  
Los ejemplos que aparecen en esta sección no incluyen el cifrado de las claves de contenido. Para obtener información acerca de cómo agregar el cifrado de claves de contenido, consulte [Cifrado de claves de contenido](content-key-encryption.md).

 *Carga de solicitud de ejemplo en directo con claves sin cifrar* 

En el siguiente ejemplo se muestra una carga típica de solicitud en directo desde el encriptador al proveedor de claves DRM:

```
<cpix:CPIX id="abc123" xmlns:cpix="urn:dashif:org:cpix" xmlns:pskc="urn:ietf:params:xml:ns:keyprov:pskc" xmlns:speke="urn:aws:amazon:com:speke">
	<cpix:ContentKeyList>
		<cpix:ContentKey kid="98ee5596-cd3e-a20d-163a-e382420c6eff" explicitIV="OFj2IjCsPJFfMAxmQxLGPw=="></cpix:ContentKey>
	</cpix:ContentKeyList>
	<cpix:DRMSystemList>
		<!-- HLS AES-128 (systemId is implementation specific)-->
		<cpix:DRMSystem kid="98ee5596-cd3e-a20d-163a-e382420c6eff" systemId="81376844-f976-481e-a84e-cc25d39b0b33">
			<cpix:URIExtXKey></cpix:URIExtXKey>
			<speke:KeyFormat></speke:KeyFormat>
			<speke:KeyFormatVersions></speke:KeyFormatVersions>
		</cpix:DRMSystem>

		<!-- HLS SAMPLE-AES -->
		<cpix:DRMSystem kid="98ee5596-cd3e-a20d-163a-e382420c6eff" systemId="94ce86fb-07ff-4f43-adb8-93d2fa968ca2">
			<cpix:URIExtXKey></cpix:URIExtXKey>
			<speke:KeyFormat></speke:KeyFormat>
			<speke:KeyFormatVersions></speke:KeyFormatVersions>
		</cpix:DRMSystem>

		<!-- Common encryption (Widevine)-->
		<cpix:DRMSystem kid="98ee5596-cd3e-a20d-163a-e382420c6eff" systemId="edef8ba9-79d6-4ace-a3c8-27dcd51d21ed">
			<cpix:PSSH></cpix:PSSH>
		</cpix:DRMSystem>

		<!-- Common encryption / MSS (Playready) -->
		<cpix:DRMSystem kid="98ee5596-cd3e-a20d-163a-e382420c6eff" systemId="9a04f079-9840-4286-ab92-e65be0885f95">
			<speke:ProtectionHeader></speke:ProtectionHeader>
			<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="98ee5596-cd3e-a20d-163a-e382420c6eff">
			<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f" />
		</cpix:ContentKeyUsageRule>
	</cpix:ContentKeyUsageRuleList>
</cpix:CPIX>
```

 *Carga de respuesta de ejemplo en directo con claves sin cifrar* 

En el siguiente ejemplo se muestra una carga normal de una respuesta del proveedor de claves de DRM:

```
<cpix:CPIX xmlns:cpix="urn:dashif:org:cpix" xmlns:pskc="urn:ietf:params:xml:ns:keyprov:pskc" xmlns:speke="urn:aws:amazon:com:speke" id="abc123">
	<cpix:ContentKeyList>
		<cpix:ContentKey explicitIV="OFj2IjCsPJFfMAxmQxLGPw==" kid="98ee5596-cd3e-a20d-163a-e382420c6eff">
			<cpix:Data>
				<pskc:Secret>
					<pskc:PlainValue>5dGAgwGuUYu4dHeHtNlxJw==</pskc:PlainValue>
				</pskc:Secret>
			</cpix:Data>
		</cpix:ContentKey>
	</cpix:ContentKeyList>
	<cpix:DRMSystemList>
		<!-- HLS AES-128 (systemId is implementation specific) -->
		<cpix:DRMSystem kid="98ee5596-cd3e-a20d-163a-e382420c6eff" systemId="81376844-f976-481e-a84e-cc25d39b0b33">
			<cpix:URIExtXKey>aHR0cHM6Ly83azR5dHV4cTVkLmV4ZWN1dGUtYXBpLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tL0VrZVN0YWdlL2NsaWVudC9hYmMxMjMvOThlZTU1OTYtY2QzZS1hMjBkLTE2M2EtZTM4MjQyMGM2ZWZm</cpix:URIExtXKey>
			<speke:KeyFormat>aWRlbnRpdHk=</speke:KeyFormat>
			<speke:KeyFormatVersions>MQ==</speke:KeyFormatVersions>
		</cpix:DRMSystem>

		<!-- HLS SAMPLE-AES -->
		<cpix:DRMSystem kid="98ee5596-cd3e-a20d-163a-e382420c6eff" systemId="94ce86fb-07ff-4f43-adb8-93d2fa968ca2">
			<cpix:URIExtXKey>aHR0cHM6Ly83azR5dHV4cTVkLmV4ZWN1dGUtYXBpLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tL0VrZVN0YWdlL2NsaWVudC9hYmMxMjMvOThlZTU1OTYtY2QzZS1hMjBkLTE2M2EtZTM4MjQyMGM2ZWZm</cpix:URIExtXKey>
			<speke:KeyFormat>Y29tLmFwcGxlLnN0cmVhbWluZ2tleWRlbGl2ZXJ5</speke:KeyFormat>
			<speke:KeyFormatVersions>MQ==</speke:KeyFormatVersions>
		</cpix:DRMSystem>

		<!-- Common encryption (Widevine) -->
		<cpix:DRMSystem kid="98ee5596-cd3e-a20d-163a-e382420c6eff" systemId="edef8ba9-79d6-4ace-a3c8-27dcd51d21ed">
			<cpix:PSSH>AAAAanBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAEoIARIQeSIcblaNbb7Dji6sAtKZzRoNd2lkZXZpbmVfdGVzdCIfa2V5LWlkOmVTSWNibGFOYmI3RGppNnNBdEtaelE9PSoCU0QyAA==</cpix:PSSH>
		</cpix:DRMSystem>

		<!-- Common encryption / MSS (Playready) -->
		<cpix:DRMSystem kid="98ee5596-cd3e-a20d-163a-e382420c6eff" systemId="9a04f079-9840-4286-ab92-e65be0885f95">
			<speke:ProtectionHeader>CgMAAAEAAQAAAzwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4ATwBXAGoAaAB0AHIAMwB1ADkAawArAHIAZABvADEASQBMAFkAMAByAGEAdwA9AD0APAAvAEsASQBEAD4APABDAEgARQBDAEsAUwBVAE0APgBCADMAQQA2AEEAMwB4AG0AdABkAEkAPQA8AC8AQwBIAEUAQwBLAFMAVQBNAD4APABMAEEAXwBVAFIATAA+AGgAdAB0AHAAOgAvAC8AcABsAGEAeQByAGUAYQBkAHkALgBkAGkAcgBlAGMAdAB0AGEAcABzAC4AbgBlAHQALwBwAHIALwBzAHYAYwAvAHIAaQBnAGgAdABzAG0AYQBuAGEAZwBlAHIALgBhAHMAbQB4AD8AUABsAGEAeQBSAGkAZwBoAHQAPQAxACYAYQBtAHAAOwBhAG0AcAA7AGEAbQBwADsAVQBzAGUAUwBpAG0AcABsAGUATgBvAG4AUABlAHIAcwBpAHMAdABlAG4AdABMAGkAYwBlAG4AcwBlAD0AMQA8AC8ATABBAF8AVQBSAEwAPgA8AC8ARABBAFQAQQA+ADwALwBXAFIATQBIAEUAQQBEAEUAUgA+AA==</speke:ProtectionHeader>
			<cpix:PSSH>AAADMHBzc2gAAAAAmgTweZhAQoarkuZb4IhflQAAAxAQAwAAAQABAAYDPABXAFIATQBIAEUAQQBEAEUAUgAgAHgAbQBsAG4AcwA9ACIAaAB0AHQAcAA6AC8ALwBzAGMAaABlAG0AYQBzAC4AbQBpAGMAcgBvAHMAbwBmAHQALgBjAG8AbQAvAEQAUgBNAC8AMgAwADAANwAvADAAMwAvAFAAbABhAHkAUgBlAGEAZAB5AEgAZQBhAGQAZQByACIAIAB2AGUAcgBzAGkAbwBuAD0AIgA0AC4AMAAuADAALgAwACIAPgA8AEQAQQBUAEEAPgA8AFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBFAFkATABFAE4APgAxADYAPAAvAEsARQBZAEwARQBOAD4APABBAEwARwBJAEQAPgBBAEUAUwBDAFQAUgA8AC8AQQBMAEcASQBEAD4APAAvAFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBJAEQAPgBiAGgAdwBpAGUAWQAxAFcAdgBtADMARABqAGkANgBzAEEAdABLAFoAegBRAD0APQA8AC8ASwBJAEQAPgA8AEMASABFAEMASwBTAFUATQA+AGEAVABtAFAASgBWAEMAVgBaADYAcwA9ADwALwBDAEgARQBDAEsAUwBVAE0APgA8AEwAQQBfAFUAUgBMAD4AaAB0AHQAcABzADoALwAvAHAAcgBsAHMALgBhAHQAdgAtAHAAcwAuAGEAbQBhAHoAbwBuAC4AYwBvAG0ALwBjAGQAcAA8AC8ATABBAF8AVQBSAEwAPgA8AEMAVQBTAFQATwBNAEEAVABUAFIASQBCAFUAVABFAFMAPgA8AEkASQBTAF8ARABSAE0AXwBWAEUAUgBTAEkATwBOAD4ANwAuADEALgAxADQAMwA5AC4AMAA8AC8ASQBJAFMAXwBEAFIATQBfAFYARQBSAFMASQBPAE4APgA8AC8AQwBVAFMAVABPAE0AQQBUAFQAUgBJAEIAVQBUAEUAUwA+ADwALwBEAEEAVABBAD4APAAvAFcAUgBNAEgARQBBAEQARQBSAD4A</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="98ee5596-cd3e-a20d-163a-e382420c6eff">
			<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f" />
		</cpix:ContentKeyUsageRule>
	</cpix:ContentKeyUsageRuleList>
</cpix:CPIX>
```

# SPEKE API v1: ejemplos de llamadas de método de flujo de trabajo VOD
<a name="vod-workflow-methods"></a>

 *Ejemplo de la sintaxis de la solicitud* 

La siguiente URL es un ejemplo y no indica un formato fijo.

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

 *Cuerpo de la solicitud* 

Un elemento CPIX.

 *Encabezados de la respuesta* 


| Name | Tipo | Se ejecuta | Description (Descripción) | 
| --- | --- | --- | --- | 
|   `Speke-User-Agent`   |  Cadena  |  1..1  |  Cadena que identifica al proveedor de claves  | 
|   `Content-Type`   |  Cadena  |  1..1  |  application/xml  | 

 *Respuesta a la solicitud* 


| CÓDIGO HTTP | Nombre de la carga | Se ejecuta | Description (Descripción) | 
| --- | --- | --- | --- | 
|   `200 (Success)`   |  CPIX  |  1..1  |  Respuesta de la carga de DASH-CPIX  | 
|   `4XX (Client error)`   |  Mensaje de error del cliente  |  1..1  |  Descripción del error del cliente  | 
|   `5XX (Server error)`   |  Mensaje de error del servidor  |  1..1  |  Descripción del error del servidor  | 

**nota**  
Los ejemplos que aparecen en esta sección no incluyen el cifrado de las claves de contenido. Para obtener información acerca de cómo agregar el cifrado de claves de contenido, consulte [Cifrado de claves de contenido](content-key-encryption.md).

 *Carga de solicitud de ejemplo de VOD con claves sin cifrar* 

En el siguiente ejemplo se muestra una carga de solicitud VOD básica del encriptador al proveedor de claves DRM:

```
<cpix:CPIX id="abc123" xmlns:cpix="urn:dashif:org:cpix" xmlns:pskc="urn:ietf:params:xml:ns:keyprov:pskc" xmlns:speke="urn:aws:amazon:com:speke">
	<cpix:ContentKeyList>
		<cpix:ContentKey kid="98ee5596-cd3e-a20d-163a-e382420c6eff" explicitIV="OFj2IjCsPJFfMAxmQxLGPw=="></cpix:ContentKey>
	</cpix:ContentKeyList>
	<cpix:DRMSystemList>
		<!-- HLS AES-128 (systemId is implementation specific)-->
		<cpix:DRMSystem kid="98ee5596-cd3e-a20d-163a-e382420c6eff" systemId="81376844-f976-481e-a84e-cc25d39b0b33">
			<cpix:URIExtXKey></cpix:URIExtXKey>
			<speke:KeyFormat></speke:KeyFormat>
			<speke:KeyFormatVersions></speke:KeyFormatVersions>
		</cpix:DRMSystem>

		<!-- HLS SAMPLE-AES -->
		<cpix:DRMSystem kid="98ee5596-cd3e-a20d-163a-e382420c6eff" systemId="94ce86fb-07ff-4f43-adb8-93d2fa968ca2">
			<cpix:URIExtXKey></cpix:URIExtXKey>
			<speke:KeyFormat></speke:KeyFormat>
			<speke:KeyFormatVersions></speke:KeyFormatVersions>
		</cpix:DRMSystem>

		<!-- Common encryption (Widevine)-->
		<cpix:DRMSystem kid="98ee5596-cd3e-a20d-163a-e382420c6eff" systemId="edef8ba9-79d6-4ace-a3c8-27dcd51d21ed">
			<cpix:PSSH></cpix:PSSH>
		</cpix:DRMSystem>

		<!-- Common encryption / MSS (Playready) -->
		<cpix:DRMSystem kid="98ee5596-cd3e-a20d-163a-e382420c6eff" systemId="9a04f079-9840-4286-ab92-e65be0885f95">
			<speke:ProtectionHeader></speke:ProtectionHeader>
			<cpix:PSSH></cpix:PSSH>
		</cpix:DRMSystem>
	</cpix:DRMSystemList>
    </cpix:CPIX>
```

 *Carga de respuesta de ejemplo de VOD con claves sin cifrar* 

En el ejemplo siguiente se muestra una carga de respuesta de VOD básica procedente del proveedor de claves de DRM:

```
<cpix:CPIX xmlns:cpix="urn:dashif:org:cpix" xmlns:pskc="urn:ietf:params:xml:ns:keyprov:pskc" xmlns:speke="urn:aws:amazon:com:speke" id="abc123">
	<cpix:ContentKeyList>
		<cpix:ContentKey explicitIV="OFj2IjCsPJFfMAxmQxLGPw==" kid="98ee5596-cd3e-a20d-163a-e382420c6eff">
			<cpix:Data>
				<pskc:Secret>
					<pskc:PlainValue>5dGAgwGuUYu4dHeHtNlxJw==</pskc:PlainValue>
				</pskc:Secret>
			</cpix:Data>
		</cpix:ContentKey>
	</cpix:ContentKeyList>
	<cpix:DRMSystemList>
		<!-- HLS AES-128 (systemId is implementation specific) -->
		<cpix:DRMSystem kid="98ee5596-cd3e-a20d-163a-e382420c6eff" systemId="81376844-f976-481e-a84e-cc25d39b0b33">
			<cpix:URIExtXKey>aHR0cHM6Ly83azR5dHV4cTVkLmV4ZWN1dGUtYXBpLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tL0VrZVN0YWdlL2NsaWVudC9hYmMxMjMvOThlZTU1OTYtY2QzZS1hMjBkLTE2M2EtZTM4MjQyMGM2ZWZm</cpix:URIExtXKey>
			<speke:KeyFormat>aWRlbnRpdHk=</speke:KeyFormat>
			<speke:KeyFormatVersions>MQ==</speke:KeyFormatVersions>
		</cpix:DRMSystem>

		<!-- HLS SAMPLE-AES -->
		<cpix:DRMSystem kid="98ee5596-cd3e-a20d-163a-e382420c6eff" systemId="94ce86fb-07ff-4f43-adb8-93d2fa968ca2">
			<cpix:URIExtXKey>aHR0cHM6Ly83azR5dHV4cTVkLmV4ZWN1dGUtYXBpLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tL0VrZVN0YWdlL2NsaWVudC9hYmMxMjMvOThlZTU1OTYtY2QzZS1hMjBkLTE2M2EtZTM4MjQyMGM2ZWZm</cpix:URIExtXKey>
			<speke:KeyFormat>Y29tLmFwcGxlLnN0cmVhbWluZ2tleWRlbGl2ZXJ5</speke:KeyFormat>
			<speke:KeyFormatVersions>MQ==</speke:KeyFormatVersions>
		</cpix:DRMSystem>

		<!-- Common encryption (Widevine) -->
		<cpix:DRMSystem kid="98ee5596-cd3e-a20d-163a-e382420c6eff" systemId="edef8ba9-79d6-4ace-a3c8-27dcd51d21ed">
			<cpix:PSSH>AAAAanBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAEoIARIQeSIcblaNbb7Dji6sAtKZzRoNd2lkZXZpbmVfdGVzdCIfa2V5LWlkOmVTSWNibGFOYmI3RGppNnNBdEtaelE9PSoCU0QyAA==</cpix:PSSH>
		</cpix:DRMSystem>

		<!-- Common encryption / MSS (Playready) -->
		<cpix:DRMSystem kid="98ee5596-cd3e-a20d-163a-e382420c6eff" systemId="9a04f079-9840-4286-ab92-e65be0885f95">
			<speke:ProtectionHeader>CgMAAAEAAQAAAzwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4ATwBXAGoAaAB0AHIAMwB1ADkAawArAHIAZABvADEASQBMAFkAMAByAGEAdwA9AD0APAAvAEsASQBEAD4APABDAEgARQBDAEsAUwBVAE0APgBCADMAQQA2AEEAMwB4AG0AdABkAEkAPQA8AC8AQwBIAEUAQwBLAFMAVQBNAD4APABMAEEAXwBVAFIATAA+AGgAdAB0AHAAOgAvAC8AcABsAGEAeQByAGUAYQBkAHkALgBkAGkAcgBlAGMAdAB0AGEAcABzAC4AbgBlAHQALwBwAHIALwBzAHYAYwAvAHIAaQBnAGgAdABzAG0AYQBuAGEAZwBlAHIALgBhAHMAbQB4AD8AUABsAGEAeQBSAGkAZwBoAHQAPQAxACYAYQBtAHAAOwBhAG0AcAA7AGEAbQBwADsAVQBzAGUAUwBpAG0AcABsAGUATgBvAG4AUABlAHIAcwBpAHMAdABlAG4AdABMAGkAYwBlAG4AcwBlAD0AMQA8AC8ATABBAF8AVQBSAEwAPgA8AC8ARABBAFQAQQA+ADwALwBXAFIATQBIAEUAQQBEAEUAUgA+AA==</speke:ProtectionHeader>
			<cpix:PSSH>AAADMHBzc2gAAAAAmgTweZhAQoarkuZb4IhflQAAAxAQAwAAAQABAAYDPABXAFIATQBIAEUAQQBEAEUAUgAgAHgAbQBsAG4AcwA9ACIAaAB0AHQAcAA6AC8ALwBzAGMAaABlAG0AYQBzAC4AbQBpAGMAcgBvAHMAbwBmAHQALgBjAG8AbQAvAEQAUgBNAC8AMgAwADAANwAvADAAMwAvAFAAbABhAHkAUgBlAGEAZAB5AEgAZQBhAGQAZQByACIAIAB2AGUAcgBzAGkAbwBuAD0AIgA0AC4AMAAuADAALgAwACIAPgA8AEQAQQBUAEEAPgA8AFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBFAFkATABFAE4APgAxADYAPAAvAEsARQBZAEwARQBOAD4APABBAEwARwBJAEQAPgBBAEUAUwBDAFQAUgA8AC8AQQBMAEcASQBEAD4APAAvAFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBJAEQAPgBiAGgAdwBpAGUAWQAxAFcAdgBtADMARABqAGkANgBzAEEAdABLAFoAegBRAD0APQA8AC8ASwBJAEQAPgA8AEMASABFAEMASwBTAFUATQA+AGEAVABtAFAASgBWAEMAVgBaADYAcwA9ADwALwBDAEgARQBDAEsAUwBVAE0APgA8AEwAQQBfAFUAUgBMAD4AaAB0AHQAcABzADoALwAvAHAAcgBsAHMALgBhAHQAdgAtAHAAcwAuAGEAbQBhAHoAbwBuAC4AYwBvAG0ALwBjAGQAcAA8AC8ATABBAF8AVQBSAEwAPgA8AEMAVQBTAFQATwBNAEEAVABUAFIASQBCAFUAVABFAFMAPgA8AEkASQBTAF8ARABSAE0AXwBWAEUAUgBTAEkATwBOAD4ANwAuADEALgAxADQAMwA5AC4AMAA8AC8ASQBJAFMAXwBEAFIATQBfAFYARQBSAFMASQBPAE4APgA8AC8AQwBVAFMAVABPAE0AQQBUAFQAUgBJAEIAVQBUAEUAUwA+ADwALwBEAEEAVABBAD4APAAvAFcAUgBNAEgARQBBAEQARQBSAD4A</cpix:PSSH>
		</cpix:DRMSystem>
	</cpix:DRMSystemList>
</cpix:CPIX>
```

# SPEKE API v1: cifrado de claves de contenido
<a name="content-key-encryption"></a>

Si lo desea, puede añadir el cifrado de claves de contenido en la implementación de SPEKE. El cifrado de claves de contenido garantiza una end-to-end protección total al cifrar las claves de contenido para el tránsito, además de cifrar el contenido en sí. Si no implementa esta funcionalidad para su proveedor de claves, debe utilizar el cifrado de capa de transporte junto con un sólido mecanismo de autenticación para garantizar la seguridad.

Para utilizar el cifrado de claves de contenido para los cifradores que se ejecutan en la nube de AWS, los clientes importan los certificados al AWS Certificate Manager y, a continuación, utilizan el certificado resultante ARNs para sus actividades de cifrado. El cifrador utiliza el certificado ARNs y el servicio ACM para proporcionar claves de contenido cifrado al proveedor de claves DRM.

**Restricciones**  
SPEKE admite el cifrado de claves de contenido tal y como se establece en la especificación DASH-IF CPIX con las siguientes restricciones:
+ SPEKE no admite la verificación de firma digital (XMLDSIG) para cargas de solicitud o respuesta.
+ SPEKE requiere 2048 certificados basados en RSA.

Estas restricciones también se enumeran en [Personalizaciones y restricciones a la especificación DASH-IF](speke-constraints.md).

**Implementación del cifrado de claves de contenido**  
Para proporcionar el cifrado de claves de contenido, haga lo siguiente en las implementaciones del proveedor de claves de DRM:
+ Administre el elemento `<cpix:DeliveryDataList>` en las cargas de las solicitudes y las respuestas.
+ Proporcione valores cifrados en el elemento `<cpix:ContentKeyList>` de las cargas de respuesta.

Para obtener más información sobre estos elementos, consulte la [especificación DASH-IF CPIX 2.0](https://dashif.org/docs/DASH-IF-CPIX-v2-0.pdf).

 *Ejemplo del elemento ` <cpix:DeliveryDataList> ` de cifrado de claves de contenido en la carga de una solicitud* 

En el siguiente ejemplo se resalta el elemento `<cpix:DeliveryDataList>` en negrita:

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

 *Ejemplo del elemento ` <cpix:DeliveryDataList> ` de cifrado de claves de contenido en la carga de una respuesta* 

En el siguiente ejemplo se resalta el elemento `<cpix:DeliveryDataList>` en negrita:

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

 *Ejemplo del elemento ` <cpix:ContentKeyList> ` de cifrado de claves de contenido en la carga de una respuesta* 

En el ejemplo siguiente se muestra la gestión de las claves de contenido cifradas en el elemento `<cpix:ContentKeyList>` de la carga de respuesta. Aquí se utiliza el elemento `<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>
```

En comparación, el siguiente ejemplo muestra una carga de respuesta similar con la clave de contenido entregada sin cifrar, como una clave sin cifrar. Aquí se utiliza el elemento `<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>
```

# API SPEKE v1: latido
<a name="heartbeat"></a>

 *Ejemplo de la sintaxis de la solicitud* 

La siguiente URL es un ejemplo y no indica un formato fijo:

```
GET https://speke-compatible-server/speke/v1.0/heartbeat
```

 *Respuesta a la solicitud* 


| CÓDIGO HTTP | Nombre de la carga | Se ejecuta | Description (Descripción) | 
| --- | --- | --- | --- | 
|   `200 (Success)`   |  statusMessage  |  1..1  |  Mensaje que describe el estado.  | 

# API SPEKE v1: anulación del identificador clave
<a name="kid-override"></a>

El encriptador crea un nuevo identificador de clave (KID) cada vez que se modifican las claves. A continuación, pasa el KID al servidor de claves de DRM en las solicitudes. Casi siempre, el servidor de claves responde utilizando el mismo KID, aunque puede proporcionar un valor de KID diferente en la respuesta.

A continuación, se muestra un ejemplo de una solicitud con el KID `11111111-1111-1111-1111-111111111111`:

```
    <cpix:CPIX id="abc123" xmlns:cpix="urn:dashif:org:cpix" xmlns:pskc="urn:ietf:params:xml:ns:keyprov:pskc" xmlns:speke="urn:aws:amazon:com:speke">
      <cpix:ContentKeyList>
       <cpix:ContentKey kid="11111111-1111-1111-1111-111111111111"></cpix:ContentKey>
      </cpix:ContentKeyList>
      <cpix:DRMSystemList>
       <!-- Common encryption (Widevine)-->
       <cpix:DRMSystem kid="11111111-1111-1111-1111-111111111111" systemId="edef8ba9-79d6-4ace-a3c8-27dcd51d21ed">
        <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">
        <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f" />
       </cpix:ContentKeyUsageRule>
      </cpix:ContentKeyUsageRuleList>
     </cpix:CPIX>
```

La siguiente respuesta invalida el KID por `22222222-2222-2222-2222-222222222222`:

```
     <cpix:CPIX xmlns:cpix="urn:dashif:org:cpix" xmlns:pskc="urn:ietf:params:xml:ns:keyprov:pskc" xmlns:speke="urn:aws:amazon:com:speke" id="abc123">
      <cpix:ContentKeyList>
       <cpix:ContentKey explicitIV="ASgwx9pQ2/2lnDzJsUxWcQ==" kid="22222222-2222-2222-2222-222222222222">
        <cpix:Data>
         <pskc:Secret>
          <pskc:PlainValue>p3dWaHARtL97MpT7TE916w==</pskc:PlainValue>
         </pskc:Secret>
        </cpix:Data>
       </cpix:ContentKey>
      </cpix:ContentKeyList>
      <cpix:DRMSystemList>
       <cpix:DRMSystem kid="22222222-2222-2222-2222-222222222222" systemId="edef8ba9-79d6-4ace-a3c8-27dcd51d21ed">
        <cpix:PSSH>AAAAanBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAEoIARIQeSIcblaNbb7Dji6sAtKZzRoNd2lkZXZpbmVfdGVzdCIfa2V5LWlkOmVTSWNibGFOYmI3RGppNnNBdEtaelE9PSoCU0QyAA==</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">
        <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f" />
       </cpix:ContentKeyUsageRule>
      </cpix:ContentKeyUsageRuleList>
     </cpix:CPIX>
```