Novidades no PlayReady Versão 4.5
Esta página contém uma visão geral das alterações mais significativas entre o PlayReady versão 4.4 e o PlayReady versão 4.5.
Alterações gerais no PlayReady versão 4.5
Desafio criptografia com o certificado de implantação do servidor PlayReady
Em versões anteriores do PlayReady, a aquisição de licenças e outros desafios do cliente são sempre criptografados por privacidade com uma chave pública fixa. A partir do PlayReady 4.5, um cliente codificado para falar apenas com um servidor de suporte pode, em vez disso, criptografar a privacidade com o Certificado de Implantação do Servidor PlayReady emitido para o licenciado do servidor pela Microsoft. O SDK do PlayReady Server descriptografa o desafio com a chave privada correspondente, passada para ela pelo aplicativo SDK do PlayReady Server, em vez de uma chave privada fixa.
Tempo do Servidor de Licença
Em versões anteriores do PlayReady, o uso do recurso Tempo Seguro geralmente exigia que o aplicativo cliente conversasse com um servidor de Tempo Seguro separado para obter o tempo usado para definir seu relógio local. A partir do PlayReady 4.5, um cliente codificado para falar apenas com um servidor de suporte pode usar um tempo fornecido pelo SDK do PlayReady Server durante a aquisição de licença. Para obter mais informações, consulte Relógios Confiáveis do PlayReady.
Chave Exchange
Usando o protocolo de aquisição de licença, um cliente e um servidor do PlayReady agora podem trocar chaves arbitrárias que podem ser usadas para criptografar, descriptografar, assinar e verificar dados arbitrários fornecidos pelo aplicativo em que as próprias chaves estão protegidas usando o PlayReady. Quando o cliente é SL3000, as próprias chaves são protegidas pelo Ambiente de Execução Confiável. Para obter mais informações, consulte PlayReady Key Exchange.
Política de marca d'água
A funcionalidade foi adicionada para simplificar o uso da Restrição explícita de saída de vídeo digital de sinalização de marca d'água, conforme definido pelas Regras de Conformidade do PlayReady.
Alterações no SDK do PlayReady Server versão 4.5
Alterações gerais do servidor
As principais licenças de Exchange podem ser usadas para fornecer chaves arbitrárias a um cliente durante a aquisição de licença.
Se fornecidas pelo cliente, as tecnologias de marca d'água com suporte serão expostas ao aplicativo SDK do PlayReady Server. Isso simplifica o uso da restrição de saída de vídeo digital explícita de sinalização de marca d'água, conforme definido pelas Regras de Conformidade do PlayReady.
Alterações na documentação da API do Servidor
A documentação da Nova API do Servidor para a versão do .NET Standard do SDK do PlayReady Server foi criada e publicada. A Microsoft recomenda migrar para o SDK do .NET Standard.
A documentação da API do Servidor no arquivo PlayReady.chm incluída no Pacote de Documentação do PlayReady só se aplica à versão .NET Framework herdada do SDK do PlayReady Server. Esta documentação agora é considerada preterida, não foi atualizada desde o PlayReady 4.0 e não receberá atualizações futuras.
A maioria das APIs nos dois SDKs é idêntica, portanto, a documentação do .NET Standard deve ser suficiente para a maioria das finalidades. No entanto, há algumas diferenças significativas em que classes, interfaces e métodos diferem.
Aqui estão as diferenças gerais entre os dois SDKs.
O SDK do .NET Standard usa interfaces em muitos lugares onde o SDK do .NET Framework usa classes.
As interfaces do manipulador do SDK do .NET Standard implementadas pelo aplicativo usam métodos assíncronos em que o SDK do .NET Framework usa métodos síncronos. Portanto, os nomes da API de interface do manipulador do SDK do .Net Standard terminam com a palavra "Async" e retornam uma classe> de tarefa<em vez de simplesmente classe (onde a classe é específica do método de interface do manipulador).
O SDK do .NET Standard é agnóstico de transporte. Dessa forma, nenhum contexto HTTP é fornecido diretamente ao aplicativo. Ao usar ASP.NET Core, consulte a documentação ASP.NET Core, especialmente a Interface IHttpContextAccessor.
O SDK do .NET Standard não dá suporte ao protocolo de conteúdo de empacotamento (por exemplo, IPackagingDataAcquisitionHandler não existe). Essa funcionalidade será restaurada no PlayReady 4.6.
Aqui está uma lista completa das diferenças específicas do PlayReady 4.5. Essa lista não inclui a funcionalidade que existe apenas no SDK do .NET Standard nem lista todas as classes de empacotamento removidas que serão restauradas.
.NET Framework classe ou interface | Equivalente ao .NET Standard | Diferenças |
---|---|---|
Classe ProtocolChallengeContext | Interface IProtocolChallengeContext | A propriedade HttpRequest Request só existe no SDK .NET Framework conforme discutido acima. |
Classe ProtocolChallenge | Interface IProtocolChallenge | Nenhum. |
Interface IDeleteLicenseHandler | Idêntico | ProcessDeleteLicenseDataAsync é síncrono no SDK .NET Framework conforme discutido acima. |
Classe DeleteLicenseDataChallenge | Interface IDeleteLicenseDataChallenge | Nenhum. |
Interface IDomainHandler | Idêntico | HandleJoinDomainAsync e HandleLeaveDomainAsync são síncronos no SDK .NET Framework conforme discutido acima. |
Classe JoinDomainChallenge | Interfaces IDomainChallenge e IJoinDomainChallenge | O método JoinDomainChallenge.GenerateDomainKeyPair estático não existe no SDK do .NET Standard. A perda dessa funcionalidade é um bug que será corrigido no PlayReady 4.6 adicionando-o como um método estático ao DomainCertificateBuilder. |
Classe LeaveDomainChallenge | Interface ILeaveDomainChallenge | Nenhum. |
Interface ILicenseAcknowledgementHandler | Idêntico | HandleLicenseAcknowledgementAsync é síncrono no SDK do .NET Framework, conforme discutido acima. |
Classe LicenseAcknowledgementChallenge | Interface ILicenseAcknowledgementChallenge | Nenhum. |
Interface ILicenseAcquisitionHandler | Idêntico | HandleLicenseAcquisitionAsync é síncrono no SDK .NET Framework conforme discutido acima. |
Classe LicenseChallenge | Interface ILicenseChallenge | Nenhum. |
Interface IMeteringHandler | Idêntico | GetMeteringCertificateAsync e ProcessMeteringDataAsync são síncronos no SDK .NET Framework, conforme discutido acima. |
Classe MeteringCertificateChallenge | Interface IMeteringCertificateChallenge | Nenhum. |
Classe ProcessMeteringDataChallenge | Interface IProcessMeteringDataChallenge | Nenhum. |
Interface ISecureStopHandler | Idêntico | ProcessSecureStopDataAsync é síncrono no SDK .NET Framework conforme discutido acima. |
Classe SecureStopDataChallenge | Interface ISecureStopDataChallenge | A sobrecarga do método GetSecureStopData que usa um ISecureStop2Handler só existe no SDK .NET Framework. Em vez disso, o SDK do .NET Standard carrega esse manipulador como qualquer outro. |
Interface ISecureStopHandler2 | Idêntico | GetSecureStop2AESKeyAsync é síncrono no SDK do .NET Framework, conforme discutido acima. |
Classe PlayReadyServerAuthorization | Idêntico | Os métodos da classe são estáticos no SDK .NET Framework e na instância no SDK do .NET Standard. |
Alterações na API do Servidor
Isso é apenas uma visão geral. Consulte a documentação da API do Servidor para obter mais informações.
O método LicenseResponse.GetLicenses agora retorna uma matriz vazia em vez de nula quando nenhuma licença foi adicionada.
As classes e as enumerações a seguir foram adicionadas.
- Classe AdvancedLicense (abstrata, herda da Licença) - um subconjunto de propriedades e métodos existentes da MediaLicense foram movidos para esta classe, e MediaLicense agora herda de AbstractLicense. Nenhuma alteração de aplicativo é necessária para usar o MediaLicense.
- Classe KeyExchangeLicense (herda do AdvancedLicense) – usada para criar licenças que fornecem chaves arbitrárias para um cliente durante a aquisição da licença.
- Classe KeyExchangeRight (herda da Direita) – usada para especificar a chave e seu uso permitido para uma licença do KeyExchange.
- Enumeração KeyExchangeAlgorithm – usada para especificar o uso permitido para uma chave em uma licença keyExchange.
- Classe WatermarkVendor – usada para expor as tecnologias de marca-d'água com suporte do cliente ao aplicativo.
- Classe LicenseServerTimeCertificate – usada para conter o certificado para assinar o tempo de servidor de licença retornado na resposta de aquisição de licença.
Os seguintes foram adicionados a classes individuais.
- A classe PlayReadyHeader expõe se o cabeçalho indica o suporte para chaves por fluxo e se ele solicita explicitamente uma licença ou não.
- A enumeração ContentKeyType adiciona o valor KeyExchange.
- A classe Certificate adiciona propriedades de matriz de bytes expondo o resumo do certificado e a chave pública do emissor.
- A classe License adiciona uma propriedade guid expondo a ID exclusiva da licença e uma propriedade IEnumerable<Right> para retornar os direitos que foram adicionados à licença.
- A enumeração LicenseChallengeTeeAPIs adiciona valores para todas as novas APIs de TEE do PK 4.5.
- A enumeração LicenseChallengeReeFeatures adiciona valores para LicenseServerTime e KeyExchange.
- A classe LicenseChallenge adiciona a lista de KeyExchangeAlgorithms que o cliente dá suporte, o WatermarkVendors que o cliente dá suporte, as versões PK do TEE e REE do cliente (que podem ou não ser os mesmos) e se o cliente requer o LicenseServerTime atual.
- A classe LicenseResponse adiciona uma propriedade LicenseServerTimeCertificate para definir o certificado usado para assinar o Tempo do Servidor de Licença retornado na resposta de aquisição de licença.
- A classe ExplicitOutputRestrictionsConstants adiciona constantes para Marca d'água e InternalScreenOnly. Consulte as Regras de Conformidade do PlayReady para obter mais informações sobre esses guids.
Alterações no PlayReady Device Porting Kit versão 4.5
Alterações gerais do Kit de Portabilidade de Dispositivo
- Todo o Kit de Portabilidade do Dispositivo PlayReady foi atualizado para a LINGUAGEM de Anotação de Código-Fonte da Microsoft (SAL) 2.0.
- Alguns codepaths sem suporte usados apenas em implementações internas da Microsoft foram removidos para eliminar a confusão e reduzir os tempos de compilação e os tamanhos binários. Espera-se que mais melhorias nessa área sejam incluídas em versões futuras.
- Quando há suporte para o compilador subjacente e a arquitetura do computador, os tipos inteiros nativos de 128 bits agora podem ser usados para acelerar a implementação padrão do ECC256.
- Uma implementação padrão do algoritmo HMAC SHA256 foi adicionada.
Alterações na API do Kit de Portabilidade do Dispositivo
Isso é apenas uma visão geral. Consulte a documentação da API fornecida nos comentários de código associados no Kit de Portabilidade de Dispositivo PlayReady para obter mais informações.
DRM_CDMI_SetServercertificate agora tem permissão para ser chamado com um Certificado de Implantação do Servidor PlayReady para aquisição de licença de criptografia de privacidade e outros desafios do cliente. A função encaminha para Drm_AppContext_SetProperty nesse cenário. O uso existente permanece como está.
As seguintes funções públicas foram adicionadas:
- Drm_AppContext_SetProperty
- Drm_KeyExchange_Prepare
- Drm_KeyExchange_Perform
- Drm_KeyExchange_Close
As seguintes estruturas foram adicionadas:
- DRM_DGP_REE_FEATURE_LIST_4_5
- DRM_DGP_TEE_API_LIST_4_5
As seguintes APIs tee foram adicionadas:
- DRM_TEE_BASE_GetSystemTime2
- DRM_TEE_LICPREP_PackageKey2
- DRM_TEE_LICENSESERVERTIME_ProcessResponseData
- DRM_TEE_DECRYPT_PrepareToDecrypt2
- DRM_TEE_LICGEN_CompleteLicense2
- DRM_TEE_KEYEXCHANGE_Prepare
- DRM_TEE_KEYEXCHANGE_Perform
As seguintes APIs do OEM TEE foram adicionadas:
- OEM_TEE_BASE_ECC256_SetKey
- OEM_TEE_CRYPTO_SHA256_HMAC_VerifyMAC
- OEM_TEE_CRYPTO_SHA256_HMAC_CreateMAC
- OEM_TEE_PERSISTENTSTORAGE_Read
- OEM_TEE_PERSISTENTSTORAGE_Write
- OEM_TEE_GetSupportedWatermarkVendors
As seguintes APIs do OEM TEE foram renomeada sem alterações funcionais:
Nome antigo | Novo nome |
---|---|
OEM_TEE_DECRYPT_UnshuffleScalableContentKeys | OEM_TEE_BASE_UnshuffleScalableContentKeys |
OEM_TEE_DECRYPT_CalculateContentKeyPrimeWithAES128Key | OEM_TEE_BASE_CalculateContentKeyPrimeWithAES128Key |
OEM_TEE_DECRYPT_DeriveScalableKeyWithAES128Key | OEM_TEE_BASE_DeriveScalableKeyWithAES128Key |
OEM_TEE_DECRYPT_InitUplinkXKey | OEM_TEE_BASE_InitUplinkXKey |
OEM_TEE_DECRYPT_UpdateUplinkXKey | OEM_TEE_BASE_UpdateUplinkXKey |
OEM_TEE_DECRYPT_DecryptContentKeysWithDerivedKeys | OEM_TEE_BASE_DecryptContentKeysWithDerivedKeys |
OEM_TEE_DECRYPT_EnforcePolicy | OEM_TEE_POLICY_Enforce |