Especificación del encabezado PlayReady

1. Introducción

Esta especificación se aplica a cualquier producto final creado con el SDK de PlayReady Server, playReady Device Porting Kit, Windows, Xbox, Windows Phone y Silverlight.

1.1. Historial de cambios

Versión Change
8 de septiembre de 2021 Agregue el atributo opcional LICENSEREQUESTED al nodo PROTECTINFO.
1 de noviembre de 2017 Agregue la sección Requisitos de sintaxis. Corrección de varios ejemplos con un orden de atributo incorrecto (los atributos deben estar en orden alfabético)
12 de julio de 2017 Agregue la sección Encabezado de PlayReady 4.3.0.0, compatible con la versión 4 de PlayReady.
Se ha agregado el requisito de sintaxis de que todos los nodos XML deben cerrarse explícitamente mediante una etiqueta de cierre.
10 de abril de 2015 Se ha agregado la sección Encabezado playReady 4.2.0.0, compatible a partir de la versión 3 de PlayReady
Septiembre de 2011 Agregue la sección Encabezado de PlayReady 4.1.0.0, compatible a partir de la versión 2 de PlayReady.
Agosto de 2008 Versión inicial que documenta el encabezado de PlayReady 4.0.0.0 compatible con La versión 1 de PlayReady

2. Objeto PlayReady (PRO)

El objeto PlayReady (PRO) contiene los campos siguientes.

Nombre del campo Tipo de campo Tamaño (bits) Descripción
Length DWORD 32 Longitud del objeto PlayReady en bytes. Este valor no debe superar los 15 kilobytes (KB).
Recuento de registros de objetos PlayReady WORD 16 Especifica el número de registros de objeto PlayReady en el objeto PlayReady.
Registros de objetos PlayReady Matriz BYTE Varía Contiene un número variable de registros que contienen información relacionada con las licencias y la adquisición de licencias.

2.1 Registros de objetos PlayReady

El objeto PlayReady consta de subobjetos adicionales denominados Registros de objetos PlayReady. Los registros de objetos PlayReady contienen los campos siguientes.

Nombre del campo Tipo de campo Tamaño (bits) Descripción
Tipo de registro WORD 16 Especifica el tipo de datos almacenados en el valor de registro.
Longitud del registro WORD 16 Especifica el tamaño en bytes del valor de registro.
Valor de registro Matriz BYTE Varía El contenido del objeto depende del valor de Tipo de registro.

El campo Tipo de registro tiene uno de los valores siguientes.

Tipo de valor Descripción
0x0001 Indica que el registro contiene un encabezado playReady (PRH).
0x0002 Reservado.
0x0003 Indica un almacén de licencias incrustado (ELS).

2.2. Ejemplos de objetos PlayReady

En la ilustración siguiente se muestra un archivo MP4 segmentado con un objeto PlayReady que contiene un encabezado PlayReady:

PlayReady Object in MP4

En la ilustración siguiente se muestra la vista HEX de este archivo MP4:

PlayReady Object Hex Dump

3. Encabezado PlayReady (PRH)

Un cliente usa el encabezado PlayReady (PRH) para buscar o adquirir una licencia para el fragmento de contenido en el que se almacena. Se codifica mediante UTF-16.

Matriz de compatibilidad de versiones 3.1

  Encabezado de PlayReady v4.3.0.0 Encabezado playReady v4.2.0.0 Encabezado de PlayReady v4.1.0.0 Encabezado playReady v4.0.0.0
Clientes
basados en sdk de PlayReady 4.0 (consulte la nota 1)
Clientes
basados en sdk de PlayReady 3.0 (consulte la nota 2)
 
Clientes
basados en sdk de PlayReady 2.x (consulte la nota 3)
   
Clientes
basados en sdk de PlayReady 1.x (consulte la nota 4)
     

Notas:

  1. Xbox One versión 1709 o superior son clientes de PlayReady 4.X.
  2. Windows 10 (todas las versiones) y Xbox One versión 1703 o inferior son los clientes de PlayReady 3.X. Los dispositivos no Windows más recientes (por ejemplo, televisores inteligentes) publicados después de 2017 son los clientes de PlayReady 3.X.
  3. Silverlight y Windows 8, 8.1 son clientes de PlayReady 2.X. La mayoría de los dispositivos que no son Windows (por ejemplo, televisores inteligentes) publicados entre 2011 y 2017 son clientes de PlayReady 2.X.
  4. La mayoría de los dispositivos que no son Windows (por ejemplo, televisores inteligentes) publicados entre 2008 y 2011 son clientes de PlayReady 1.X.

3.2. Requisitos de sintaxis

3.2.1. Canónico

El XML debe ser canónico.

3.2.2. Todos los nombres de nodo y atributos distinguen mayúsculas de minúsculas

Compatible

<KID VALUE="PV1LM/VEVk+kEOB8qqcWDg=="> </KID>

No compatible

<KID value="PV1LM/VEVk+kEOB8qqcWDg=="> </KID>
<kid VALUE="PV1LM/VEVk+kEOB8qqcWDg=="> </kid>

3.2.3. Las etiquetas de cierre deben ser explícitas

