Partilhar via


Modos de criptografia de conteúdo PlayReady

Este tópico fornece uma visão geral sobre os modos de criptografia de conteúdo em sistemas PlayReady. Para obter uma visão geral sobre PlayReady e criptografia de conteúdo, consulte PlayReady Content Encryption. Consulte Glossário para termos e definições de criptografia.

A versão 1.0 do PlayReady introduziu o modo de criptografia de conteúdo CTR AES-128, além do modo de criptografia COCKTAIL específico da Microsoft usado anteriormente no WMDRM (Windows Media Digital Rights Management). O modo de criptografia de conteúdo CTR AES-128 usa chaves AES, com um comprimento de 128 bits usado nos arquivos de conteúdo no Modo Contador (CTR).

A partir da versão 4.0, os sistemas PlayReady suportam chaves AES de 128 bits no modo de contador (CTR) e no modo de encadeamento de blocos de cifra (CBC).

Essa alteração garante que os serviços que usam o PlayReady possam aproveitar totalmente um fluxo e formato de arquivo exclusivos em todos os dispositivos. Além disso, a Microsoft suporta o padrão CMAF (Common Media Application Format), conforme definido na ISO/IEC FDIS 23000-19.

Modos de encriptação comuns

A norma ISO ISO/IEC 23001-7 define quatro modos comuns de encriptação.

Modos de criptografia comuns

Os clientes PlayReady a partir da versão 4.0 suportam chaves CBC AES, o que permite o suporte para o modo de criptografia comum 'cbcs', além de chaves CTR AES para o modo de criptografia comum 'cenc'. Antes da versão 4.0, AES CTR era o modo que tinha sido suportado principalmente por PlayReady Clients, que permite o suporte para o modo de criptografia comum 'cenc'. Observe que os modos de criptografia comum 'cens' e 'cbc1' são permitidos e tecnicamente factíveis em um ecossistema PlayReady, mas não são suportados.

Suporte para o esquema de cifragem 'cbcs' AES-CBC

Todos os clientes criados em ou após PlayReady PK versão 4.0 podem suportar chaves CBC. O suporte é opcional para clientes, todavia, e sinalizado aos Servidores de Licença através de uma propriedade adicional no protocolo de obtenção de licença.

Versão COQUETEL «CENC» cbcs
Cliente PlayReady 1.0 suportado suportado não suportado
Cliente PlayReady 2.0 suportado suportado não suportado
Cliente PlayReady 2.5 suportado suportado não suportado
Cliente PlayReady 3.0 não suportado suportado não suportado
Cliente PlayReady 3.3 não suportado suportado não suportado
Cliente PlayReady 4.0 não suportado suportado suportado

Observação

  • Todas as unidades Xbox One atualizadas com a versão 1709 ou superior suportam 'cbcs'.
  • Todos os servidores de licença PlayReady a partir da versão 4.0 suportam a emissão de licenças com chaves CBC.

Sinalizando o ALGID no cabeçalho PlayReady

O cabeçalho PlayReady é um documento XML geralmente incluído no cabeçalho de um arquivo de conteúdo ou fluxo. Ele descreve os atributos PlayReady necessários para um cliente descriptografar esse conteúdo. O cabeçalho PlayReady tem sua própria especificação e versionamento. Para obter mais informações, consulte Especificação do cabeçalho PlayReady.

Versão Cabeçalho PlayReady 4.3 Cabeçalho PlayReady 4.2 Cabeçalho PlayReady 4.1 Cabeçalho PlayReady 4.0
Cliente PlayReady 4.0
(ver nota 4)
Cliente PlayReady 3.3
(ver nota 3)
Cliente PlayReady 3.0
(ver nota 3)
Cliente PlayReady 2.5
(ver nota 2)
Cliente PlayReady 2.0
(ver nota 2)
Cliente PlayReady 1.0
(ver nota 1)

Observação

  • (4) A versão Xbox One 1709 ou superior é um Cliente PlayReady 4.X.
  • (3) 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 PlayReady 3.X.
  • (2) O Silverlight e o 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.
  • (1) A maioria dos dispositivos não Windows (por exemplo, Smart TVs) lançados entre 2008 e 2011 são clientes PlayReady 1.X.

Segue-se um exemplo de um cabeçalho 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>

O ALGID (identificador de algoritmo) é uma propriedade do elemento KID e especifica o algoritmo de criptografia que foi usado para criptografar o conteúdo. A partir do PlayReady Header versão 4.2, o ALGID é necessário e deve ser definido como "AESCTR" ou "COCKTAIL". No entanto, a partir da versão 4.3, o ALGID também pode ser definido com o valor "AESCBC". O exemplo a seguir mostra um cabeçalho PlayReady versão 4.3 com os valores ALGID definidos como "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>

A figura a seguir mostra um fluxo de conteúdo, onde a solicitação de licença é baseada no cabeçalho PlayReady e o ALGID é especificado.

Fluxo de conteúdo com ALGID especificado

ALGIDs em falta

A partir do PlayReady Header versão 4.3, o ALGID pode estar faltando. O exemplo a seguir mostra um cabeçalho PlayReady versão 4.3 com valores ALGID ausentes.

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

