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.
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 .
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.
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.
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).
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);
}