Todos los nodos XML deben cerrarse explícitamente mediante una etiqueta de cierre, incluidas las de los nodos dentro del nodo CUSTOMATTRIBUTES.

Compatible

<KID VALUE="PV1LM/VEVk+kEOB8qqcWDg=="> </KID>
<CUSTOMATTRIBUTES> <MyNode FooAttribute="Foo"> </MyNode> </CUSTOMATTRIBUTES>

No compatible

<KID VALUE="PV1LM/VEVk+kEOB8qqcWDg=="> <CUSTOMATTRIBUTES> <MyNode FooAttribute="Foo"> </CUSTOMATTRIBUTES>

3.2.4. Atributos de espacio de nombres

Todos los atributos de espacio de nombres deben aparecer antes de los atributos que no son de espacios de nombres.

Compatible

<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.3.0.0">

No compatible

<WRMHEADER version="4.3.0.0" xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader>

3.2.5. Orden alfabético

Todos los atributos deben estar en orden alfabético, incluidos los de los nodos dentro del nodo CUSTOMATTRIBUTES.

Compatible

<KID ALGID="AESCBC" VALUE="PV1LM/VEVk+kEOB8qqcWDg=="> </KID>
<CUSTOMATTRIBUTES> <MyNode BarAttribute="Bar" FooAttribute="Foo"> </MyNode> </CUSTOMATTRIBUTES>

No compatible

<KID VALUE="PV1LM/VEVk+kEOB8qqcWDg==" ALGID="AESCBC"> </KID>
<CUSTOMATTRIBUTES> <MyNode FooAttribute="Foo" BarAttribute="Bar"> </MyNode> </CUSTOMATTRIBUTES>

3.3. v4.3.0.0

PlayReady Header v4.3.0.0 se introdujo con PlayReady versión 4.0 en septiembre de 2017 para admitir claves AESCBC en un encabezado. Esta compatibilidad permite el cifrado de contenido en modo CBC, en particular para los modos de cifrado común 'cbcs'. También aumenta la interoperabilidad de los clientes de PlayReady con otros sistemas DRM, así como el contenido existente.

3.3.1. Diferencias con otras versiones

A partir de la versión 4.0, los SDK de PlayReady y los clientes pueden procesar las versiones 4.0, 4.1, 4.2 y 4.3 de PlayReady Header. Los SDK de PlayReady anteriores a la versión 4.0 devolverán un error de "versión no admitida" cuando se proporcionen encabezados v4.3.

El formato de encabezado playReady v.4.3.0.0 tiene los siguientes cambios en comparación con v4.2.0.0:

  • El atributo de versión del elemento WRMHEADER se establece en la cadena "4.3.0.0".
  • Es posible que falte el atributo ALGID ubicado dentro del elemento KID en una solicitud de adquisición de licencias. Microsoft recomienda que el atributo ALGID tenga un valor válido en el encabezado incluido en el contenido.
  • Cuando el atributo ALGID está presente en cualquier elemento KID y hay más de un elemento KID en el elemento KIDS , todos los elementos KID deben incluir el atributo ALGID y los valores de atributo deben ser los mismos.
  • El atributo ALGID ubicado dentro del elemento KID ahora puede tener el valor "AESCBC", además de "AESCTR", siempre que:
    • Cuando el atributo ALGID se establece en "AESCBC", no se debe incluir el atributo CHECKSUM .

3.3.2. Ejemplos

A continuación se muestra un ejemplo de un encabezado de PlayReady 4.3.0.0 con claves AESCBC:

<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.3.0.0">
  <DATA>
    <PROTECTINFO>
      <KIDS>
        <KID ALGID="AESCBC" VALUE="PV1LM/VEVk+kEOB8qqcWDg=="></KID>
        <KID ALGID="AESCBC" VALUE="tuhDoKUN7EyxDPtMRNmhyA=="></KID>
      </KIDS>
    </PROTECTINFO>
    <LA_URL>http://rm.contoso.com/rightsmanager.asmx</LA_URL>
    <DS_ID>AH+03juKbUGbHl1V/QIwRA==</DS_ID>
  </DATA>
</WRMHEADER>

A continuación se muestra un ejemplo de un encabezado de PlayReady 4.3.0.0 con un ALGID que falta:

<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.3.0.0">
  <DATA>
    <PROTECTINFO>
      <KIDS>
        <KID VALUE="PV1LM/VEVk+kEOB8qqcWDg=="></KID>
      </KIDS>
    </PROTECTINFO>
    <LA_URL>http://rm.contoso.com/rightsmanager.asmx</LA_URL>
    <DS_ID>AH+03juKbUGbHl1V/QIwRA==</DS_ID>
    <DECRYPTORSETUP>ONDEMAND</DECRYPTORSETUP>
  </DATA>
</WRMHEADER>

3.3.3. Formato

El encabezado de PlayReady v4.3.0.0 tiene la siguiente sintaxis:

