Compartir vía


Modos de cifrado de contenido de PlayReady

En este tema se proporciona información general sobre los modos de cifrado de contenido en sistemas PlayReady. Para obtener información general sobre el cifrado de contenido y PlayReady, consulte Cifrado de contenido de PlayReady. Consulte Glosario para conocer los términos y definiciones de cifrado.

La versión 1.0 de PlayReady introdujo el modo de cifrado de contenido CTR AES-128, además del modo de cifrado COCKTAIL específico del Microsoft usado anteriormente en WMDRM (Windows Media Digital Rights Management). El modo de cifrado de contenido AES-128 CTR usa claves AES, con una longitud de 128 bits que se usan en los archivos de contenido en modo contador (CTR).

A partir de la versión 4.0, los sistemas PlayReady admiten claves AES de 128 bits tanto en modo contador (CTR) como en modo de encadenamiento de bloques de cifrado (CBC).

Este cambio garantiza que los servicios que usan PlayReady puedan aprovechar completamente una secuencia única y un formato de archivo en todos los dispositivos. Además, Microsoft admite el estándar CMAF (formato de aplicación multimedia común), tal como se define en ISO/IEC IDFS 23000-19.

Modos de cifrado comunes

El estándar ISO ISO/IEC 23001-7 define cuatro modos de cifrado comunes.

Modos de cifrado comunes

Los clientes de PlayReady a partir de la versión 4.0 admiten claves CBC de AES, lo que permite la compatibilidad con el modo de cifrado común "cbcs", además de las claves CTR de AES para el modo de cifrado común "cenc". Antes de la versión 4.0, AES CTR era el modo admitido principalmente por los clientes de PlayReady, que permite la compatibilidad con el modo de cifrado común "cenc". Tenga en cuenta que los modos de cifrado común "cens" y "cbc1" se permiten y técnicamente se pueden hacer en un ecosistema de PlayReady, pero no se admiten.

Compatibilidad con el esquema de cifrado AES-CBC

Todos los clientes basados en o después de playReady PK versión 4.0 pueden admitir claves CBC. Sin embargo, la compatibilidad es opcional para los clientes y se señala a los servidores de licencias a través de una propiedad adicional en el protocolo de adquisición de licencias.

Versión CÓCTEL 'cenc' 'cbcs'
Cliente playReady 1.0 admitido admitido no admitido
PlayReady Client 2.0 admitido admitido no admitido
Cliente de PlayReady 2.5 admitido admitido no admitido
PlayReady Client 3.0 no admitido admitido no admitido
Cliente playReady 3.3 no admitido admitido no admitido
Cliente playReady 4.0 no admitido admitido admitido

Nota:

  • Todas las unidades de Xbox One actualizadas con la versión 1709 o superior admiten "cbcs".
  • Todos los servidores de licencias de PlayReady a partir de la versión 4.0 admiten la emisión de licencias con claves CBC.

Señalización del ALGID en el encabezado PlayReady

El encabezado PlayReady es un documento XML que normalmente se incluye en el encabezado de un archivo de contenido o una secuencia. Describe los atributos de PlayReady necesarios para que un cliente descifre este contenido. El encabezado PlayReady tiene su propia especificación y control de versiones. Para obtener más información, vea Especificación de encabezado playReady.

Versión Encabezado de PlayReady 4.3 Encabezado de PlayReady 4.2 Encabezado de PlayReady 4.1 Encabezado de PlayReady 4.0
Cliente playReady 4.0
(véase la nota 4)
Cliente playReady 3.3
(véase la nota 3)
PlayReady Client 3.0
(véase la nota 3)
Cliente de PlayReady 2.5
(véase la nota 2)
PlayReady Client 2.0
(véase la nota 2)
Cliente playReady 1.0
(véase la nota 1)

Nota

  • (4) La versión 1709 o posterior de Xbox One son clientes playReady 4.X.
  • (3) Windows 10 todas las versiones y Xbox One versión 1703 o inferior son clientes de PlayReady 3.X. Los dispositivos no Windows más recientes (por ejemplo, televisores inteligentes) publicados después de 2017 son clientes playReady 3.X.
  • (2) 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.
  • (1) 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.

A continuación se muestra un ejemplo de un encabezado playReady v4.2.

<WRMHEADER
          version="4.2.0.0"
          xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader">
  <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>
    <DECRYPTORSETUP>ONDEMAND</DECRYPTORSETUP>
  </DATA>
</WRMHEADER>

ALGID (identificador de algoritmo) es una propiedad del elemento KID y especifica el algoritmo de cifrado que se usó para cifrar el contenido. A partir de la versión 4.2 del encabezado PlayReady, se requiere alGID y debe establecerse en "AESCTR" o "COCKTAIL". Sin embargo, a partir de la versión 4.3, el ALGID también se puede establecer en el valor "AESCBC". En el ejemplo siguiente se muestra un encabezado playReady versión 4.3 con los valores ALGID establecidos en "AESCBC".

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

En la ilustración siguiente se muestra un flujo de contenido, donde la solicitud de licencia se basa en el encabezado PlayReady y se especifica ALGID.

Flujo de contenido con ALGID especificado

Faltan ALGID