A figura a seguir mostra um fluxo de conteúdo, onde a solicitação de licença está usando o módulo CDMi e o ALGID está ausente.

Fluxo de conteúdo com ALGID ausente

Observação

Cada cabeçalho PlayReady pode ter:

  • Apenas um tipo de encriptação. Por exemplo, se ALGID="AESCTR", todas as teclas para o cabeçalho são usadas no modo CTR. Quando ALGID="AESCBC", todas as teclas para este cabeçalho são usadas no modo CBC.
  • Quando o ALGID está ausente, todas as teclas para esse cabeçalho são usadas no Modo Contador ou Encadeamento de Blocos de Cifra, mas o valor não é inserido no cabeçalho.
  • Fazer um pedido de aquisição de licença com um cabeçalho PlayReady v4.3 para um servidor de licenças abaixo da v4.0 lançará uma exceção.
  • Uma resposta de licença pode incluir uma ou várias licenças, onde cada licença contém uma chave e qualquer número de políticas.

Por que o valor ALGID está faltando

A Microsoft recomenda que os encriptadores incluam sempre o mesmo valor ALGID no cabeçalho PlayReady que incluíram quando processaram o conteúdo.

Em um cenário padrão, o criptografador criptografa o conteúdo e gera o cabeçalho PlayReady no conteúdo. O encriptador sabe qual o modo AES que utilizou para encriptação; assim, ele inclui essas informações na propriedade ALGID do cabeçalho PlayReady. Os clientes iniciam solicitações de licença com base em "PlayReady Headers" extraídos de conteúdo real, garantindo que o valor ALGID esteja presente e válido.

Em alguns cenários, o cliente inicia uma solicitação de licença com base em um valor KID simples (um GUID de 128 bits). Nesse caso, o valor ALGID no cabeçalho PlayReady inserido na solicitação de licença estará ausente (também conhecido como não especificado). Um exemplo é quando o cliente faz uma solicitação de licença usando APIs HTML5 EME.

Como o Cliente lida com um ALGID ausente

Se o cliente iniciar uma solicitação de licença com base em um cabeçalho PlayReady de entrada, o valor ALGID na solicitação de licença refletirá o valor encontrado no cabeçalho porque o desafio de aquisição de licença inclui uma cópia do cabeçalho PlayReady. Neste caso:

  • Para todos os cabeçalhos PlayReady v4.2 ou inferior, o valor ALGID é necessário e deve ser válido.
  • Para PlayReady Headers v4.3 ou superior, o valor ALGID pode estar presente e válido, ou ausente.

Como o SDK do servidor lida com um ALGID ausente

Todas as licenças entregues através de uma resposta de licença DEVEM incluir um valor ALGID válido.

Se o ALGID não estiver especificado na solicitação de licença de entrada, o Servidor de Licenças deverá obter essas informações do back-end do serviço e colocar o valor correto na resposta da licença.

Vetores de inicialização (IVs)

Nas versões 3.3 e anteriores do PlayReady, apenas IVs de 64 bits (IVs de 8 bytes) são suportados no modo CTR. A partir da versão 4.0 do PlayReady, os IVs de 64 bits e 128 bits (IVs de 8 bytes e 16 bytes) são suportados nos modos CTR e CBC.

Exemplos:

  • Fluxos compatíveis com HLS que usam frequentemente IVs de 128 bits no modo CBC são agora suportados.
  • Alguns fluxos compatíveis com HbbTV que usam IVs de 128 bits no modo CTR agora são suportados.

Limitações

  • Um cabeçalho PlayReady deve usar apenas um valor ALGID para todos os elementos KID. Em outras palavras, todas as chaves usadas para criptografar as diferentes faixas e qualidades de um ativo devem ser AES CTR ou AES CBC. Se o ALGID estiver ausente em qualquer elemento KID, ele deve estar ausente de todos os elementos KID.
  • Antes do PlayReady versão 4.4, gerar uma licença com uma chave CBC quando o certificado de cliente de entrada é Windows e SL2000 gera uma exceção. Isso ocorre porque os clientes Windows suportam CBC apenas em unidades SL3000. Pode ser possível entregar uma licença com uma chave CBC para um cliente SL2000; no entanto, isso ocorre se este cliente for, pelo menos, a versão 4.0 do PlayReady e declarar suporte para o modo CBC.
  • Gerar uma licença com uma chave CBC quando o Certificado de Cliente de entrada for um dispositivo que usa uma versão do Kit de Portabilidade anterior à 4.0 gerará uma exceção.
  • Gerar uma licença com uma chave CBC, caso a solicitação de licença recebida não indique suporte para AES CBC, irá gerar uma exceção.

Importante

Os serviços não devem criptografar uma única parte do conteúdo no modo CTR e no modo CBC usando o mesmo {KID, Ck}.

  • Por razões funcionais, um cliente que adquirisse uma licença para {KID, Ck, AESCTR} e para {KID, Ck, AESCBC} não funcionaria.
  • Por razões de robustez, um invasor que tenha acesso ao mesmo conteúdo criptografado com a mesma chave nos modos CBC e CTR pode descriptografar conteúdo mais facilmente sem autorização.