<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.3.0.0">
  <DATA>
      <PROTECTINFO LICENSEREQUESTED="true">
        <KIDS>
          <KID ALGID="value" CHECKSUM="base64-encoded value" VALUE="base64-encoded guid"></KID>
          <KID ALGID="value" CHECKSUM="base64-encoded value" VALUE="base64-encoded guid"></KID>
          <KID ALGID="value" CHECKSUM="base64-encoded value" VALUE="base64-encoded guid"></KID>
        </KIDS>
      </PROTECTINFO>
      <LA_URL> URL for license acquisition </LA_URL>
      <LUI_URL>
        URL for Non-silent license acquisition web page
      </LUI_URL>
    <DS_ID> base64-encoded guid </DS_ID>
    <CUSTOMATTRIBUTES xmlns="">
      <mm:Publisher xmlns:mm="urn:schema-musicmogul-com">
           <mm:Author>
                Elvis Presley
           </mm:Author>
           <mm:CreationDate>
                2007/08/21:12:00:00
           </mm:CreationDate>
        </mm:Publisher>
    </CUSTOMATTRIBUTES>
    <DECRYPTORSETUP>ONDEMAND</DECRYPTORSETUP>
  </DATA>
</WRMHEADER>

Las etiquetas se describen a continuación.

Nombre de etiqueta Requerido Descripción
WRMHEADER Elemento más externo del objeto de encabezado. Puede contener un elemento DATA y debe contener un atributo de versión. La versión del encabezado es "4.3.0.0". Cada vez que Microsoft define nuevas etiquetas o atributos obligatorios, se asocia un nuevo número de versión con esas etiquetas o atributos. Si la versión es mayor que aquella para la que se escribió el código de cliente, el código de cliente debe producir un error, ya que implica que el encabezado contiene etiquetas obligatorias que el cliente no entiende. Si la versión es menor o igual que para la que se escribió el código de cliente, el código de cliente puede omitir de forma segura cualquier etiqueta o atributo que no comprenda.
DATA No Elemento contenedor para los datos de encabezado, incluidas las etiquetas de terceros. No se puede incluir más de un elemento DATA en el elemento WRMHEADER .
PROTECTINFO No Especifica cero o un elemento KIDS . No se puede incluir más de un elemento PROTECTINFO en el elemento DATA . Opcionalmente, incluye el atributo LICENSEREQUESTED.
LICENSEREQUESTED No Especifica si la adquisición de licencias solicita al menos una licencia o no. Debe establecerse en "true" o "false" si está presente y se supone que se establece en "true" si no está presente. Las versiones de PlayReady omiten este atributo antes de la versión 4.5. La aplicación playReady Server SDK es libre de omitir este atributo; es solo informativo.
NIÑOS No Especifica uno o varios elementos KID que se pueden usar para crear objetos de descifrador para el contenido asociado. Uno o cero elementos KIDS pueden existir en el nodo PROTECTINFO .
NIÑO No Contiene todos los datos clave de una licencia determinada. Si el nodo KIDS está presente, uno o varios elementos KID deben existir en el nodo KIDS . El elemento KID contiene los siguientes atributos.

ALGID: opcional. Especifica el algoritmo de cifrado. Puede establecerse en: "AESCTR", "AESCBC" o "COCKTAIL".

CHECKSUM: opcional. Solo para las claves AESCTR. Contiene una suma de comprobación calculada mediante el atributo KID VALUE y la clave de contenido. Consulte la sección Algoritmo de suma de comprobación de claves de este documento para obtener más información.

Si este nodo existe en el XML WRMHeader, su valor de datos debe estar vacío.

VALOR: obligatorio. Contiene un valor GUID de identificador de clave codificado en base64. Tenga en cuenta que este valor GUID (DWORD, WORD, WORD, matriz de 8 BYTES) debe ser un orden de bytes poco endian.
LA_URL No Contiene la dirección URL del servicio web de adquisición de licencias. Solo se permiten direcciones URL absolutas. No se puede incluir más de un elemento LA_URL en el elemento DATA .

Si este nodo existe en el XML WRMHeader, su valor de datos no debe estar vacío.
LUI_URL No Contiene la dirección URL de una página web de adquisición de licencias no silenciosa. Solo se permiten direcciones URL absolutas. No se puede incluir más de un elemento LUI_URL en el elemento DATA .

Si este nodo existe en el XML WRMHeader, su valor de datos no debe estar vacío.
DS_ID No Id. de servicio del servicio de dominio. Solo se puede incluir hasta un elemento DS_ID en el elemento DATA .

Si este nodo existe en el XML WRMHeader, su valor de datos no debe estar vacío.
CUSTOMATTRIBUTES No El autor del contenido puede agregar XML personalizado dentro de este elemento. El código de Microsoft no actúa sobre los datos contenidos dentro de este elemento. No se puede incluir más de un elemento CUSTOMATTRIBUTES en el elemento DATA .

Si este nodo existe en el XML WRMHeader, su valor de datos no debe estar vacío.
DECRYPTORSETUP No Esta etiqueta solo puede contener el valor "ONDEMAND". Cuando esta etiqueta está presente en el nodo DATA y su valor se establece en "ONDEMAND", entonces indica a una aplicación que no debe esperar que la cadena de licencias completa para el contenido esté disponible para la adquisición, o ya presente en el equipo cliente, antes de configurar el grafo multimedia. Si no se establece esta etiqueta, indica que una aplicación puede exigir que se adquiera la licencia o que ya esté presente en el equipo cliente, antes de configurar el grafo multimedia. No se puede incluir más de un elemento DECRYPTORSETUP en el elemento DATA .

