Partilhar via


Especificação do cabeçalho PlayReady

1. Introdução

Essa especificação se aplica a qualquer produto final criado com o SDK do PlayReady Server, o Kit de Portabilidade de Dispositivos PlayReady, Windows, Xbox, Windows Phone e Silverlight.

1,1. Histórico de Alterações

Versão Alteração
8 de setembro de 2021 Adicione o atributo LICENSEREQUESTED opcional ao nó PROTECTINFO.
1º de novembro de 2017 Adicione a seção Requisitos de Sintaxe. Corrigir vários exemplos com ordem de atributo incorreta (os atributos devem estar em ordem alfabética)
12 de julho de 2017 Adicione a seção Cabeçalho 4.3.0.0 do PlayReady, com suporte a partir do PlayReady versão 4.
Adicionar requisito de sintaxe de que todos os nós XML devem ser explicitamente fechados por uma marca de fechamento
10 de abril de 2015 Seção Adicionar o PlayReady Header 4.2.0.0 com suporte a partir do PlayReady versão 3
Setembro de 2011 Seção Adicionar o PlayReady Header 4.1.0.0 com suporte a partir do PlayReady versão 2
Agosto de 2008 Versão inicial que documenta o PlayReady Header 4.0.0.0 com suporte no PlayReady versão 1

2. Objeto PlayReady (PRO)

O Objeto PlayReady (PRO) contém os campos a seguir.

Nome do campo Tipo de campo Tamanho (bits) Descrição
Comprimento DWORD 32 O comprimento do objeto PlayReady em bytes. Esse valor não deve exceder 15 quilobytes (KB).
Contagem de registros de objeto PlayReady WORD 16 Especifica o número de registros de objeto PlayReady no objeto PlayReady.
Registros de objeto PlayReady Matriz BYTE Varia Contém um número variável de registros que contêm informações relacionadas a licenças e aquisição de licenças.

2.1 Registros de objeto PlayReady

O Objeto PlayReady consiste em sub-objetos adicionais chamados Registros de Objetos PlayReady. Os registros de objeto PlayReady contêm os campos a seguir.

Nome do campo Tipo de campo Tamanho (bits) Descrição
Tipo de Registro WORD 16 Especifica o tipo de dados armazenados no Valor do Registro.
Comprimento do Registro WORD 16 Especifica o tamanho em bytes do Valor do Registro.
Valor do Registro Matriz BYTE Varia O conteúdo do objeto depende do valor do Tipo de Registro.

O campo Tipo de Registro tem um dos seguintes valores.

Tipo de valor Descrição
0x0001 Indica que o registro contém um PRH (Cabeçalho PlayReady).
0x0002 Reservado.
0x0003 Indica um ELS (Embedded License Store).

2.2. Exemplos de objeto PlayReady

A figura a seguir mostra um arquivo MP4 segmentado com um objeto PlayReady que contém um cabeçalho PlayReady:

PlayReady Object in MP4

A figura a seguir mostra a exibição HEX deste arquivo MP4:

PlayReady Object Hex Dump

3. Cabeçalho PlayReady (PRH)

O Cabeçalho do PlayReady (PRH) é usado por um cliente para localizar ou adquirir uma licença para o conteúdo no qual ele está armazenado. Ele é codificado usando UTF-16.

Matriz de suporte da versão 3.1

  Cabeçalho PlayReady v4.3.0.0 Cabeçalho PlayReady v4.2.0.0 Cabeçalho PlayReady v4.1.0.0 Cabeçalho PlayReady v4.0.0.0
Clientes baseados
no SDK do PlayReady 4.0 (consulte a observação 1)
Clientes baseados
no SDK do PlayReady 3.0 (consulte a observação 2)
 
Clientes baseados
no SDK do PlayReady 2.x (consulte a observação 3)
   
Clientes baseados
no SDK do PlayReady 1.x (consulte a observação 4)
     

