Novità di PlayReady versione 4.5
Questa pagina contiene una panoramica delle modifiche più significative tra PlayReady versione 4.4 e PlayReady versione 4.5.
Modifiche generali in PlayReady versione 4.5
Sfidare la crittografia con il certificato di distribuzione del server PlayReady
Nelle versioni precedenti di PlayReady, l'acquisizione delle licenze e altre sfide client sono sempre crittografate con una chiave pubblica fissa. A partire da PlayReady 4.5, un client codificato per comunicare solo a un server di supporto potrebbe invece risolvere i problemi relativi alla privacy con il certificato di distribuzione del server PlayReady rilasciato al licenziatario del server da Microsoft. PlayReady Server SDK decrittografa quindi la sfida con la chiave privata corrispondente, passata all'applicazione PlayReady Server SDK anziché una chiave privata fissa.
Ora del server licenze
Nelle versioni precedenti di PlayReady, l'uso della funzionalità Secure Time richiede in genere all'applicazione client di comunicare con un server di tempo sicuro separato per ottenere l'ora usata per impostare il proprio orologio locale. A partire da PlayReady 4.5, un client codificato per comunicare solo a un server di supporto può invece usare un tempo fornito dall'SDK del server PlayReady durante l'acquisizione della licenza. Per altre informazioni, vedere Orologio attendibile PlayReady.
Exchange chiave
Usando il protocollo di acquisizione delle licenze, un client PlayReady e un server possono ora scambiare chiavi arbitrarie che possono essere usate per crittografare, decrittografare, firmare e verificare i dati forniti dall'applicazione arbitraria in cui le chiavi stesse sono protette tramite PlayReady. Quando il client è SL3000, le chiavi stesse sono protette dall'ambiente di esecuzione attendibile. Per altre informazioni, vedere PlayReady Key Exchange.
Criteri di filigrana
La funzionalità è stata aggiunta per semplificare l'uso della restrizione esplicita dell'output video digitale esplicito come definito dalle regole di conformità PlayReady.
Modifiche in PlayReady Server SDK versione 4.5
Modifiche generali del server
Le licenze chiave Exchange possono essere usate per fornire chiavi arbitrarie a un client durante l'acquisizione della licenza.
Se fornito dal client, le tecnologie di filigrana supportate vengono esposte all'applicazione PlayReady Server SDK. In questo modo viene semplificato l'uso della restrizione di output video digitale esplicito di segnalazione esplicita, come definito dalle regole di conformità PlayReady.
Modifiche alla documentazione dell'API server
La nuova documentazione dell'API server per la versione .NET Standard di PlayReady Server SDK è stata creata e pubblicata. Microsoft consiglia di eseguire la migrazione a .NET Standard SDK.
La documentazione dell'API server nel file PlayReady.chm incluso nel Pacchetto di documentazione PlayReady si applica solo alla versione legacy di .NET Framework dell'SDK del server PlayReady. Questa documentazione è ora considerata deprecata, non è stata aggiornata da PlayReady 4.0 e non riceverà aggiornamenti futuri.
La maggior parte delle API nei due SDK è identica, pertanto la documentazione di .NET Standard deve essere sufficiente per la maggior parte dei fini. Esistono tuttavia alcune differenze significative in cui le classi, le interfacce e i metodi differiscono.
Ecco le differenze generali tra i due SDK.
.NET Standard SDK usa interfacce in molte posizioni in cui .NET Framework SDK usa classi.
Le interfacce del gestore sdk .NET Standard implementate dall'applicazione usano metodi asincroni in cui .NET Framework SDK usa metodi sincroni. Pertanto, i nomi API dell'interfaccia dell'SDK .Net Standard terminano con la parola "Async" e restituiscono una classe Task<anziché una classe semplicemente (dove la classe> è specifica del metodo dell'interfaccia del gestore).
.NET Standard SDK è agnostico. Di conseguenza, nessun contesto HTTP viene fornito direttamente all'applicazione. Quando si usa ASP.NET Core, vedere la documentazione di ASP.NET Core, in particolare l'interfaccia IHttpContextAccessor.
.NET Standard SDK non supporta il protocollo di contenuto per la creazione di pacchetti, ad esempio IPackagingDataAcquisitionHandler non esiste. Questa funzionalità verrà ripristinata in PlayReady 4.6.
Ecco un elenco completo delle differenze specifiche a partire da PlayReady 4.5. Questo elenco non include funzionalità esistenti solo nell'SDK .NET Standard né elenca tutte le classi di creazione di pacchetti rimosse che verranno ripristinate.
Classe o interfaccia di .NET Framework | Equivalente di .NET Standard | Differenze |
---|---|---|
Classe ProtocolChallengeContext | Interfaccia IProtocolChallengeContext | La proprietà HttpRequest Request esiste solo in .NET Framework SDK, come illustrato in precedenza. |
Classe ProtocolChallenge | Interfaccia IProtocolChallenge | Nessuno. |
Interfaccia IDeleteLicenseHandler | Uguale | ProcessDeleteLicenseDataAsync è sincrono in .NET Framework SDK, come illustrato in precedenza. |
Classe DeleteLicenseDataChallenge | Interfaccia IDeleteLicenseDataChallenge | Nessuno. |
Interfaccia IDomainHandler | Uguale | HandleJoinDomainAsync e HandleLeaveDomainAsync sono sincroni in .NET Framework SDK, come illustrato in precedenza. |
Classe JoinDomainChallenge | Interfacce IDomainChallenge e IJoinDomainChallenge | Il metodo static JoinDomainChallenge.GenerateDomainKeyPair non esiste nell'SDK .NET Standard. La perdita di questa funzionalità è un bug che verrà risolto in PlayReady 4.6 aggiungendolo come metodo statico a DomainCertificateBuilder. |
Classe LeaveDomainChallenge | Interfaccia ILeaveDomainChallenge | Nessuno. |
Interfaccia ILicenseAcknowledgementHandler | Uguale | HandleLicenseAcknowledgementAsync è sincrono in .NET Framework SDK, come illustrato in precedenza. |
Classe LicenseAcknowledgementChallenge | Interfaccia ILicenseAcknowledgementChallenge | Nessuno. |
Interfaccia ILicenseAcquisitionHandler | Uguale | HandleLicenseAcquisitionAsync è sincrono nell'SDK di .NET Framework come illustrato in precedenza. |
Classe LicenseChallenge | Interfaccia ILicenseChallenge | Nessuno. |
Interfaccia IMeteringHandler | Uguale | GetMeteringCertificateAsync e ProcessMeteringDataAsync sono sincroni in .NET Framework SDK, come illustrato in precedenza. |
Classe MeteringCertificateChallenge | Interfaccia IMeteringCertificateChallenge | Nessuno. |
Classe ProcessMeteringDataChallenge | Interfaccia IProcessMeteringDataChallenge | Nessuno. |
Interfaccia ISecureStopHandler | Uguale | ProcessSecureStopDataAsync è sincrono in .NET Framework SDK, come illustrato in precedenza. |
Classe SecureStopDataChallenge | Interfaccia ISecureStopDataChallenge | L'overload del metodo GetSecureStopData che accetta un gestore ISecureStop2Handler esiste solo in .NET Framework SDK. .NET Standard SDK carica invece questo gestore come qualsiasi altro. |
Interfaccia ISecureStopHandler2 | Uguale | GetSecureStop2AESKeyAsync è sincrono in .NET Framework SDK, come illustrato in precedenza. |
Classe PlayReadyServerAuthorization | Uguale | I metodi della classe sono statici nell'SDK di .NET Framework e nell'istanza di .NET Standard SDK. |
Modifiche all'API server
Si tratta semplicemente di una panoramica. Per altre informazioni, vedere la documentazione dell'API server .
Il metodo LicenseResponse.GetLicenses restituisce ora una matrice vuota anziché null quando non sono state aggiunte licenze.
Sono state aggiunte le classi e le enumerazioni seguenti.
- Classe AdvancedLicense (astratta, eredita da License): un subset di proprietà e metodi esistenti di MediaLicense è stato spostato in questa classe e MediaLicense eredita ora da AbstractLicense. Non sono necessarie modifiche all'applicazione per l'uso di MediaLicense.
- Classe KeyExchangeLicense (eredita da AdvancedLicense): usata per creare licenze che forniscono chiavi arbitrarie a un client durante l'acquisizione della licenza.
- Classe KeyExchangeRight (eredita da Right): utilizzata per specificare la chiave e il relativo utilizzo consentito a una licenza KeyExchange.
- Enumerazione keyExchangeAlgorithm: utilizzata per specificare l'utilizzo consentito per una chiave in una licenza keyExchange.
- Classe WatermarkVendor: utilizzata per esporre le tecnologie di filigrana supportate del client all'applicazione.
- Classe LicenseServerTimeCertificate: utilizzata per contenere il certificato per firmare il tempo del server di licenza restituito nella risposta di acquisizione delle licenze.
I seguenti sono stati aggiunti a singole classi.
- La classe PlayReadyHeader espone se l'intestazione indica il supporto per le chiavi per flusso e se richiede in modo esplicito una licenza o meno.
- L'enumerazione ContentKeyType aggiunge il valore KeyExchange.
- La classe Certificate aggiunge proprietà della matrice di byte che esponeno la chiave pubblica del digest e dell'autorità di certificazione del certificato.
- La classe License aggiunge una proprietà guid che espone l'ID univoco della licenza e una proprietà IEnumerable<Right> per restituire i diritti aggiunti alla licenza.
- L'enumerazione LicenseChallengeTeeAPIs aggiunge valori per tutte le nuove API PK 4.5 TEE.
- L'enumerazione LicenseChallengeReeFeatures aggiunge valori per LicenseServerTime e KeyExchange.
- La classe LicenseChallenge aggiunge l'elenco di KeyExchangeAlgorithms supportato dal client, il client WatermarkVendors supporta, le versioni PK del TEE del client e REE (che potrebbero o meno essere uguali) e se il client richiede l'oggetto LicenseServerTime corrente.
- La classe LicenseResponse aggiunge una proprietà LicenseServerTimeCertificate per impostare il certificato usato per firmare l'ora del server di licenza restituita nella risposta di acquisizione delle licenze.
- La classe ExplicitOutputRestrictionsConstants aggiunge costanti per Watermark e InternalScreenOnly. Per altre informazioni su questi guid, vedere le regole di conformità PlayReady.
Modifiche apportate a PlayReady Device Porting Kit versione 4.5
Modifiche generali del Kit di conversione dei dispositivi
- L'intero Kit di conversione del dispositivo PlayReady è stato aggiornato a Microsoft Source Code Annotation Language (SAL) 2.0.
- Alcuni percorsi di codice non supportati vengono rimossi solo nelle implementazioni interne di Microsoft per eliminare confusione e ridurre i tempi di compilazione e le dimensioni binarie. Altri miglioramenti in questa area dovrebbero essere inclusi nelle versioni future.
- Se supportato dal compilatore sottostante e dall'architettura del computer, è ora possibile usare tipi integer a 128 bit nativi per accelerare l'implementazione predefinita di ECC256.
- È stata aggiunta un'implementazione predefinita dell'algoritmo HMAC SHA256.
Modifiche all'API Device Porting Kit
Si tratta semplicemente di una panoramica. Per altre informazioni, vedere la documentazione dell'API fornita nei commenti di codice associati in PlayReady Device Porting Kit .
DRM_CDMI_SetServercertificate è ora consentito chiamare con un certificato di distribuzione del server PlayReady per l'acquisizione delle licenze di crittografia della privacy e altre sfide client. La funzione inoltra a Drm_AppContext_SetProperty in questo scenario. L'utilizzo esistente rimane così come è.
Sono state aggiunte le funzioni pubbliche seguenti:
- Drm_AppContext_SetProperty
- Drm_KeyExchange_Prepare
- Drm_KeyExchange_Perform
- Drm_KeyExchange_Close
Sono state aggiunte le strutture seguenti:
- DRM_DGP_REE_FEATURE_LIST_4_5
- DRM_DGP_TEE_API_LIST_4_5
Sono state aggiunte le API TEE seguenti:
- 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
Sono state aggiunte le API TEE OEM seguenti:
- 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
Le API TEE OEM seguenti sono state rinominate senza modifiche funzionali:
Nome precedente | Nuovo 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 |