3.4. v4.2.0.0

PlayReady Header v4.2.0.0 se introdujo con PlayReady versión 3.0 en abril de 2015 para permitir varios KID en un solo encabezado. Esto significa que se pueden usar varias claves para cifrar un único recurso, por ejemplo, cuando las pistas de audio deben cifrarse con una clave diferente a las pistas de vídeo.

3.4.1. Diferencias con otras versiones

Los SDK de PlayReady 3.0 y versiones posteriores de los clientes pueden procesar las versiones v4.0, v4.1 y v4.2 del encabezado PlayReady. Los SDK de PlayReady anteriores devuelven un error de "versión no admitida" cuando se proporciona con encabezados v4.2. Cuando se usa el encabezado v4.2, el cliente tiene que saber qué versión del servidor usa a través de un mecanismo personalizado específico de la aplicación. Los SDK de PlayReady no proporcionan ninguna manera nativa de obtener esta información de versión.

El formato de encabezado de PlayReady v.4.2.0.0 tiene los siguientes cambios en comparación con v4.1.0.0:

  • El atributo de versión del elemento WRMHEADER se establece en la cadena "4.2.0.0".
  • El elemento KID ubicado dentro del elemento PROTECTINFO se ha cambiado de nombre a KIDS y sigue siendo opcional.
  • Varios elementos KID se encuentran dentro del elemento KIDS .

3.4.2. Ejemplo

Encabezado playReady 4.2.0.0 con dos teclas AESCTR:

<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.2.0.0">
  <DATA>
    <PROTECTINFO>
      <KIDS>
        <KID ALGID="AESCTR" CHECKSUM="xNvWVxoWk04=" VALUE="0IbHou/5s0yzM80yOkKEpQ=="></KID>
        <KID ALGID="AESCTR" CHECKSUM="GnKaQIRacPU=" VALUE="/qgG2xbs4k2SKCxx6bhWqw=="></KID>
      </KIDS>
    </PROTECTINFO>
    <LA_URL>http://rm.contoso.com/rightsmanager.asmx</LA_URL>
    <DS_ID>AH+03juKbUGbHl1V/QIwRA==</DS_ID>
  </DATA>
</WRMHEADER>

3.4.3. Formato

El encabezado de PlayReady v4.2.0.0 tiene la siguiente sintaxis:

<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.2.0.0">
  <DATA>
      <PROTECTINFO>
        <KIDS>
          <KID ALGID="AESCTR" CHECKSUM="base64-encoded value" VALUE="base64-encoded guid"></KID>
          <KID ALGID="AESCTR" CHECKSUM="base64-encoded value" VALUE="base64-encoded guid"></KID>
          <KID ALGID="AESCTR" CHECKSUM="base64-encoded value" VALUE="base64-encoded guid"></KID>
        </KIDS>
      </PROTECTINFO>
      <LA_URL> URL for license acquisition </LA_URL>
      <LUI_URL>
        URL for Non-silent license acquisition web page
      </LUI_URL>
    <DS_ID> base64-encoded guid </DS_ID>
    <CUSTOMATTRIBUTES xmlns="">
      <mm:Publisher xmlns:mm="urn:schema-musicmogul-com">
           <mm:Author>
                Elvis Presley
           </mm:Author>
           <mm:CreationDate>
                2007/08/21:12:00:00
           </mm:CreationDate>
        </mm:Publisher>
    </CUSTOMATTRIBUTES>
    <DECRYPTORSETUP>ONDEMAND</DECRYPTORSETUP>
  </DATA>
</WRMHEADER>

Las etiquetas se describen a continuación.

Nombre de etiqueta Requerido Descripción
WRMHEADER Elemento más externo del objeto de encabezado. Puede contener un elemento DATA y debe contener un atributo de versión. La versión del encabezado es "4.2.0.0". Cada vez que Microsoft define nuevas etiquetas o atributos obligatorios, se asocia un nuevo número de versión con esas etiquetas o atributos. Si la versión es mayor que aquella para la que se escribió el código de cliente, el código de cliente debe producir un error, ya que implica que el encabezado contiene etiquetas obligatorias que el cliente no entiende. Si la versión es menor o igual que para la que se escribió el código de cliente, el código de cliente puede omitir de forma segura cualquier etiqueta o atributo que no comprenda.
DATA No Elemento contenedor para los datos de encabezado, incluidas las etiquetas de terceros. Solo se puede incluir hasta un elemento DATA en el elemento WRMHEADER .
PROTECTINFO No Especifica cero o un elemento KIDS . No se puede incluir más de un elemento PROTECTINFO en el elemento DATA .
NIÑOS No Especifica uno o varios elementos KID que se pueden usar para crear objetos de descifrador para el contenido asociado. Uno o cero elementos KIDS pueden existir en el nodo PROTECTINFO .
NIÑO No Contiene todos los datos clave de una licencia determinada. Si el nodo KIDS está presente, uno o varios elementos KID deben existir en el nodo KIDS . El elemento KID contiene los siguientes atributos.