Observações:

  1. Xbox One versão 1709 ou superior são clientes Do PlayReady 4.X.
  2. Windows 10 (todas as versões) e Xbox One versão 1703 ou inferior são Clientes PlayReady 3.X. Os dispositivos não Windows mais recentes (por exemplo, Smart TVs) lançados após 2017 são clientes Do PlayReady 3.X.
  3. Silverlight e Windows 8, 8.1 são clientes PlayReady 2.X. A maioria dos dispositivos não Windows (por exemplo, Smart TVs) lançados entre 2011 e 2017 são clientes PlayReady 2.X.
  4. A maioria dos dispositivos não Windows (por exemplo, Smart TVs) lançados entre 2008 e 2011 são clientes PlayReady 1.X.

3.2. Requisitos de sintaxe

3.2.1. Canonicalized

O XML deve ser canonizado.

3.2.2. Todos os nomes de nós e atributos diferenciam maiúsculas de minúsculas

Com suporte

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

Sem suporte

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

3.2.3. As marcas de fechamento devem ser explícitas

Todos os nós XML devem ser explicitamente fechados por uma marca de fechamento, incluindo aqueles em nós dentro do nó CUSTOMATTRIBUTES.

Com suporte

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

Sem suporte

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

3.2.4. Atributos de namespace

Todos os atributos de namespace devem aparecer antes dos atributos não namespaces.

Com suporte

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

Sem suporte

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

3.2.5. Ordem alfabética

Todos os atributos devem estar em ordem alfabética, incluindo aqueles em nós dentro do nó CUSTOMATTRIBUTES.

Com suporte

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

Sem suporte

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

3.3. v4.3.0.0

O PlayReady Header v4.3.0.0 foi introduzido com o PlayReady versão 4.0 em setembro de 2017 para dar suporte a chaves AESCBC em um cabeçalho. Esse suporte permite a criptografia de conteúdo no modo CBC, em particular para os modos de Criptografia Comum 'cbcs'. Ele também aumenta a interoperabilidade de clientes PlayReady com outros sistemas DRM, bem como conteúdo existente.

3.3.1. Diferenças com outras versões

A partir da versão 4.0, os SDKs e clientes do PlayReady podem processar as versões 4.0, 4.1, 4.2 e 4.3 do PlayReady Header. Os SDKs do PlayReady anteriores à versão 4.0 retornarão um erro de "versão sem suporte" quando fornecido com cabeçalhos v4.3.

O formato de Cabeçalho PlayReady v.4.3.0.0 tem as seguintes alterações em comparação com v4.2.0.0:

  • O atributo de versão do elemento WRMHEADER é definido como a cadeia de caracteres "4.3.0.0".
  • O atributo ALGID localizado dentro do elemento KID pode estar ausente em uma solicitação de aquisição de licença. A Microsoft recomenda que o atributo ALGID tenha um valor válido no cabeçalho incluído no conteúdo.
  • Quando o atributo ALGID está presente em qualquer elemento KID e há mais de um elemento KID no elemento KIDS , todos os elementos KID devem incluir o atributo ALGID e os valores de atributo devem ser os mesmos.
  • O atributo ALGID localizado dentro do elemento KID agora pode ter o valor "AESCBC", além de "AESCTR", desde que:
    • Quando o atributo ALGID é definido como "AESCBC", o atributo CHECKSUM não deve ser incluído.

3.3.2. Exemplos

Veja a seguir um exemplo de um Cabeçalho PlayReady 4.3.0.0 com chaves 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>

Veja a seguir um exemplo de um Cabeçalho PlayReady 4.3.0.0 com um ALGID ausente:

<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. Formatar

O Cabeçalho PlayReady v4.3.0.0 tem a seguinte sintaxe:

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

As marcas são descritas abaixo.

