Condividi tramite


Modalità di crittografia del contenuto PlayReady

Questo argomento offre una panoramica sulle modalità di crittografia del contenuto nei sistemi PlayReady. Per una panoramica su PlayReady e sulla crittografia del contenuto, vedere Crittografia del contenuto PlayReady. Vedere Glossario per i termini e le definizioni di crittografia.

PlayReady versione 1.0 ha introdotto la modalità di crittografia del contenuto CTR AES-128, oltre alla modalità di crittografia COCKTAIL specifica di Microsoft usata in precedenza in WMDRM (Windows Media Digital Rights Management). La modalità di crittografia del contenuto AES-128 CTR usa chiavi AES, con una lunghezza di 128 bit usata nei file di contenuto in modalità contatore (CTR).

A partire dalla versione 4.0, i sistemi PlayReady supportano chiavi AES a 128 bit sia in modalità contatore (CTR) che in modalità CBC (Cipher Block Chaining).

Questa modifica garantisce che i servizi che usano PlayReady possano sfruttare appieno un flusso e un formato di file univoci in tutti i dispositivi. Inoltre, Microsoft supporta lo standard CMAF (Common Media Application Format), come definito in ISO/IEC FDIS 23000-19.

Modalità di crittografia comuni

Lo standard ISO ISO/IEC 23001-7 definisce quattro modalità di crittografia comune.

Modalità di crittografia comuni

I client PlayReady a partire dalla versione 4.0 supportano le chiavi CBC AES, che consentono il supporto per la modalità di crittografia comune "cbcs", oltre alle chiavi CTR AES per la modalità di crittografia comune "cenc". Prima della versione 4.0, AES CTR era la modalità supportata principalmente dai client PlayReady, che consente il supporto per la modalità di crittografia comune "cenc". Si noti che le modalità di crittografia comune 'cens' e 'cbc1' sono consentite e tecnicamente eseguibili in un ecosistema PlayReady, ma non supportate.

Supporto per lo schema di crittografia "cbcs" AES-CBC

Tutti i client basati su o dopo PlayReady PK versione 4.0 possono supportare le chiavi CBC. Il supporto è facoltativo per i client, tuttavia, e segnalato ai server licenze tramite una proprietà aggiuntiva nel protocollo di acquisizione delle licenze.

Versione COCKTAIL 'cenc' cbcs
PlayReady Client 1.0 supportato supportato non supportato
PlayReady Client 2.0 supportato supportato non supportato
PlayReady Client 2.5 supportato supportato non supportato
PlayReady Client 3.0 non supportato supportato non supportato
PlayReady Client 3.3 non supportato supportato non supportato
PlayReady Client 4.0 non supportato supportato supportato

Annotazioni

  • Tutte le unità Xbox One aggiornate con la versione 1709 o successiva supportano "cbcs".
  • Tutti i server licenze PlayReady a partire dalla versione 4.0 supportano l'emissione di licenze con chiavi CBC.

Segnalazione dell'ALGID nell'intestazione PlayReady

L'intestazione PlayReady è un documento XML in genere incluso nell'intestazione di un file di contenuto o di un flusso. Descrive gli attributi PlayReady necessari per decrittografare il contenuto da parte di un client. L'intestazione PlayReady ha proprie specifiche e propria versione. Per ulteriori informazioni, vedere Specifiche dell'intestazione PlayReady.

Versione Intestazione PlayReady 4.3 Intestazione PlayReady 4.2 Intestazione PlayReady 4.1 Intestazione PlayReady 4.0
PlayReady Client 4.0
(vedere la nota 4)
PlayReady Client 3.3
(vedere la nota 3)
PlayReady Client 3.0
(vedere la nota 3)
PlayReady Client 2.5
(vedere la nota 2)
PlayReady Client 2.0
(vedere la nota 2)
PlayReady Client 1.0
(vedere la nota 1)

Annotazioni

  • (4) Xbox One versione 1709 o successiva sono client PlayReady 4.X.
  • (3) Windows 10 tutte le versioni e Xbox One versione 1703 o versioni precedenti sono i client PlayReady 3.X. I dispositivi non Windows più recenti (ad esempio, Smart TV) rilasciati dopo il 2017 sono i client PlayReady 3.X.
  • (2) Silverlight e Windows 8, 8.1 sono client PlayReady 2.X. La maggior parte dei dispositivi non Windows (ad esempio, Smart TV) rilasciati tra il 2011 e il 2017 sono i client PlayReady 2.X.
  • (1) La maggior parte dei dispositivi non Windows (ad esempio, Smart TV) rilasciati tra il 2008 e il 2011 sono i client PlayReady 1.X.

Di seguito è riportato un esempio di intestazione 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>