ALGID: obligatorio. Especifica el algoritmo de cifrado. Debe establecerse en: AESCTR o COCKTAIL

CHECKSUM: Opcional. Contiene una suma de comprobación calculada mediante kid VALUE y la clave de contenido. Consulte la sección Algoritmo de suma de comprobación de claves de este documento para obtener más información.

Si este nodo existe en el XML WRMHeader, su valor de datos debe estar vacío.

VALOR: obligatorio. Contiene un valor GUID de identificador de clave codificado en base64. Tenga en cuenta que este valor GUID (DWORD, WORD, WORD, matriz de 8 BYTES) debe ser un orden de bytes poco endian.
LA_URL No Contiene la dirección URL del servicio web de adquisición de licencias. Solo se permiten direcciones URL absolutas. No se puede incluir más de un elemento LA_URL en el elemento DATA .

Si este nodo existe en el XML WRMHeader, su valor de datos no debe estar vacío.
LUI_URL No Contiene la dirección URL de una página web de adquisición de licencias no silenciosa. Solo se permiten direcciones URL absolutas. No se puede incluir más de un elemento LUI_URL en el elemento DATA .

Si este nodo existe en el XML WRMHeader, su valor de datos no debe estar vacío.
DS_ID No Id. de servicio del servicio de dominio. No se puede incluir más de un elemento DS_ID en el elemento DATA .

Si este nodo existe en el XML WRMHeader, su valor de datos no debe estar vacío.
CUSTOMATTRIBUTES No El autor del contenido puede agregar XML arbitrario dentro de este elemento. El código de Microsoft no actúa sobre los datos contenidos dentro de este elemento. No se puede incluir más de un elemento CUSTOMATTRIBUTES en el elemento DATA .

Si este nodo existe en el XML WRMHeader, su valor de datos no debe estar vacío.
DECRYPTORSETUP No Esta etiqueta solo puede contener el valor "ONDEMAND". Cuando esta etiqueta está presente en el nodo DATA y su valor se establece en "ONDEMAND", entonces indica a una aplicación que no debe esperar que la cadena de licencias completa para el contenido esté disponible para la adquisición, o ya presente en el equipo cliente, antes de configurar el grafo multimedia. Si no se establece esta etiqueta, indica que una aplicación puede exigir que se adquiera la licencia o que ya esté presente en el equipo cliente, antes de configurar el grafo multimedia. No se puede incluir más de un elemento DECRYPTORSETUP en el elemento DATA .

3.5. v4.1.0.0

PlayReady Header v4.1.0.0 se introdujo con PlayReady versión 2.0 en septiembre de 2011 para admitir secuencias lineales en vivo con licencias hoja escalables insertadas en la secuencia. Este tipo de secuencia requiere que los clientes enlacen una licencia raíz escalable sin conocimiento de la clave de cifrado de contenido que se usará en el descifrador.

3.5.1. Diferencias con otras versiones

Los SDK de PlayReady 2.0 y los clientes posteriores pueden procesar las versiones v4.0 y v4.1 del encabezado PlayReady. Los SDK de PlayReady anteriores devuelven un error de "versión no admitida" cuando se proporciona con encabezados v4.1.

El formato de encabezado playReady v.4.1.0.0 tiene los siguientes cambios en comparación con v4.0.0.0:

  • El atributo de versión del elemento WRMHEADER se establece en la cadena "4.1.0.0".
  • El elemento DATA contiene un elemento OPCIONAL DECRYPTORSETUP .
  • El elemento KID se encuentra dentro del elemento PROTECTINFO y es opcional en lugar de necesario.
  • El elemento KID contiene los atributos ALGID (obligatorio), CHECKSUM (opcional) y VALUE (obligatorio).
  • Se ha quitado el elemento KEYLEN . El atributo KEYLEN se usó anteriormente para eliminar la ambigüedad de las licencias de cócteles con claves de longitud diferentes. El encabezado v4.1 interrumpirá la capacidad de admitir cualquier cosa, excepto las llaves de cóctel de 8 bytes. Si usa llaves de cóctel que no son de 8 bytes, debe usar encabezados v4.0.
  • Los elementos ALGID y CHECKSUM se han quitado, ya que sus datos están contenidos dentro de los atributos del elemento KID .

3.5.2. Formato

El encabezado de PlayReady v4.1.0.0 tiene la siguiente sintaxis:

<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.1.0.0">
  <DATA>
      <PROTECTINFO>
        <KID ALGID="AESCTR" CHECKSUM="base64-encoded value" VALUE="base64-encoded guid"></KID>
      </PROTECTINFO>
      <LA_URL> URL for license acquisition </LA_URL>
      <LUI_URL>
        URL for Non-silent license acquisition web page
      </LUI_URL>
    <DS_ID> base64-encoded guid </DS_ID>
    <CUSTOMATTRIBUTES xmlns="">
      <mm:Publisher xmlns:mm="urn:schema-musicmogul-com">
           <mm:Author>
                Elvis Presley
           </mm:Author>
           <mm:CreationDate>
                2007/08/21:12:00:00
           </mm:CreationDate>
        </mm:Publisher>
    </CUSTOMATTRIBUTES>
    <DECRYPTORSETUP>ONDEMAND</DECRYPTORSETUP>
  </DATA>
