Identificadores de clave y clave (KID)
Cada archivo multimedia protegido por PlayReady tiene un objeto PlayReady (PRO), que contiene varias partes de información que PlayReady necesita. Esto se encuentra en el encabezado de contenido del archivo que, por ejemplo, también puede contener metadatos para las pistas de vídeo y audio.
Dentro de cada PRO es un encabezado de PlayReady, que proporciona a un cliente la información necesaria para buscar o adquirir una licencia para el fragmento de contenido en el que se almacena. El encabezado PlayReady tiene un aspecto similar al siguiente:
<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>https://test.playready.microsoft.com/service/rightsmanager.asmx</LA_URL>
</DATA>
</WRMHEADER>
La parte que nos interesa es el <KIDS>
elemento , que contiene uno o varios <KID>
elementos. Un KID (id. de clave) contiene un identificador único global (GUID) que el cliente usa para pedir al servidor una clave correspondiente y un ALGID, que se usa para descifrar el archivo. Kid es público, ya que está incluido en el PRO, pero la propia clave es un secreto para el servicio, y la relación entre la clave y KID solo se conoce al servicio.
Generación de una clave y cifrado del contenido
Las claves de cifrado de contenido en los sistemas PlayReady son AES-128 CTR y claves CBC AES-128. El servicio que cifra el contenido genera un nuevo KID y una nueva clave de contenido. El KID se inserta en pro, y los fotogramas de vídeo y audio del contenido se cifran con la clave de contenido. En la imagen siguiente se muestra cómo se genera una clave y, a continuación, se usa para cifrar el contenido.
Hay dos maneras de generar un KID y una clave, entre las que se incluyen:
- Con un sistema de administración de claves (KMS), donde el servicio genera aleatoriamente cada valor kid y clave y los almacena, y simplemente puede buscar el valor de clave que corresponde al KID proporcionado por el cliente.
- Uso del mecanismo de inicialización de clave de PlayReady . Con este mecanismo, el servicio determina un valor constante denominado inicialización de clave (un valor aleatorio de 30 bytes) y, para cada fragmento de contenido que requiere una clave, genera un KID aleatorio. Con el SDK de servidor, puede generar una clave proporcionando los 128 bits de la clave, o la inicialización de clave y KID. La clave se deducirá mediante un algoritmo de PlayReady especificado aquí.
Independientemente de cómo genere la clave, debe poder comprobar que corresponde al KID correcto y, a continuación, cifrar el contenido.
Entrega de una licencia para el contenido
Cuando un cliente realiza una solicitud de licencia, envía el encabezado PlayReady del contenido al emisor de licencias. El emisor de licencias extrae el KID y determina el valor de clave correspondiente, utilizando uno de los métodos descritos anteriormente, si usa el mecanismo de inicialización de clave, simplemente regenera la clave en función de la inicialización de clave y kid. A continuación, genera una licencia que incluye esta clave, que devuelve al cliente en una respuesta de licencia.
Por ejemplo, supongamos que tiene un archivo de vídeo. El empaquetador de este contenido genera un KID 123
aleatorio, que inserta en el encabezado PlayReady del archivo. El empaquetador también genera un valor ABC
de clave aleatorio para que se corresponda con KID 123
y los almacena en el KMS. El empaquetador solicita al KMS la clave correcta para cifrar el archivo con y cifra el archivo con la clave ABC
. Cuando el cliente intenta reproducir el archivo, el cliente solicita al emisor de licencias una licencia que corresponda al KID 123
. El emisor de licencias busca el KID en el KMS y responde con una licencia, incluida la clave ABC
, que permite al cliente desbloquear el archivo y al cliente verlo.
Nota
La licencia enviada por el emisor de licencias al cliente (en nuestro ejemplo, la licencia que contiene la clave ABC
) está cifrada; un atacante no puede interceptar el valor de la clave.
La clave utilizada para proteger el archivo multimedia y la clave de la licencia son las mismas; por lo tanto, el empaquetador de contenido y el emisor de licencias deben poder recuperar o generar la misma clave exacta para un archivo multimedia especificado. Para ello, si usa una inicialización de clave para generar claves, debe compartirla entre el empaquetador de contenido y el emisor de licencias.
Uso compartido de claves entre archivos o pistas
Al igual que una clave real puede desbloquear más de una puerta, técnicamente es posible usar una tecla PlayReady para desbloquear varias pistas en un archivo o incluso varios archivos en una colección de recursos. Durante el proceso de empaquetado, el empaquetador de contenido puede especificar el mismo identificador de clave para varias pistas o varios archivos multimedia, y se usa la misma clave para todos ellos.
Por ejemplo, con un recurso de vídeo de varias calidades con pistas de vídeo 4K, HD y SD y varias pistas de audio, el cifrador tiene la flexibilidad de definir una clave por pista o una clave para todas las pistas.
Los clientes necesitarán una licencia para cada una de las claves que tengan derecho a descifrar. Tenga en cuenta que la entrega de varias licencias se puede realizar mediante un servidor de licencias en una única respuesta de licencia.
En un único recurso con varias pistas, la decisión entre una clave para todas las pistas o una clave para cada pista se realiza mediante el servicio que administra el contenido y se basa en los siguientes criterios:
- Más claves aporta más complejidad, pero le permite especificar en tiempo de entrega de licencias lo que hace un seguimiento del servicio quiere permitir que un cliente determinado descifre.
- Menos claves es menos compleja, pero no permite especificar en tiempo de entrega de licencias lo que el servicio quiere permitir que un cliente determinado descifre.
- Algunos clientes pueden tener la limitación de que no admiten varias claves para un único recurso.
Nota
Aunque las claves de PlayReady pueden desbloquear más de un archivo multimedia digital, Microsoft está fuertemente en contra de esto. El uso de claves únicas en todos los archivos proporciona mayor seguridad que proteger los archivos con la misma clave.
Apilamiento de licencias en una respuesta de licencia
Una única respuesta de licencia también puede llevar varias licencias y, por tanto, varias claves para desbloquear varios archivos o pistas en una transacción. Esto es más eficaz que crear varias respuestas para varias licencias, ya que solo implica una transacción. Esto puede ser útil para diferentes escenarios:
- Un archivo multimedia se cifra mediante varias claves. Por ejemplo, la pista de vídeo se cifra mediante Key1 y la pista de audio se cifra mediante Key2. Cuando un cliente solicita una licencia para KID1, el servidor de licencias emite una respuesta de licencia que incluye licencias para KID1 y KID2, por lo que el cliente tiene todas las claves para descifrar las pistas de audio y vídeo del archivo.
- Cada canción de un álbum se cifra con una clave diferente, pero un cliente ha adquirido los derechos de todos ellos. Cuando el cliente comienza a tocar la primera canción, el servidor de licencias emite una respuesta de licencia, incluida una licencia para cada canción del álbum, por lo que el cliente tiene todas las claves necesarias para reproducir todo el álbum sin problemas.
- Se espera que la clave de un canal en la televisión en directo cambie cada 24 horas. Cuando se inicia la reproducción, el servidor envía una respuesta de licencia, incluida la licencia de la clave actual, pero también una licencia con la siguiente clave, por lo que cuando cambia la clave, el cliente ya tendrá la siguiente clave y el cambio se produce sin problemas.