Nome da marca Obrigatório Descrição
WRMHEADER Sim Elemento outermost do objeto header. Ele pode conter um elemento DATA e deve conter um atributo de versão. A versão do cabeçalho é "4.3.0.0". Sempre que a Microsoft define novas marcas ou atributos obrigatórios, um novo número de versão é associado a essas marcas ou atributos. Se a versão for maior do que a que o código do cliente foi gravado, o código do cliente deverá falhar, pois isso implica que o cabeçalho contém marcas obrigatórias que o cliente não entende. Se a versão for menor ou igual à que o código do cliente foi gravado, o código do cliente poderá ignorar com segurança quaisquer marcas ou atributos que ele não entenda.
DATA No Elemento contêiner para dados de cabeçalho, incluindo marcas de terceiros. Não mais do que um elemento DATA pode ser incluído no elemento WRMHEADER .
PROTECTINFO No Especifica zero ou um elemento KIDS . Não mais do que um elemento PROTECTINFO pode ser incluído no elemento DATA . Opcionalmente, inclui o atributo LICENSEREQUESTED.
LICENSEREQUESTED No Especifica se a aquisição de licença está solicitando pelo menos uma licença ou não. Deve ser definido como "true" ou "false" se presente e for considerado como "true" se não estiver presente. Esse atributo é ignorado pelas versões do PlayReady antes da 4.5. O aplicativo SDK do PlayReady Server é gratuito para ignorar esse atributo; é somente informativo.
CRIANÇAS No Especifica um ou mais elementos KID que podem ser usados para criar objetos de descriptografia para o conteúdo associado. Um ou zero elementos KIDS podem existir no nó PROTECTINFO .
GAROTO No Contém todos os dados de chave para uma determinada licença. Se o nó KIDS estiver presente, um ou mais elementos KID deverão existir no nó KIDS . O elemento KID contém os atributos a seguir.

ALGID: opcional. Especifica o algoritmo de criptografia. Pode ser definido como: "AESCTR", "AESCBC" ou "COCKTAIL".

CHECKSUM: opcional. Somente para chaves AESCTR. Contém uma soma de verificação calculada usando o atributo KID VALUE e a chave de conteúdo. Consulte a seção Algoritmo de Soma de Verificação de Chave deste documento para obter detalhes.

Se esse nó existir no XML do WRMHeader, seu valor de dados deverá estar vazio.

VALOR: Obrigatório. Contém um valor GUID de ID de chave codificado em base64. Observe que esse valor GUID (DWORD, WORD, WORD, matriz 8 BYTE) deve ser uma ordem de byte endian pouco.
LA_URL No Contém a URL do serviço Web de aquisição de licença. Somente URLs absolutas são permitidas. Não mais de um elemento LA_URL pode ser incluído no elemento DATA .

Se esse nó existir no XML do WRMHeader, seu valor de dados não deverá estar vazio.
LUI_URL No Contém a URL de uma página da Web de aquisição de licença não silenciosa. Somente URLs absolutas são permitidas. Não mais de um elemento LUI_URL pode ser incluído no elemento DATA .

Se esse nó existir no XML do WRMHeader, seu valor de dados não deverá estar vazio.
DS_ID No ID do serviço para o serviço de domínio. Somente até um elemento DS_ID pode ser incluído no elemento DATA .

Se esse nó existir no XML do WRMHeader, seu valor de dados não deverá estar vazio.
CUSTOMATTRIBUTES No O autor do conteúdo pode adicionar XML personalizado dentro desse elemento. O código da Microsoft não atua em nenhum dado contido nesse elemento. Não mais de um elemento CUSTOMATTRIBUTES pode ser incluído no elemento DATA .

Se esse nó existir no XML do WRMHeader, seu valor de dados não deverá estar vazio.
DECRYPTORSETUP No Essa marca só pode conter o valor "ONDEMAND". Quando essa marca está presente no nó DATA e seu valor é definido como "ONDEMAND", ele indica a um aplicativo que ele não deve esperar que a cadeia de licenças completa para o conteúdo esteja disponível para aquisição ou já esteja presente no computador cliente, antes de configurar o grafo de mídia. Se essa marca não estiver definida, indica que um aplicativo pode impor a licença a ser adquirida ou já estar presente no computador cliente, antes de configurar o grafo de mídia. Não mais de um elemento DECRYPTORSETUP pode ser incluído no elemento DATA .

3.4. v4.2.0.0

O PlayReady Header v4.2.0.0 foi introduzido com o PlayReady versão 3.0 em abril de 2015 para permitir vários KIDs em um único cabeçalho. Isso significa que várias chaves podem ser usadas para criptografar um único ativo, por exemplo, quando as faixas de áudio devem ser criptografadas com uma chave diferente das faixas de vídeo.

3.4.1. Diferenças com outras versões