</WRMHEADER>

Las etiquetas se describen a continuación.

Nombre de etiqueta Requerido Descripción
WRMHEADER Elemento más externo del objeto de encabezado. Puede contener un elemento DATA y debe contener un atributo de versión. La versión del encabezado es "4.1.0.0". Cada vez que Microsoft define nuevas etiquetas o atributos obligatorios, un nuevo número de versión está asociado a esas etiquetas o atributos. Si la versión es mayor que aquella para la que se escribió el código de cliente, el código de cliente debe producir un error, ya que implica que el encabezado contiene etiquetas obligatorias que el cliente no entiende. Si la versión es menor o igual que para la que se escribió el código de cliente, el código de cliente puede omitir de forma segura cualquier etiqueta o atributo que no comprenda.
DATA No Elemento contenedor para los datos de encabezado, incluidas las etiquetas de terceros. No se puede incluir más de un elemento DATA en el elemento WRMHEADER .
PROTECTINFO No Especifica cero o uno de los elementos KID que se pueden usar para crear objetos de descifrador para el contenido asociado. No se puede incluir más de un elemento PROTECTINFO en el elemento DATA .
NIÑO No Contiene todos los datos clave de una licencia determinada. Puede haber uno o cero elementos KID en el nodo PROTECTINFO . El elemento KID contiene los siguientes atributos.

VALUE: obligatorio. Contiene un valor GUID de identificador de clave codificado en base64. Tenga en cuenta que este valor GUID (DWORD, WORD, WORD, matriz de 8 BYTES) debe ser un orden de bytes little endian.

ALGID: obligatorio. Especifica el algoritmo de cifrado. Debe establecerse en: "AESCTR" o "COCKTAIL"

CHECKSUM: Opcional. Contiene una suma de comprobación calculada mediante kid VALUE y la clave de contenido. Consulte la sección Algoritmo de suma de comprobación de clave de este documento para obtener más información.

Si este nodo existe en el XML WRMHeader, su valor de datos debe estar vacío.
LA_URL No Contiene la dirección URL del servicio web de adquisición de licencias. Solo se permiten direcciones URL absolutas. No se puede incluir más de un elemento LA_URL en el elemento DATA .

Si este nodo existe en el XML WRMHeader, su valor de datos no debe estar vacío.
LUI_URL No Contiene la dirección URL de una página web de adquisición de licencias no silenciosa. Solo se permiten direcciones URL absolutas. No se puede incluir más de un elemento LUI_URL en el elemento DATA .

Si este nodo existe en el XML WRMHeader, su valor de datos no debe estar vacío.
DS_ID No Id. de servicio para el servicio de dominio. No se puede incluir más de un elemento DS_ID en el elemento DATA .

Si este nodo existe en el XML WRMHeader, su valor de datos no debe estar vacío.
CUSTOMATTRIBUTES No El autor del contenido puede agregar XML arbitrario dentro de este elemento. El código de Microsoft no actúa sobre ningún dato contenido dentro de este elemento. Solo se puede incluir un elemento CUSTOMATTRIBUTES en el elemento DATA .

Si este nodo existe en el XML WRMHeader, su valor de datos no debe estar vacío.
DECRYPTORSETUP No Esta etiqueta solo puede contener el valor "ONDEMAND". Cuando esta etiqueta presente en el nodo DATA y su valor se establece en "ONDEMAND", indica a una aplicación que no debe esperar que la cadena de licencias completa del contenido esté disponible para su adquisición, o ya esté presente en el equipo cliente, antes de configurar el grafo multimedia. Si no se establece esta etiqueta, indica que una aplicación puede exigir que se adquiera la licencia, o que ya esté presente en el equipo cliente, antes de configurar el grafo multimedia. Solo se puede incluir hasta un elemento DECRYPTORSETUP en el elemento DATA .

Notas de la versión 4.1:

  • Microsoft define todas las etiquetas y atributos XML del encabezado PlayReady. La única excepción es el contenido del elemento CUSTOMATTRIBUTES . Los desarrolladores de aplicaciones de PC playReady no deben agregar etiquetas personalizadas fuera del elemento CUSTOMATTRIBUTES .
  • El encabezado PlayReady debe cumplir las especificaciones xml canónicas de W3C v1.1.
  • El encabezado PlayReady no contiene una etiqueta de nivel ?XML superior necesaria en XML con formato correcto.
  • Se recomienda que el tamaño de este campo no supere los 1 KB.

3.6. v4.0.0.0

PlayReady Header v4.0.0.0 se introdujo con PlayReady versión 1.0 en 2008 y permite que una sola clave AESCTR admita contenido cifrado AES o una clave COCKTAIL para admitir contenido cifrado WMDRM.

3.6.1. Ejemplos

Encabezado de PlayReady 4.0.0.0
<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.0.0.0">
  <DATA>
    <PROTECTINFO>
      <ALGID>AESCTR</ALGID>
      <KEYLEN>16</KEYLEN>
    </PROTECTINFO>
    <KID>q5HgCTj40kGeNVhTH9Gexw==</KID>
    <CHECKSUM>w+OZVr8vzrQ=</CHECKSUM>
    <LA_URL>http://rm.contoso.com/rightsmanager.asmx</LA_URL>
    <CUSTOMATTRIBUTES>
      <IIS_DRM_VERSION>8.0.1705.19</IIS_DRM_VERSION>
    </CUSTOMATTRIBUTES>
  </DATA>
