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 o PlayReady e a criptografia de conteúdo, consulte Criptografia de conteúdo do PlayReady. Consulte Glossário para obter termos e definições de criptografia.

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

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

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

Modos comuns de criptografia

O ISO/IEC padrão ISO/IEC 23001-7 define quatro modos de Criptografia Comum.

Modos de criptografia comuns

Os clientes PlayReady a partir da versão 4.0 dão suporte a chaves AES CBC, o que permite suporte para o modo de Criptografia Comum 'cbcs', além de chaves CTR do AES para o modo de Criptografia Comum 'cenc'. Antes da versão 4.0, a CTR do AES era o modo que tinha suporte principalmente dos Clientes PlayReady, o 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 do PlayReady, mas não têm suporte.

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

Todos os clientes criados com base ou após o PlayReady PK versão 4.0 podem dar suporte a chaves CBC. No entanto, o suporte é opcional para clientes e sinalizado para servidores de licença por meio de uma propriedade adicional no protocolo de aquisição de licença.

Versão COCKTAIL 'cenc' 'cbcs'
PlayReady Client 1.0 com suporte com suporte sem suporte
PlayReady Client 2.0 com suporte com suporte sem suporte
PlayReady Client 2.5 com suporte com suporte sem suporte
PlayReady Client 3.0 sem suporte com suporte sem suporte
PlayReady Client 3.3 sem suporte com suporte sem suporte
PlayReady Client 4.0 sem suporte com suporte com suporte

Observação

  • Todas as unidades do Xbox One atualizadas com a versão 1709 ou superior dão suporte a 'cbcs'.
  • Todos os Servidores de Licença do PlayReady a partir da versão 4.0 dão suporte à 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 controle de versão. 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
PlayReady Client 4.0
(consulte a observação 4)
PlayReady Client 3.3
(consulte a observação 3)
PlayReady Client 3.0
(consulte a observação 3)
PlayReady Client 2.5
(consulte a observação 2)
PlayReady Client 2.0
(consulte a observação 2)
PlayReady Client 1.0
(consulte a observação 1)

Observação

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

Veja a seguir 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 de 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, em que a solicitação de licença é baseada no Cabeçalho PlayReady e o ALGID é especificado.

Fluxo de conteúdo com o ALGID especificado

ALGIDs ausentes

A partir do Cabeçalho PlayReady versão 4.3, o ALGID pode estar ausente. 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, em que 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 criptografia. Por exemplo, se ALGID="AESCTR", todas as teclas do cabeçalho serão usadas no modo CTR. Quando ALGID="AESCBC", todas as chaves para esse cabeçalho são usadas no modo CBC.
  • Quando o ALGID está ausente, todas as chaves para esse cabeçalho são usadas no Modo de Contador ou encadeamento de blocos de criptografia, mas o valor não é inserido no cabeçalho.
  • Fazer uma solicitação de aquisição de licença com um Cabeçalho PlayReady v4.3 para um Servidor de Licença abaixo da v4.0 gerará uma exceção.
  • Uma resposta de licença pode incluir uma ou muitas licenças, em que cada licença contém uma chave e qualquer número de políticas.

Por que o valor de ALGID está ausente

Microsoft recomenda que os criptografadores sempre incluam o mesmo valor de ALGID no Cabeçalho PlayReady que eles 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 criptografador sabe qual modo AES ele usou para criptografia; Assim, ele inclui essas informações na propriedade ALGID do Cabeçalho PlayReady. Os clientes iniciam solicitações de licença com base em cabeçalhos PlayReady analisados de conteúdo real, portanto, o valor de ALGID está 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 de 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 EME HTML5.

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 de ALGID na solicitação de licença refletirá o valor encontrado no cabeçalho porque o desafio de aquisição de licença incluirá uma cópia do Cabeçalho PlayReady. Nesse caso:

  • Para todos os Cabeçalhos PlayReady v4.2 ou inferiores, o valor de ALGID é necessário e deve ser válido.
  • Para Cabeçalhos PlayReady v4.3 ou superiores, o valor de ALGID pode estar presente e válido ou ausente.

Como o SDK do Servidor lida com um ALGID ausente

Todas as licenças entregues por meio de uma resposta de licença DEVEM incluir um valor de ALGID válido.

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

IVs (Vetores de Inicialização)

No PlayReady versões 3.3 e anteriores, há suporte apenas para IVs de 64 bits (IVs de 8 bytes) no modo CTR. A partir do PlayReady versão 4.0, há suporte para IVs de 64 e 128 bits (IVs de 8 bytes e 16 bytes) nos modos CTR e CBC.

Exemplos:

  • Agora há suporte para fluxos compatíveis com HLS que usam IVs de 128 bits no modo CBC.
  • Agora há suporte para alguns fluxos compatíveis com HbbTV que usam IVs de 128 bits no modo CTR.

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 deverá 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 do Cliente de entrada é Windows e O SL2000 gera uma exceção. Isso ocorre porque os Clientes Windows dão suporte a CBC apenas em unidades SL3000. Pode ser possível entregar uma licença com uma chave CBC para um cliente SL2000, no entanto, se esse cliente for o PlayReady versão 4.0 mínimo e declarar suporte para o modo CBC.
  • Gerar uma licença com uma chave CBC quando o Certificado do 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 quando a solicitação de licença de entrada não indicar suporte para AES CBC 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 motivos funcionais, um cliente que adquiriu uma licença para {KID, Ck, AESCTR} e para {KID, Ck, AESCBC} não funcionaria.
  • Por motivos de robustez, um invasor que tem acesso ao mesmo conteúdo criptografado com a mesma chave nos modos CBC e CTR poderia descriptografar conteúdo com mais facilidade sem autorização.