Os SDKs do PlayReady 3.0 e os clientes posteriores podem processar as versões v4.0, v4.1 e v4.2 PlayReady Header. Os SDKs do PlayReady anteriores retornam um erro de "versão sem suporte" quando fornecido com cabeçalhos v4.2. Ao usar o cabeçalho v4.2, o cliente precisa saber qual versão do Servidor está usando por meio de um mecanismo personalizado e específico do aplicativo. Os SDKs do PlayReady não fornecem nenhuma maneira nativa de obter essas informações de versão.

O formato de Cabeçalho PlayReady v.4.2.0.0 tem as seguintes alterações em comparação com v4.1.0.0:

  • O atributo de versão do elemento WRMHEADER é definido como a cadeia de caracteres "4.2.0.0".
  • O elemento KID localizado dentro do elemento PROTECTINFO foi renomeado para KIDS e ainda é opcional.
  • Vários elementos KID estão localizados dentro do elemento KIDS .

3.4.2. Exemplo

Cabeçalho PlayReady 4.2.0.0 com duas chaves 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. Formatar

O Cabeçalho PlayReady v4.2.0.0 tem a seguinte sintaxe:

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

As marcas são descritas abaixo.

Nome da marca Obrigatório Descrição
WRMHEADER Sim Elemento outermost do objeto header. Ele pode conter um elemento DATA e deve conter um atributo de versão. A versão do cabeçalho é "4.2.0.0". Sempre que a Microsoft define novas marcas ou atributos obrigatórios, um novo número de versão é associado a essas marcas ou atributos. Se a versão for maior do que a que o código do cliente foi gravado, o código do cliente deverá falhar, pois isso implica que o cabeçalho contém marcas obrigatórias que o cliente não entende. Se a versão for menor ou igual à que o código do cliente foi gravado, o código do cliente poderá ignorar com segurança quaisquer marcas ou atributos que ele não entenda.
DATA No Elemento contêiner para dados de cabeçalho, incluindo marcas de terceiros. Somente até um elemento DATA pode ser incluído no elemento WRMHEADER .
PROTECTINFO No Especifica zero ou um elemento KIDS . Não mais do que um elemento PROTECTINFO pode ser incluído no elemento DATA .
CRIANÇAS Não Especifica um ou mais elementos KID que podem ser usados para criar objetos de descriptografia para o conteúdo associado. Um ou zero elementos KIDS podem existir no nó PROTECTINFO .
GAROTO No Contém todos os dados de chave para uma determinada licença. Se o nó KIDS estiver presente, um ou mais elementos KID deverão existir no nó KIDS . O elemento KID contém os atributos a seguir.

ALGID: Obrigatório. Especifica o algoritmo de criptografia. Deve ser definido como: AESCTR ou COCKTAIL

CHECKSUM: Opcional. Contém uma soma de verificação calculada usando o VALOR KID e a chave de conteúdo. Consulte a seção Algoritmo de Soma de Verificação de Chave deste documento para obter detalhes.

Se esse nó existir no XML do WRMHeader, seu valor de dados deverá estar vazio.

VALOR: Obrigatório. Contém um valor GUID de ID de chave codificado em base64. Observe que esse valor GUID (DWORD, WORD, WORD, matriz 8 BYTE) deve ser uma ordem de byte endian pouco.
LA_URL No Contém a URL do serviço Web de aquisição de licença. Somente URLs absolutas são permitidas. Não mais de um elemento LA_URL pode ser incluído no elemento DATA .

Se esse nó existir no XML do WRMHeader, seu valor de dados não deverá estar vazio.
LUI_URL No Contém a URL de uma página da Web de aquisição de licença não silenciosa. Somente URLs absolutas são permitidas. Não mais de um elemento LUI_URL pode ser incluído no elemento DATA .

Se esse nó existir no XML do WRMHeader, seu valor de dados não deverá estar vazio.
DS_ID No ID do serviço para o serviço de domínio. Não mais de um elemento DS_ID pode ser incluído no elemento DATA .

Se esse nó existir no XML do WRMHeader, seu valor de dados não deverá estar vazio.
CUSTOMATTRIBUTES No O autor do conteúdo pode adicionar XML arbitrário dentro desse elemento. O código da Microsoft não atua em nenhum dado contido nesse elemento. Não mais de um elemento CUSTOMATTRIBUTES pode ser incluído no elemento DATA .