</WRMHEADER>
Objeto PlayReady codificado en Base64 que contiene un encabezado de PlayReady 4.0.0.0

XAMAAAEAAQBSAzwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4AcQA1AEgAZwBDAFQAagA0ADAAawBHAGUATgBWAGgAVABIADkARwBlAHgAdwA9AD0APAAvAEsASQBEAD4APABDAEgARQBDAEsAUwBVAE0APgB3ACsATwBaAFYAcgA4AHYAegByAFEAPQA8AC8AQwBIAEUAQwBLAFMAVQBNAD4APABMAEEAXwBVAFIATAA+ AGgAdAB0AHAAcwA6AC8ALwBwAHIAbwBmAGYAaQBjAGkAYQBsAHMAaQB0AGUALgBrAGUAeQBkAGUAbABpAHYAZQByAHkALgBtAGUAZABpAGEAcwBlAHIAdgBpAGMAZQBzAC4AdwBpAG4AZABvAHcAcwAuAG4AZQB0AC8AUABsAGEAeQBSAGUAYQBkAHkALwA8AC8ATABBAF8AVQBSAEwAPgA8AEMAVQBTAFQATwBNAEEAVABUAFIASQBCAFUAVABFAFMAPgA8AEkASQBTAF8ARABSAE0AXwBWAEUAUgBTAEkATwBOAD4AOAAuADAALgAxADcAMAA1AC4AMQA5ADwALwBJAEkAUwBfAEQAUgBNAF8AVgBFAFIAUwBJAE8ATgA+ ADwALwBDAFUAUwBUAE8ATQBBAFQAVABSAEkAQgBVAFQARQBTAD4APAAvAEQAQQQBUAEEAPgA8AC8AVwBSAE0ASABFAEEARABFAFIAPgA=

3.6.2. Formato

El encabezado de PlayReady v4.0.0.0 tiene la siguiente sintaxis:

<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.0.0.0">
<DATA>
      <PROTECTINFO>
        <ALGID>AESCTR</ALGID>
        <KEYLEN>16</KEYLEN>
      </PROTECTINFO>
      <LA_URL> URL for license acquisition </LA_URL>
      <LUI_URL>
        URL for Non-silent license acquisition web page
      </LUI_URL>
    <DS_ID>base64-encoded guid</DS_ID>
    <KID>base64-encoded kid</KID>
    <CUSTOMATTRIBUTES xmlns="">
      <mm:Publisher xmlns:mm="urn:schema-musicmogul-com">
           <mm:Author>
                Elvis Presley
           </mm:Author>
           <mm:CreationDate>
                2007/08/21:12:00:00
           </mm:CreationDate>
        </mm:Publisher>
    </CUSTOMATTRIBUTES>
    <CHECKSUM>
      checksum of the content key for verification
    </CHECKSUM>
  </DATA>
</WRMHEADER>

En la tabla siguiente se describen las distintas etiquetas.

Nombre de etiqueta Requerido Descripción
WRMHEADER Elemento más externo del objeto de encabezado. Puede contener un elemento DATA y un atributo de versión. La versión del encabezado es "4.0.0.0".

Semántica del empaquetador:
cada vez que Microsoft define nuevas etiquetas o atributos obligatorios, se asocia un nuevo número de versión a esas etiquetas o atributos. La versión del encabezado PlayReady debe establecerse en el valor más alto de las versiones de las etiquetas y atributos obligatorios presentes en el encabezado.

Semántica para Client:
Si la versión es mayor que la para la que se escribió el código de cliente, el código de cliente debe producir un error porque implica que el encabezado contiene etiquetas obligatorias que el cliente no entiende. Si la versión es menor o igual que para la que se escribió el código de cliente, el código de cliente puede omitir de forma segura cualquier etiqueta o atributo que no comprenda.
DATA Elemento contenedor para los datos de encabezado, incluidas las etiquetas de terceros.
PROTECTINFO Especifica el tipo de cifrado mediante los elementos secundarios KEYLEN y ALGID .
KEYLEN Especifica el tamaño de la clave de contenido. Debe establecerse en 16 si ALGID está establecido en "AESCTR" y 7 si ALGID está establecido en "COCKTAIL".
ALGID Especifica el algoritmo de cifrado. Debe establecerse en el siguiente valor:

AESCTR: corresponde al algoritmo AES en modo contador.

COCKTAIL: corresponde al algoritmo de cóctel.
NIÑO Contiene un valor GUID de identificador de clave codificado en base64. Tenga en cuenta que este valor GUID (DWORD, WORD, WORD, matriz de 8 BYTES) debe ser un orden de bytes little endian.
CHECKSUM No Contiene la suma de comprobación calculada mediante kid VALUE y la clave de contenido. Consulte la sección Algoritmo de suma de comprobación de claves para obtener más información.

