ID chiave e chiave (KID)
Ogni file multimediale protetto da PlayReady ha un oggetto PlayReady (PRO), che contiene diverse informazioni necessarie per PlayReady. Si trova nell'intestazione del contenuto del file che, ad esempio, potrebbe contenere anche metadati per le tracce video e audio.
All'interno di ogni pro è un'intestazione PlayReady, che fornisce a un client le informazioni necessarie per individuare o acquisire una licenza per la parte di contenuto in cui è archiviata. L'intestazione PlayReady è simile alla seguente:
<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.2.0.0">
<DATA>
<PROTECTINFO>
<KIDS>
<KID ALGID="AESCTR" CHECKSUM="xNvWVxoWk04=" VALUE="0IbHou/5s0yzM80yOkKEpQ=="></KID>
<KID ALGID="AESCTR" CHECKSUM="GnKaQIRacPU=" VALUE="/qgG2xbs4k2SKCxx6bhWqw=="></KID>
</KIDS>
</PROTECTINFO>
<LA_URL>https://test.playready.microsoft.com/service/rightsmanager.asmx</LA_URL>
</DATA>
</WRMHEADER>
La parte che ci interessa è l'elemento <KIDS>
, che contiene uno o più <KID>
elementi. Un KID (ID chiave) contiene un identificatore univoco globale (GUID) usato dal client per chiedere al server una chiave corrispondente e un ALGID, che viene quindi usato per decrittografare il file. Kid è pubblico, poiché è contenuto in PRO, ma la chiave stessa è un segreto per il servizio e la relazione tra chiave e KID è nota solo al servizio.
Generare una chiave e crittografare il contenuto
Le chiavi di crittografia del contenuto nei sistemi PlayReady sono chiavi CBC AES-128 E AES-128. Il servizio che crittografa il contenuto genera un nuovo kid e una nuova chiave simmetrica. Il kid viene inserito in PRO e i fotogrammi video e audio del contenuto vengono crittografati con la chiave simmetrica. L'immagine seguente mostra come viene generata una chiave e quindi usata per crittografare il contenuto.
Esistono due modi per generare un kid e una chiave, tra cui:
- Usando un sistema di gestione delle chiavi (Servizio di gestione delle chiavi), in cui il servizio genera in modo casuale ogni valore kid e chiave e li archivia e può semplicemente cercare il valore della chiave corrispondente al kid fornito dal client.
- Uso del meccanismo di inizializzazione della chiave PlayReady . Con questo meccanismo, il servizio determina un valore costante denominato valore di inizializzazione della chiave (un valore casuale di 30 byte) e per ogni parte di contenuto che richiede una chiave, genera un kid casuale. Usando Server SDK, è possibile generare una chiave specificando i 128 bit della chiave o il valore di inizializzazione della chiave e KID. La chiave verrà dedotta da un algoritmo PlayReady specificato qui.
Indipendentemente dalla modalità di generazione della chiave, è necessario essere in grado di verificare che corrisponda al kid corretto e quindi crittografare il contenuto.
Distribuire una licenza per il contenuto
Quando un client effettua una richiesta di licenza, invia l'intestazione PlayReady del contenuto all'autorità emittente della licenza. L'emittente della licenza estrae kid e determina il valore della chiave corrispondente, usando uno dei metodi descritti in precedenza, se usa il meccanismo di inizializzazione della chiave, rigenera semplicemente la chiave in base al valore di inizializzazione kid e chiave. Genera quindi una licenza che include questa chiave, che restituisce al client in una risposta di licenza.
Si supponga, ad esempio, di avere un file video. Il packager per questo contenuto genera un KID 123
casuale che inserisce nell'intestazione PlayReady del file. Il packager genera anche un valore ABC
di chiave casuale per la corrispondenza con KID 123
e li archivia entrambi nella Servizio di gestione delle chiavi. Il packager chiede al Servizio di gestione delle chiavi la chiave corretta per crittografare il file con e crittografa il file con la chiave ABC
. Quando il cliente tenta di riprodurre il file, il client chiede all'autorità emittente della licenza una licenza che corrisponde a KID 123
. L'emittente della licenza cerca kid nel Servizio di gestione delle chiavi e risponde con una licenza inclusa la chiave ABC
, che consente al client di sbloccare il file e il cliente di guardarlo.
Nota
La licenza inviata dall'emittente della licenza al client (nell'esempio la licenza contenente la chiave ABC
) viene crittografata. Un utente malintenzionato non può intercettare il valore della chiave.
La chiave usata per proteggere il file multimediale e la chiave nella licenza sono uguali; pertanto, il packager del contenuto e l'emittente della licenza devono essere entrambi in grado di recuperare o generare la stessa chiave esatta per un file multimediale specificato. A tale scopo, se si usa un valore di inizializzazione della chiave per generare le chiavi, è necessario condividerlo tra il packager del contenuto e l'autorità emittente della licenza.
Condivisione di chiavi tra file o tracce
Proprio come una chiave reale può sbloccare più di una porta, è tecnicamente possibile usare una chiave PlayReady per sbloccare più tracce in un unico file o anche più file in una raccolta di asset. Durante il processo di creazione del pacchetto, il packager del contenuto può specificare lo stesso identificatore di chiave per più tracce o più file multimediali e la stessa chiave viene usata per tutti.
Ad esempio, con un asset video multi-qualità con tracce video 4K, HD e SD e diverse tracce audio, il encryptor offre la flessibilità di definire una chiave per traccia o una chiave per tutte le tracce.
I client avranno bisogno di una licenza per ognuna delle chiavi che hanno il diritto di decrittografare. Si noti che il recapito di più licenze può essere eseguito da un server licenze in una singola risposta di licenza.
In un singolo asset con più tracce, la decisione tra una chiave per tutte le tracce o una chiave per ogni traccia viene eseguita dal servizio che gestisce il contenuto e in base ai criteri seguenti:
- Più chiavi comportano una maggiore complessità, ma consente di specificare al momento del recapito delle licenze ciò che tiene traccia del servizio che vuole consentire a un determinato client di decrittografare.
- Meno chiavi è meno complessa, ma non consente di specificare al momento del recapito delle licenze ciò che tiene traccia del servizio che vuole consentire a un determinato client di decrittografare.
- Alcuni client possono avere la limitazione che non supportano più chiavi per un singolo asset.
Nota
Anche se le chiavi PlayReady possono sbloccare più file multimediali digitali, Microsoft è fortemente contrario a questo. L'uso di chiavi univoche in tutti i file garantisce maggiore sicurezza rispetto alla protezione dei file con la stessa chiave.
Stacking delle licenze in una risposta di licenza
Una singola risposta di licenza può anche contenere più licenze e quindi più chiavi per sbloccare più file o tracce in una transazione. Questa operazione è più efficiente rispetto alla creazione di più risposte per più licenze, poiché comporta solo una transazione. Ciò può essere utile per scenari diversi:
- Un file multimediale viene crittografato usando più chiavi. Ad esempio, la traccia video viene crittografata usando Key1 e la traccia audio viene crittografata con Key2. Quando un client richiede una licenza per KID1, il server licenze rilascia una risposta di licenza, incluse le licenze per KID1 e KID2, quindi il client ha tutte le chiavi per decrittografare i video e le tracce audio del file.
- Ogni canzone in un album viene crittografata usando una chiave diversa, ma un cliente ha acquisito i diritti per tutti. Quando il cliente inizia a riprodurre la prima canzone, license server rilascia una risposta di licenza, inclusa una licenza per ogni canzone dell'album, quindi il client ha tutte le chiavi necessarie per riprodurre l'intero album senza problemi.
- La chiave per un canale in tv live dovrebbe cambiare ogni 24 ore. All'avvio della riproduzione, il server invia una risposta di licenza, inclusa la licenza per la chiave corrente, ma anche una licenza con la chiave successiva, quindi quando la chiave cambia, il client avrà già la chiave successiva e la modifica avviene senza problemi.