Se esse nó existir no XML do WRMHeader, seu valor de dados não deverá estar vazio.
DECRYPTORSETUP No Essa marca só pode conter o valor "ONDEMAND". Quando essa marca está presente no nó DATA e seu valor é definido como "ONDEMAND", ele indica a um aplicativo que ele não deve esperar que a cadeia de licenças completa para o conteúdo esteja disponível para aquisição ou já esteja presente no computador cliente, antes de configurar o grafo de mídia. Se essa marca não estiver definida, indica que um aplicativo pode impor a licença a ser adquirida ou já estar presente no computador cliente, antes de configurar o grafo de mídia. Não mais de um elemento DECRYPTORSETUP pode ser incluído no elemento DATA .

3.5. v4.1.0.0

O PlayReady Header v4.1.0.0 foi introduzido com o PlayReady versão 2.0 em setembro de 2011 para dar suporte a transmissões lineares ao vivo com licenças folha escalonáveis inseridas no fluxo. Esse tipo de fluxo exige que os clientes associem uma licença raiz escalonável sem conhecimento da chave de criptografia de conteúdo que será usada no descriptografia.

3.5.1. Diferenças com outras versões

Os SDKs do PlayReady 2.0 e os clientes posteriores podem processar as versões v4.0 e v4.1 PlayReady Header. Os SDKs anteriores do PlayReady retornam um erro de "versão sem suporte" quando fornecidos com cabeçalhos v4.1.

O formato de cabeçalho PlayReady v.4.1.0.0 tem as seguintes alterações em comparação com v4.0.0.0:

  • O atributo de versão do elemento WRMHEADER é definido como a cadeia de caracteres "4.1.0.0".
  • O elemento DATA contém um elemento DECRYPTORSETUP opcional.
  • O elemento KID está localizado dentro do elemento PROTECTINFO e é opcional em vez de necessário.
  • O elemento KID contém os atributos ALGID (obrigatório), CHECKSUM (opcional) e VALUE (obrigatório).
  • O elemento KEYLEN foi removido. O atributo KEYLEN foi usado anteriormente para desambiguar licenças de coquetel com chaves de comprimento diferentes. O cabeçalho v4.1 quebrará a capacidade de dar suporte a qualquer coisa, menos chaves de coquetel de 8 bytes. Se você usar teclas de coquetel que não são de 8 bytes, você deve usar cabeçalhos v4.0.
  • Os elementos ALGID e CHECKSUM foram removidos desde que seus dados estão contidos nos atributos do elemento KID .

3.5.2. Formatar

O Cabeçalho PlayReady v4.1.0.0 tem a seguinte sintaxe:

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

As marcas são descritas abaixo.

Nome da marca Obrigatório Descrição
WRMHEADER Sim Elemento mais externo do objeto de cabeçalho. Ele pode conter um elemento DATA e deve conter um atributo de versão. A versão do cabeçalho é "4.1.0.0". Sempre que a Microsoft define novas marcas ou atributos obrigatórios, um novo número de versão é associado a essas marcas ou atributos. Se a versão for maior do que a para a qual o código do cliente foi gravado, o código do cliente deverá falhar, pois isso implica que o cabeçalho contém marcas obrigatórias que o cliente não entende. Se a versão for menor ou igual à que o código do cliente foi escrito, o código do cliente poderá ignorar com segurança quaisquer marcas ou atributos que ele não entenda.
DATA No Elemento contêiner para dados de cabeçalho, incluindo marcas de terceiros. Não mais de um elemento DATA pode ser incluído no elemento WRMHEADER .
PROTECTINFO No Especifica zero ou um elemento KID que pode ser usado para criar objetos de descriptografia para o conteúdo associado. Não mais de um elemento PROTECTINFO pode ser incluído no elemento DATA .
GAROTO No Contém todos os dados principais de uma determinada licença. Um ou zero elementos KID podem existir no nó PROTECTINFO . O elemento KID contém os seguintes atributos.

