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