Condividi tramite


Modalità di crittografia del contenuto PlayReady

Questo argomento fornisce una panoramica delle modalità di crittografia del contenuto nei sistemi PlayReady. Per una panoramica su PlayReady e la 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 AES-128 CTR, 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 le 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. Microsoft supporta inoltre 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 AES-CBC "cbcs"

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

Nota

  • 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 un client per decrittografare il contenuto. L'intestazione PlayReady ha specifiche specifiche e controllo delle versioni. Per altre informazioni, vedere Specifica 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)

Nota

  • (4) Xbox One versione 1709 o successiva sono client PlayReady 4.X.
  • (3) Windows 10 tutte le versioni e Xbox One versione 1703 o successiva 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 dalla versione 4.2 dell'intestazione PlayReady, 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 si basa 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 essere mancante. 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 manca.

Flusso di contenuto con ALGID mancante

Nota

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 non è presente, tutte le chiavi per questa intestazione vengono usate in modalità contatore o concatenamento a blocchi di crittografia, 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 di licenza 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 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 sarà 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 in base a 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 inferiore, 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 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 (IV)

Nelle versioni di PlayReady 3.3 e versioni 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 (8 byte e 16 byte) sono supportati sia nelle modalità CTR che in CBC.

Esempi:

  • I flussi conformi a HLS che usano spesso IV a 128 bit in modalità CBC sono ora supportati.
  • Alcuni flussi HbbTV conformi che usano IV 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. Ciò avviene perché i client Windows supportano CBC solo nelle 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 prima della versione 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 un singolo 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 robustezza, un utente malintenzionato ha accesso allo stesso contenuto crittografato con la stessa chiave sia nelle modalità CBC che CTR potrebbe facilmente decrittografare il contenuto senza autorizzazione.