VALOR: Obrigatório. Contém um valor GUID de ID de chave codificada em base64. Observe que esse valor guid (DWORD, WORD, WORD, matriz de 8 BYTE) deve ser uma ordem de bytes pouco endian.

ALGID: Obrigatório. Especifica o algoritmo de criptografia. Deve ser definido como: "AESCTR" ou "COCKTAIL"

CHECKSUM: Opcional. Contém uma soma de verificação calculada usando o VALOR KID e a chave de conteúdo. Consulte a seção Algoritmo de Soma de Verificação de Chave deste documento para obter detalhes.

Se esse nó existir no WRMHeader XML, seu valor de dados deverá estar vazio.
LA_URL No Contém a URL do serviço Web de aquisição de licença. Somente URLs absolutas são permitidas. Não mais de um elemento LA_URL pode ser incluído no elemento DATA .

Se esse nó existir no WRMHeader XML, seu valor de dados não deverá estar vazio.
LUI_URL No Contém a URL de uma página da Web de aquisição de licença não silenciosa. Somente URLs absolutas são permitidas. Não mais de um elemento LUI_URL pode ser incluído no elemento DATA .

Se esse nó existir no WRMHeader XML, seu valor de dados não deverá estar vazio.
DS_ID No ID do serviço de domínio. Não mais de um elemento DS_ID pode ser incluído no elemento DATA .

Se esse nó existir no WRMHeader XML, seu valor de dados não deverá estar vazio.
CUSTOMATTRIBUTES No O autor do conteúdo pode adicionar XML arbitrário dentro desse elemento. O código da Microsoft não atua em nenhum dado contido nesse elemento. Somente até um elemento CUSTOMATTRIBUTES pode ser incluído no elemento DATA .

Se esse nó existir no WRMHeader XML, seu valor de dados não deverá estar vazio.
DECRYPTORSETUP Não Essa marca pode conter apenas o valor "ONDEMAND". Quando essa marca presente no nó DATA e seu valor é definido como "ONDEMAND", indica a um aplicativo que ele não deve esperar que a cadeia de licenças completa para o conteúdo esteja disponível para aquisição ou já esteja presente no computador cliente, antes de configurar o grafo de mídia. Se essa marca não estiver definida, indica que um aplicativo pode impor a licença a ser adquirida ou já estar presente no computador cliente, antes de configurar o grafo de mídia. Somente até um elemento DECRYPTORSETUP pode ser incluído no elemento DATA .

Anotações para v4.1:

  • Todas as marcas XML e atributos no Cabeçalho PlayReady são definidos pela Microsoft. A única exceção é o conteúdo do elemento CUSTOMATTRIBUTES . Os desenvolvedores de aplicativos de PC PlayReady não devem adicionar marcas personalizadas fora do elemento CUSTOMATTRIBUTES .
  • O cabeçalho PlayReady deve respeitar as especificações XML canônicas do W3C v1.1.
  • O Cabeçalho PlayReady não contém uma marca de nível ?XML superior que é necessária em XML bem formado.
  • É recomendável que o tamanho desse campo não exceda 1 KB.

3.6. v4.0.0.0

O PlayReady Header v4.0.0.0 foi introduzido com o PlayReady versão 1.0 em 2008 e permite que uma única chave AESCTR dê suporte a conteúdo criptografado do AES ou uma chave COCKTAIL para dar suporte ao conteúdo criptografado WMDRM.

3.6.1. Exemplos

Cabeçalho 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 em Base64 que contém um cabeçalho PlayReady 4.0.0.0

XAMAAAEAAQBSAzwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4AcQA1AEgAZwBDAFQAagA0ADAAawBHAGUATgBWAGgAVABIADkARwBlAHgAdwA9AD0APAAvAEsASQBEAD4APABDAEgARQBDAEsAUwBVAE0APgB3ACsATwBaAFYAcgA4AHYAegByAFEAPQA8AC8AQwBIAEUAQwBLAFMAVQBNAD4APABMAEEAXwBVAFIATAA+ AGgAdAB0AHAAcwA6AC8ALwBwAHIAbwBmAGYAaQBjAGkAYQBsAHMAaQB0AGUALgBrAGUAeQBkAGUAbABpAHYAZQByAHkALgBtAGUAZABpAGEAcwBlAHIAdgBpAGMAZQBzAC4AdwBpAG4AZABvAHcAcwAuAG4AZQB0AC8AUABsAGEAeQBSAGUAYQBkAHkALwA8AC8ATABBAF8AVQBSAEwAPgA8AEMAVQBTAFQATwBNAEEAVABUAFIASQBCAFUAVABFAFMAPgA8AEkASQBTAF8ARABSAE0AXwBWAEUAUgBTAEkATwBOAD4AOAAuADAALgAxADcAMAA1AC4AMQA5ADwALwBJAEkAUwBfAEQAUgBNAF8AVgBFAFIAUwBJAE8ATgA+ ADwALwBDAFUAUwBUAE8ATQBBAFQAVABSAEkAQgBVAFQARQBTAD4APAAvAEQAQQBUAEEAPgA8AC8AVwBSAE0ASABFAEEARABFAFIAPgA=

3.6.2. Formatar

O Cabeçalho PlayReady v4.0.0.0 tem a seguinte sintaxe:

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

A tabela a seguir descreve as marcas diferentes.

Nome da marca Obrigatório Descrição
WRMHEADER Yes Elemento outermost do objeto header. Ele pode conter um elemento DATA e um atributo de versão. A versão do cabeçalho é "4.0.0.0".

Semântica para empacotador:toda vez que
a Microsoft define novas marcas ou atributos obrigatórios, um novo número de versão é associado a essas marcas ou atributos. A versão do Cabeçalho PlayReady deve ser definida como a mais alta das versões das marcas e atributos obrigatórios presentes no cabeçalho.

Semântica para Cliente:
se a versão for maior do que a para a qual o código do cliente foi gravado, o código do cliente deve falhar porque implica que o cabeçalho contém marcas obrigatórias que o cliente não entende. Se a versão for menor ou igual à que o código do cliente foi gravado, o código do cliente poderá ignorar com segurança quaisquer marcas ou atributos que não compreende.
DATA Sim Elemento contêiner para dados de cabeçalho, incluindo marcas de terceiros.
PROTECTINFO Sim Especifica o tipo de criptografia usando os elementos filho KEYLEN e ALGID .
KEYLEN Sim Especifica o tamanho da chave de conteúdo. Deve ser definido como 16 se ALGID estiver definido como "AESCTR" e 7 se ALGID estiver definido como "COCKTAIL".
ALGID Sim Especifica o algoritmo de criptografia. Deve ser definido como o seguinte valor:

AESCTR: corresponde ao algoritmo AES no modo de contador.

COCKTAIL: Corresponde ao algoritmo Cocktail.
GAROTO Sim Contém um valor GUID de ID de chave codificado em base64. Observe que esse valor GUID (DWORD, WORD, WORD, matriz 8 BYTE) deve ser uma ordem de byte endian pouco.
CHECKSUM No Contém soma de verificação calculada usando o VALOR KID e a chave de conteúdo. Consulte a seção Algoritmo de Soma de Verificação de Chave para obter detalhes.

As versões anteriores do PlayReady trataram esse campo conforme necessário, portanto, ele deve ser incluído em qualquer cabeçalho que será consumido por uma versão anterior do PlayReady.
LA_URL Não Contém a URL do serviço Web de aquisição de licença. Somente URLs absolutas são permitidas.
LUI_URL No Contém a URL de uma página da Web de aquisição de licença não silenciosa. Somente URLs absolutas são permitidas.
DS_ID No ID do serviço para o serviço de domínio.
CUSTOMATTRIBUTES Não O autor do conteúdo pode adicionar XML arbitrário dentro desse elemento. O código da Microsoft não atua em nenhum dado contido nesse elemento.