ALGID (identificatore dell'algoritmo) è una proprietà dell'elemento KID e specifica l'algoritmo di crittografia usato per crittografare il contenuto. A partire da PlayReady Header versione 4.2, l'ALGID è obbligatorio e deve essere impostato su "AESCTR" o "COCKTAIL". Tuttavia, a partire dalla versione 4.3, è anche possibile impostare ALGID sul valore "AESCBC". L'esempio seguente mostra un'intestazione PlayReady versione 4.3 con i valori ALGID impostati su "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>

La figura seguente mostra un flusso di contenuto, in cui la richiesta di licenza è basata sull'intestazione PlayReady e viene specificato ALGID.

Flusso di contenuto con ALGID specificato

ALGID mancanti

A partire dalla versione 4.3 dell'intestazione PlayReady, l'ALGID potrebbe non essere presente. L'esempio seguente mostra un'intestazione PlayReady versione 4.3 con valori ALGID mancanti.

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

La figura seguente mostra un flusso di contenuto, in cui la richiesta di licenza usa il modulo CDMi e l'ALGID non è presente.

Flusso di contenuto con ALGID mancante

Annotazioni

Ogni intestazione PlayReady può avere:

  • Solo un tipo di crittografia. Ad esempio, se ALGID="AESCTR", tutte le chiavi per l'intestazione vengono usate in modalità CTR. Quando ALGID="AESCBC", tutte le chiavi per questa intestazione vengono usate in modalità CBC.
  • Quando l'ALGID manca, tutte le chiavi per questa intestazione vengono utilizzate in Modalità Contatore o Cifratura a Blocchi Concatenati, ma il valore non viene inserito nell'intestazione.
  • L'esecuzione di una richiesta di acquisizione delle licenze con un'intestazione PlayReady v4.3 a un server licenze inferiore alla versione 4.0 genererà un'eccezione.
  • Una risposta di licenza può includere una o più licenze, in cui ogni licenza contiene una chiave e un numero qualsiasi di criteri.

Perché manca il valore ALGID

Microsoft consiglia che i crittografi includano sempre lo stesso valore ALGID nell'intestazione PlayReady inclusa durante l'elaborazione del contenuto.

In uno scenario standard, il encryptor crittografa il contenuto e genera l'intestazione PlayReady nel contenuto. Il encryptor conosce la modalità AES usata per la crittografia; include quindi queste informazioni nella proprietà ALGID dell'intestazione PlayReady. I client avviano le richieste di licenza in base alle intestazioni PlayReady analizzate fuori dal contenuto reale, quindi il valore ALGID è presente e valido.

In alcuni scenari, il client avvia una richiesta di licenza in base a un semplice valore KID (GUID a 128 bit). In questo caso, il valore ALGID nell'intestazione PlayReady inserito nella richiesta di licenza risulterà mancante (noto anche come non specificato). Un esempio è quando il client effettua una richiesta di licenza usando le API EME HTML5.

Come il client gestisce un ALGID mancante

Se il client avvia una richiesta di licenza basata su un'intestazione PlayReady in ingresso, il valore ALGID nella richiesta di licenza rifletterà il valore trovato nell'intestazione perché la richiesta di acquisizione della licenza include una copia dell'intestazione PlayReady. In questo caso:

  • Per tutte le intestazioni PlayReady v4.2 o versioni precedenti, il valore ALGID è obbligatorio e deve essere valido.
  • Per le intestazioni PlayReady v4.3 o successive, il valore ALGID può essere presente e valido o mancante.

Come il server SDK gestisce un ALGID mancante

Tutte le licenze recapitate tramite una risposta di licenza DEVONO includere un valore ALGID valido.

Se ALGID non è specificato nella richiesta di licenza in ingresso, il server licenze deve ottenere queste informazioni dal back-end del servizio e inserire il valore corretto nella risposta alla licenza.

Vettori di inizializzazione (VI)

Nelle versioni PlayReady 3.3 e precedenti sono supportati solo IV a 64 bit (IV a 8 byte) in modalità CTR. A partire da PlayReady versione 4.0, sia IV a 64 bit che a 128 bit (IV a 8 byte e 16 byte) sono supportati sia nelle modalità CTR che in CBC.

Esempi:

  • Sono ora supportati flussi conformi a HLS che usano spesso IVS a 128 bit in modalità CBC.
  • Alcuni flussi conformi a HbbTV che usano IVS a 128 bit in modalità CTR sono ora supportati.

Limitazioni

  • Un'intestazione PlayReady deve usare un solo valore ALGID per tutti gli elementi KID. In altre parole, tutte le chiavi usate per crittografare le diverse tracce e qualità di un asset devono essere AES CTR o AES CBC. Se l'ALGID manca in qualsiasi elemento KID, deve essere mancante da tutti gli elementi KID.
  • Prima di PlayReady versione 4.4, la generazione di una licenza con una chiave CBC quando il certificato client in ingresso è Windows e SL2000 genera un'eccezione. Questo perché i client Windows supportano CBC solo su unità SL3000. Potrebbe essere possibile distribuire una licenza con una chiave CBC a un client SL2000, tuttavia, se questo client è PlayReady versione 4.0 minima e dichiara il supporto per la modalità CBC.
  • La generazione di una licenza con una chiave CBC quando il certificato client in ingresso è un dispositivo che usa una versione di Porting Kit precedente alla 4.0 genererà un'eccezione.
  • La generazione di una licenza con una chiave CBC quando la richiesta di licenza in ingresso non indica il supporto per AES CBC, genererà un'eccezione.

Importante

I servizi non devono crittografare una singola parte di contenuto in modalità CTR e in modalità CBC usando lo stesso {KID, Ck}.

  • Per motivi funzionali, un client che acquisisce sia una licenza per {KID, Ck, AESCTR} che per {KID, Ck, AESCBC} non funzionerebbe.
  • Per motivi di affidabilità, un utente malintenzionato che ha accesso allo stesso contenuto crittografato con la stessa chiave in modalità CBC e CTR potrebbe decrittografare più facilmente il contenuto senza autorizzazione.