A partir de la versión 4.3 del encabezado PlayReady, es posible que falte el ALGID. En el ejemplo siguiente se muestra una versión 4.3 del encabezado PlayReady con los valores ALGID que faltan.

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

En la ilustración siguiente se muestra un flujo de contenido, donde la solicitud de licencia usa el módulo CDMi y falta ALGID.

Flujo de contenido con ALGID que falta

Nota:

Cada encabezado playReady puede tener:

  • Solo un tipo de cifrado. Por ejemplo, si ALGID="AESCTR", todas las claves del encabezado se usan en modo CTR. Cuando ALGID="AESCBC", todas las claves de este encabezado se usan en modo CBC.
  • Cuando falta el ALGID, todas las claves de este encabezado se usan en modo contador o encadenamiento de bloques de cifrado, pero el valor no se inserta en el encabezado.
  • Al realizar una solicitud de adquisición de licencias con un encabezado de PlayReady v4.3 a un servidor de licencias inferior a la versión 4.0, se producirá una excepción.
  • Una respuesta de licencia puede incluir una o varias licencias, donde cada licencia contiene una clave y cualquier número de directivas.

¿Por qué falta el valor ALGID?

Microsoft recomienda que los cifradores incluyan siempre el mismo valor ALGID en el encabezado PlayReady que incluyeron al procesar el contenido.

En un escenario estándar, el cifrador cifra el contenido y genera el encabezado PlayReady en el contenido. El cifrador sabe qué modo AES usó para el cifrado; por lo tanto, incluye esta información en la propiedad ALGID del encabezado PlayReady. Los clientes inician solicitudes de licencia basadas en encabezados de PlayReady analizados fuera del contenido real, por lo que el valor ALGID está presente y válido.

En algunos escenarios, el cliente inicia una solicitud de licencia basada en un valor KID simple (un GUID de 128 bits). En este caso, faltará el valor ALGID en el encabezado PlayReady insertado en la solicitud de licencia (también conocido como no especificado). Un ejemplo es cuando el cliente realiza una solicitud de licencia mediante las API EME de HTML5.

Cómo controla el cliente un ALGID que falta

Si el cliente inicia una solicitud de licencia basada en un encabezado de PlayReady entrante, el valor ALGID de la solicitud de licencia reflejará el valor que se encuentra en el encabezado porque el desafío de adquisición de licencias incluye una copia del encabezado PlayReady. En este caso:

  • Para todos los encabezados de PlayReady v4.2 o inferior, se requiere el valor ALGID y debe ser válido.
  • En el caso de los encabezados de PlayReady v4.3 o superior, el valor ALGID puede estar presente y válido, o falta.

Cómo controla el SDK de servidor un ALGID que falta

Todas las licencias entregadas a través de una respuesta de licencia DEBEN incluir un valor ALGID válido.

Si ALGID no se especifica en la solicitud de licencia entrante, el servidor de licencias debe obtener esta información del back-end del servicio y colocar el valor correcto en la respuesta de la licencia.

Vectores de inicialización (IVs)

En las versiones 3.3 y anteriores de PlayReady, solo se admiten IVs de 64 bits (IV de 8 bytes) en modo CTR. A partir de la versión 4.0 de PlayReady, las IVs de 64 y 128 bits (IVs de 8 bytes y 16 bytes) se admiten en los modos CTR y CBC.

Ejemplos:

  • Ahora se admiten flujos compatibles con HLS que usan con frecuencia IVs de 128 bits en modo CBC.
  • Ahora se admiten algunas secuencias compatibles con HbbTV que usan IVs de 128 bits en modo CTR.

Limitaciones

  • Un encabezado PlayReady debe usar solo un valor ALGID para todos los elementos KID. En otras palabras, todas las claves usadas para cifrar las diferentes pistas y cualidades de un recurso deben ser AES CTR o AES CBC. Si falta el ALGID en cualquier elemento KID, debe faltar en todos los elementos KID.
  • Antes de la versión 4.4 de PlayReady, la generación de una licencia con una clave CBC cuando el certificado de cliente entrante es Windows y SL2000 produce una excepción. Esto se debe a que los clientes de Windows solo admiten CBC en unidades SL3000. Puede ser posible entregar una licencia con una clave CBC a un cliente SL2000, sin embargo, si este cliente es la versión 4.0 mínima de PlayReady y declara la compatibilidad con el modo CBC.
  • La generación de una licencia con una clave CBC cuando el certificado de cliente entrante es un dispositivo que usa una versión del Kit de migración anterior a la 4.0 producirá una excepción.
  • La generación de una licencia con una clave CBC cuando la solicitud de licencia entrante no indica compatibilidad con el CBC de AES, producirá una excepción.

Importante

Los servicios no deben cifrar un solo fragmento de contenido en modo CTR y en modo CBC con el mismo {KID, Ck}.

  • Por motivos funcionales, un cliente que adquiere una licencia para {KID, Ck, AESCTR} y para {KID, Ck, AESCBC} no funcionaría.
  • Por motivos de solidez, un atacante que tiene acceso al mismo contenido cifrado con la misma clave en los modos CBC y CTR podría descifrar más fácilmente el contenido sin autorización.