Anotações para v4.0:

  • Todas as marcas XML e atributos no Cabeçalho PlayReady são definidos pela Microsoft. A única exceção é o conteúdo do elemento CUSTOMATTRIBUTES . Os desenvolvedores de aplicativos de PC PlayReady não devem adicionar marcas personalizadas fora do elemento CUSTOMATTRIBUTES , pois isso pode entrar em conflito com marcas futuras que a Microsoft define.
  • A ordem dos elementos filho dentro de um elemento de contêiner não importa.
  • Observe que o Cabeçalho PlayReady não contém uma marca de nível ?XML superior necessária em XML bem formado.
  • É recomendável que o tamanho desse campo não exceda 1 KB.
  • CHECKSUM é exigido pelo SDK do PlayReady Server até a versão 1.2. Desde a versão 1.5, o SDK do PlayReady Server trata o CHECKSUM como opcional. O PlayReady Porting Kit 1.2 pronto para uso requer o CHECKSUM. O PlayReady Porting Kit 2.0 trata o CHECKSUM como opcional.

4. Els (Repositório de Licenças Incorporadas)

É uma boa prática adicionar um Repositório de Licenças Inserido vazio ao Objeto PlayReady nas seguintes condições:

  • O objeto PlayReady deve ser inserido em um arquivo de conteúdo.
  • O conteúdo pode ser usado em um contexto de domínios PlayReady com licenças inseridas.

Isso permite que um cliente PlayReady insira ainda mais uma licença associada ao domínio no Objeto PlayReady simplesmente preenchendo o repositório de licenças inserido existente e salva o esforço de ter que redirecionar o arquivo inteiro com um novo objeto PlayReady de um tamanho maior do que o da inicial.

Observação

Não inclua um Repositório de Licenças Inserido vazio em um objeto PlayReady, destinado a ser inserido como uma cadeia de caracteres base-64 em um manifesto do cliente smooth streaming.

Observação

O tamanho recomendado é 10KB.

5. Algoritmo de soma de verificação de chave

O algoritmo de soma de verificação no Cabeçalho PlayReady destina-se a proteger contra chaves incompatíveis. Nos primeiros dias do DRM, as músicas eram criptografadas com chaves rotuladas incorretamente. Isso resultou em ruído branco sendo reproduzido quando as músicas foram descriptografadas. E se as músicas fossem tocadas alto o suficiente, o equipamento de reprodução foi destruído. Com a soma de verificação, a chave de conteúdo pode ser verificada como a chave usada para criptografar o arquivo. O algoritmo funciona da seguinte maneira:

Para um valor ALGID definido como "AESCBC", não há nenhum algoritmo de soma de verificação de chave definido. O atributo CHECKSUM deve ser omitido.

Para um valor ALGID definido como "AESCTR", a ID de chave de 16 bytes é criptografada com uma chave de conteúdo AES de 16 bytes usando o modo BCE. Os primeiros 8 bytes do buffer são extraídos e codificados em base64.

Para um valor ALGID definido como "COCKTAIL", execute as seguintes etapas:

  1. Um buffer de 21 bytes é criado.

  2. A chave de conteúdo é colocada no buffer e o restante do buffer é preenchido com zeros.

  3. Para cinco iterações:

    a. buffer = SHA-1 (buffer).

  4. Os primeiros 7 bytes do buffer são extraídos e codificados em base64.

  5. Depois que essas etapas são executadas, os bytes codificados em base64 são usados como a soma de verificação.

6. CUSTOMATTRIBUTES

Um provedor de serviços pode adicionar XML proprietário dentro do elemento CUSTOMATTRIBUTES do Cabeçalho PlayReady. Todas as marcas usadas dentro do elemento CUSTOMATTRIBUTES têm a garantia de não entrar em conflito com marcas futuras definidas pela Microsoft.

O código da Microsoft não atua em nenhum XML dentro desse elemento. O back-end do provedor de serviços ou o código do lado do cliente são os únicos que normalmente interpretam o valor desse elemento. Por exemplo, digamos que um serviço de rótulo branco represente os serviços de front-end AAA, BBB, CCC. Esse serviço pode criptografar sua biblioteca de conteúdo apenas uma vez (já que essa é uma operação cara), mas quando ele atende conteúdo a um usuário final, ele pode definir CUSTOMATTRIBUTES como o nome do serviço de front-end específico ao qual o usuário final assina. Quando o usuário final solicita uma licença para esse conteúdo, isso permite que o serviço de rótulo branco determine em qual serviço de front-end o usuário final assina, para que ele possa emitir uma licença diferente.

O tamanho desse campo não deve exceder 1 quilobyte (KB).