DRM de hardware
Este tópico fornece uma visão geral de como adicionar o DRM (gerenciamento de direitos digitais) baseado em hardware do PlayReady ao seu aplicativo UWP (Plataforma Universal do Windows).
Observação
O DRM do PlayReady baseado em hardware tem suporte em vários dispositivos, incluindo dispositivos Windows e não Windows, como aparelhos de TV, telefones e tablets. Para que um dispositivo Windows dê suporte ao DRM de Hardware do PlayReady, ele deve estar executando Windows 10 e ter uma configuração de hardware com suporte.
Cada vez mais, os provedores de conteúdo estão se movendo em direção a proteções baseadas em hardware para conceder permissão para reproduzir conteúdo completo de alto valor em aplicativos. O suporte robusto para uma implementação de hardware do núcleo criptográfico foi adicionado ao PlayReady para atender a essa necessidade. Esse suporte permite a reprodução segura de conteúdo de alta definição (1080p) e ultra-alta definição (UHD) em várias plataformas de dispositivos. O material de chave (incluindo chaves privadas, chaves de conteúdo e qualquer outro material de chave usado para derivar ou desbloquear essas chaves) e amostras de vídeo compactadas e descompactadas descriptografadas são protegidas aproveitando a segurança do hardware.
Implementação do TEE do Windows
Este tópico fornece uma breve visão geral de como o Windows 10 implementa o TEE (ambiente de execução confiável).
Os detalhes da implementação do Windows TEE estão fora do escopo deste documento. No entanto, uma breve discussão sobre a diferença entre a porta TEE do kit de portabilidade padrão e a porta do Windows será benéfica. Windows implementa a camada de proxy OEM e transfere as chamadas de funções PRITEE serializadas para um driver de modo de usuário no subsistema Windows Media Foundation. Isso acabará sendo roteado para o driver Windows TrEE (Trusted Execution Environment) ou para o driver gráfico do OEM. Os detalhes de qualquer uma dessas abordagens estão fora do escopo deste documento. O diagrama a seguir mostra a interação geral do componente para a porta do Windows. Se você quiser desenvolver uma implementação do Windows PlayReady TEE, entre em contato com WMLA@Microsoft.como .
Considerações sobre o uso de DRM de hardware
Este tópico fornece uma breve lista de itens que devem ser considerados ao desenvolver aplicativos projetados para usar DRM de hardware. Conforme explicado em DRM do PlayReady, com o HWDRM do PlayReady para Windows 10, todas as proteções de saída são impostas de dentro da implementação do TEE do Windows, o que tem algumas consequências nos comportamentos de proteção de saída:
- Suporte para OPL (nível de proteção de saída) para vídeo digital não compactado 270: o HWDRM do PlayReady para Windows 10 não dá suporte à resolução para baixo e imporá que o HDCP esteja envolvido. Recomendamos que o conteúdo de alta definição para HWDRM tenha um OPL maior que 270 (embora não seja obrigatório). Além disso, recomendamos que você defina a restrição de tipo HDCP na licença (HDCP versão 2.2 no Windows 10).
- Ao contrário do DRM de software (SWDRM), as proteções de saída são aplicadas em todos os monitores com base no monitor menos capaz. Por exemplo, se o usuário tiver dois monitores conectados em que um dos monitores dá suporte a HDCP e o outro não, a reprodução falhará se a licença exigir HDCP, mesmo que o conteúdo esteja sendo renderizado apenas no monitor que dá suporte a HDCP. No DRM de software, o conteúdo seria reproduzido desde que estivesse sendo renderizado apenas no monitor compatível com HDCP.
- Não há garantia de que o HWDRM seja usado pelo cliente e seguro, a menos que as seguintes condições sejam atendidas pelas chaves de conteúdo e licenças:
- A licença usada para a chave de conteúdo de vídeo deve ter uma propriedade de nível de segurança mínimo de 3000.
- O áudio deve ser criptografado para uma chave de conteúdo diferente do vídeo, e a licença usada para o áudio deve ter uma propriedade de nível de segurança mínima de 2000. Alternativamente, o áudio pode ser deixado em claro.
Além disso, você deve levar em consideração os seguintes itens ao usar o HWDRM:
- Não há suporte para o PMP (Protected Media Process).
- O Windows Media Video (também conhecido como VC-1) não é suportado (consulte Substituir DRM de hardware).
- Não há suporte para várias GPUs (unidades de processamento gráfico) para licenças persistentes.
Para lidar com licenças persistentes em computadores com várias GPUs, considere o seguinte cenário:
- Um cliente compra uma nova máquina com uma placa gráfica integrada.
- O cliente usa um aplicativo que adquire licenças persistentes ao usar o DRM de hardware.
- A licença persistente agora está vinculada às chaves de hardware da placa gráfica.
- O cliente então instala uma nova placa gráfica.
- Todas as licenças no armazenamento de dados com hash (HDS) estão vinculadas à placa de vídeo integrada, mas o cliente agora deseja reproduzir conteúdo protegido usando a placa gráfica recém-instalada.
Para evitar que a reprodução falhe porque as licenças não podem ser descriptografadas pelo hardware, o PlayReady usa um HDS separado para cada placa gráfica encontrada. Isso fará com que o PlayReady tente a aquisição de licença para uma parte do conteúdo em que o PlayReady normalmente já teria uma licença (ou seja, no caso de DRM de software ou em qualquer caso sem uma alteração de hardware, o PlayReady não precisaria readquirir uma licença). Portanto, se o aplicativo adquirir uma licença persistente ao usar o DRM de hardware, seu aplicativo precisará ser capaz de lidar com o caso em que essa licença será efetivamente "perdida" se o usuário final instalar (ou desinstalar) uma placa gráfica. Como esse não é um cenário comum, você pode decidir lidar com as chamadas de suporte quando o conteúdo não for mais reproduzido após uma alteração de hardware, em vez de descobrir como lidar com uma alteração de hardware no código cliente/servidor.
Substituir DRM de hardware
Esta seção descreve como substituir o DRM de hardware (HWDRM) se o conteúdo a ser reproduzido não der suporte ao DRM de hardware.
Por padrão, o DRM de hardware é usado se o sistema der suporte a ele. No entanto, alguns conteúdos não são suportados no DRM de hardware. Um exemplo disso é o conteúdo do coquetel. Outro exemplo é qualquer conteúdo que use um codec de vídeo diferente de H.264 e HEVC. Outro exemplo é o conteúdo HEVC, pois alguns DRMs de hardware suportam HEVC e outros não. Portanto, se você deseja reproduzir um conteúdo e o DRM de hardware não o suporta no sistema em questão, convém desativar o DRM de hardware.
O exemplo a seguir mostra como recusar o DRM de hardware. Você só precisa fazer isso antes de mudar. Além disso, verifique se você não tem nenhum objeto PlayReady na memória, caso contrário, o comportamento será indefinido.
var applicationData = Windows.Storage.ApplicationData.current;
var localSettings = applicationData.localSettings.createContainer("PlayReady", Windows.Storage.ApplicationDataCreateDisposition.always);
localSettings.values["SoftwareOverride"] = 1;
Para voltar ao DRM de hardware, defina o valor SoftwareOverride como 0.
Para cada reprodução de mídia, você precisa definir MediaProtectionManager como:
mediaProtectionManager.properties["Windows.Media.Protection.UseSoftwareProtectionLayer"] = true;
A melhor maneira de saber se você está no DRM de hardware ou DRM de software é olhar para C:\Users\<username>\AppData\Local\Packages\<application name>\LocalCache\PlayReady\*
- Se houver um arquivo mspr.hds, você está no DRM do software.
- Se você tiver outro arquivo *.hds, você está no DRM de hardware.
- Você pode excluir toda a pasta PlayReady e repetir o teste também.
Detecte o tipo de DRM de hardware
Esta seção descreve como detectar que tipo de DRM de hardware é suportado no sistema.
Você pode usar o método PlayReadyStatics.CheckSupportedHardware para determinar se o sistema dá suporte a um recurso DRM de hardware específico. Por exemplo:
bool isFeatureSupported = PlayReadyStatics.CheckSupportedHardware(PlayReadyHardwareDRMFeatures.HEVC);
A enumeração PlayReadyHardwareDRMFeatures contém a lista válida de valores de recursos DRM de hardware que podem ser consultados. Para determinar se há suporte para DRM de hardware, use o membro HardwareDRM na consulta. Para determinar se o hardware dá suporte ao codec HEVC (High Efficiency Video Coding)/H.265, use o membro HEVC na consulta.
Você também pode usar a propriedade PlayReadyStatics.PlayReadyCertificateSecurityLevel para obter o nível de segurança do certificado do cliente para determinar se há suporte para DRM de hardware. A menos que o nível de segurança do certificado retornado seja maior ou igual a 3000, o cliente não é individualizado ou provisionado (nesse caso, essa propriedade retorna 0) ou o DRM de hardware não está em uso (nesse caso, essa propriedade retorna um valor menor que 3000).
Detectando suporte para DRM de hardware AES128CBC
A partir do Windows 10, versão 1709, você pode detectar suporte para criptografia de hardware AES128CBC em um dispositivo chamando PlayReadyStatics.CheckSupportedHardware e especificando o valor de enumeração PlayReadyHardwareDRMFeatures.Aes128Cbc. Em versões anteriores do Windows 10, especificar esse valor fará com que uma exceção seja lançada. Por esse motivo, você deve verificar a presença do valor de enumeração chamando ApiInformation.IsApiContractPresent e especificando a versão 5 do contrato principal antes de chamar CheckSupportedHardware.
bool supportsAes128Cbc = ApiInformation.IsApiContractPresent("Windows.Foundation.UniversalApiContract", 5);
if (supportsAes128Cbc)
{
supportsAes128Cbc = PlayReadyStatics.CheckSupportedHardware(PlayReadyHardwareDRMFeatures.Aes128Cbc);
}