Las versiones anteriores de PlayReady trataron este campo según sea necesario, por lo que debe incluirse en cualquier encabezado que vaya a consumir una versión anterior de PlayReady.
LA_URL No Contiene la dirección URL del servicio web de adquisición de licencias. Solo se permiten direcciones URL absolutas.
LUI_URL No Contiene la dirección URL de una página web de adquisición de licencias no silenciosa. Solo se permiten direcciones URL absolutas.
DS_ID No Id. de servicio para el servicio de dominio.
CUSTOMATTRIBUTES No El autor del contenido puede agregar XML arbitrario dentro de este elemento. El código de Microsoft no actúa sobre ningún dato contenido dentro de este elemento.

Notas de la versión 4.0:

  • Microsoft define todas las etiquetas y atributos XML del encabezado PlayReady. La única excepción es el contenido del elemento CUSTOMATTRIBUTES . Los desarrolladores de aplicaciones de PC playReady no deben agregar etiquetas personalizadas fuera del elemento CUSTOMATTRIBUTES , ya que esto puede entrar en conflicto con etiquetas futuras que Microsoft define.
  • El orden de los elementos secundarios dentro de un elemento contenedor no importa.
  • Tenga en cuenta que el encabezado PlayReady no contiene una etiqueta de nivel ?XML superior necesaria en XML con formato correcto.
  • Se recomienda que el tamaño de este campo no supere los 1 KB.
  • EL SDK del servidor de PlayReady requiere CHECKSUM hasta la versión 1.2. Desde la versión 1.5, el SDK de PlayReady Server trata CHECKSUM como opcional. PlayReady Porting Kit 1.2 está listo para usar. PlayReady Porting Kit 2.0 trata CHECKSUM como opcional.

4. Almacén de licencias insertado (ELS)

Se recomienda agregar un almacén de licencias incrustado vacío al objeto PlayReady en las condiciones siguientes:

  • El objeto PlayReady se va a insertar en un archivo de contenido.
  • El contenido se puede usar en un contexto de dominios de PlayReady con licencias insertadas.

Esto permite que un cliente de PlayReady inserte aún más una licencia enlazada a un dominio en el objeto PlayReady simplemente rellenando el almacén de licencias incrustado existente y ahorra el esfuerzo de tener que volver a encabezado todo el archivo con un nuevo objeto PlayReady de un tamaño mayor que el del inicial.

Nota

No incluya un almacén de licencias incrustado vacío en un objeto PlayReady, destinado a insertarse como una cadena base 64 en un manifiesto de cliente de Smooth Streaming.

Nota

El tamaño recomendado es de 10 KB.

5. Algoritmo de suma de comprobación de clave

El algoritmo de suma de comprobación del encabezado PlayReady está diseñado para protegerse frente a claves no coincidedas. En los primeros días de DRM, las canciones se cifraron con claves etiquetadas incorrectamente. Esto dio lugar a que el ruido blanco se reproducira cuando las canciones se descifran. Y si las canciones fueron reproducidas lo suficientemente fuerte, el equipo de reproducción fue destruido. Con la suma de comprobación, la clave de contenido se puede comprobar como la clave que se usó para cifrar el archivo. El algoritmo funciona de la siguiente manera:

Para un valor ALGID establecido en "AESCBC", no hay ningún algoritmo de suma de comprobación de clave definido. Se debe omitir el atributo CHECKSUM .

Para un valor ALGID establecido en "AESCTR", el identificador de clave de 16 bytes se cifra con una clave de contenido AES de 16 bytes mediante el modo ECB. Los primeros 8 bytes del búfer se extraen y se codifican en base64.

Para un valor ALGID establecido en "COCKTAIL", realice los pasos siguientes:

  1. Se crea un búfer de 21 bytes.

  2. La clave de contenido se coloca en el búfer y el resto del búfer se rellena con ceros.

  3. Para cinco iteraciones:

    a. buffer = SHA-1 (búfer).

  4. Los primeros 7 bytes del búfer se extraen y se codifican en base64.

  5. Una vez realizados estos pasos, los bytes codificados en base64 se usan como suma de comprobación.

6. CUSTOMATTRIBUTES

Un proveedor de servicios puede agregar XML propietario dentro del elemento CUSTOMATTRIBUTES del encabezado PlayReady. Se garantiza que las etiquetas usadas dentro del elemento CUSTOMATTRIBUTES no entren en conflicto con etiquetas futuras definidas por Microsoft.

El código de Microsoft no actúa en ningún XML dentro de este elemento. El back-end del proveedor de servicios o su código del lado cliente son los únicos que normalmente interpretan el valor de este elemento. Por ejemplo, supongamos que un servicio de etiqueta blanca representa los servicios front-end AAA, BBB, CCC. Este servicio puede cifrar su biblioteca de contenido solo una vez (ya que es una operación costosa), pero cuando sirve contenido a un usuario final, puede establecer CUSTOMATTRIBUTES en el nombre del servicio front-end específico al que se suscribe el usuario final. Cuando el usuario final solicita una licencia para ese contenido, esto permite al servicio de etiqueta blanca determinar a qué servicio front-end se suscribe el usuario final, de modo que pueda emitir una licencia diferente.

El tamaño de este campo no debe superar los 1 kilobytes (KB).