Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Toto téma obsahuje přehled režimů šifrování obsahu v systémech PlayReady. Přehled o šifrování obsahu PlayReady a obsahu najdete v tématu Šifrování obsahu PlayReady. Informace o šifrovacích termínech a definicích najdete v glosáři .
PlayReady verze 1.0 zavedla režim šifrování obsahu AES-128 CTR, kromě režimu šifrování KOKTEJL specifického pro Microsoft, který se dříve používal ve WMDRM (Windows Media Digital Rights Management). Režim šifrování obsahu AES-128 CTR používá klíče AES s délkou 128 bitů používaných u souborů obsahu v režimu čítače (CTR).
Od verze 4.0 systémy PlayReady podporují 128bitové klíče AES v čítačovém režimu (CTR) i v blokovém řetězovém režimu (CBC).
Tato změna zajišťuje, aby služby používající PlayReady mohly plně využívat jedinečný datový proud a formát souborů na všech zařízeních. Kromě toho Microsoft podporuje standard CMAF (Common Media Application Format), jak je definováno ve standardu ISO/IEC FDIS 23000-19.
Běžné režimy šifrování
Standard ISO/IEC 23001-7 definuje čtyři běžné režimy šifrování.
Klienti PlayReady počínaje verzí 4.0 podporují klíče AES CBC, což umožňuje podporu režimu Společné Šifrování 'cbcs', kromě klíčů AES CTR pro režim Společné Šifrování 'cenc'. Před verzí 4.0 byl AES CTR režim, který převážně podporovali klienti PlayReady. Tento režim umožňuje podporu pro režim společného šifrování 'cenc'. Všimněte si, že běžné režimy šifrování cens a cbc1 jsou povolené a technicky proveditelné v ekosystému PlayReady, ale nepodporují se.
Podpora schématu šifrování cbcs AES-CBC
Všichni klienti, kteří jsou postaveni na PlayReady verzi PK 4.0 nebo později, můžou podporovat klíče CBC. Podpora je pro klienty volitelná a je signalizována licenčním serverům prostřednictvím další vlastnosti v protokolu pořízení licence.
| Verze | KOKTEJL | Cenc | "cbcs" |
|---|---|---|---|
| PlayReady Client 1.0 | Podporováno | Podporováno | nepodporováno |
| PlayReady Client 2.0 | Podporováno | Podporováno | nepodporováno |
| PlayReady Client 2.5 | Podporováno | Podporováno | nepodporováno |
| PlayReady Client 3.0 | nepodporováno | Podporováno | nepodporováno |
| PlayReady Client 3.3 | nepodporováno | Podporováno | nepodporováno |
| PlayReady Client 4.0 | nepodporováno | Podporováno | Podporováno |
Poznámka:
- Všechny jednotky Xbox One upgradované s verzí 1709 nebo vyšší podporují cbcs.
- Všechny licenční servery PlayReady počínaje verzí 4.0 podporují vydávání licencí s klíči CBC.
Signalizace ALGID v hlavičce PlayReady
Hlavička PlayReady je dokument XML obvykle obsažený v hlavičce souboru obsahu nebo datového proudu. Popisuje atributy PlayReady potřebné pro klienta k dešifrování tohoto obsahu. Hlavička PlayReady má vlastní specifikaci a správu verzí. Další informace naleznete v tématu PlayReady Header Specification.
| Verze | PlayReady Header 4.3 | PlayReady Header 4.2 | PlayReady Header 4.1 | PlayReady Header 4.0 |
|---|---|---|---|---|
| PlayReady Client 4.0 (viz poznámka 4) |
✔ | ✔ | ✔ | ✔ |
| PlayReady Client 3.3 (viz poznámka 3) |
✔ | ✔ | ✔ | |
| PlayReady Client 3.0 (viz poznámka 3) |
✔ | ✔ | ✔ | |
| PlayReady Client 2.5 (viz poznámka 2) |
✔ | ✔ | ||
| PlayReady Client 2.0 (viz poznámka 2) |
✔ | ✔ | ||
| PlayReady Client 1.0 (viz poznámka 1) |
✔ |
Poznámka:
- (4) Xbox One verze 1709 nebo vyšší jsou klienti PlayReady 4.X.
- (3) Windows 10 všechny verze a Xbox One verze 1703 nebo nižší jsou klienti PlayReady 3.X. Nejnovější zařízení s jiným systémem než Windows (např. Smart TV) vydaná po roce 2017 jsou klienti PlayReady 3.X.
- (2) Silverlight a Windows 8, 8.1 jsou klienti PlayReady 2.X. Většina zařízení bez Windows (například inteligentních televizorů) vydaných mezi 2011 a 2017 jsou klienti PlayReady 2.X.
- (1) Většina zařízení bez Windows (například inteligentních televizorů) vydaných v období 2008 až 2011 jsou klienti PlayReady 1.X.
Následuje příklad hlavičky 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 (identifikátor algoritmu) je vlastnost elementu KID a určuje šifrovací algoritmus, který byl použit k šifrování obsahu. Počínaje hlavičkou PlayReady verze 4.2 je vyžadován ALGID, který musí být nastaven na hodnotu "AESCTR" nebo "COCKTAIL". Počínaje verzí 4.3 však lze ALGID nastavit také na hodnotu AESCBC . Následující příklad ukazuje PlayReady Header verze 4.3 s hodnotami ALGID nastavenými na "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>
Následující obrázek znázorňuje tok obsahu, kde je žádost o licenci založená na hlavičce PlayReady a je zadán identifikátor ALGID.
Chybějící identifikátory ALGID
Počínaje hlavičkou PlayReady verze 4.3 může chybět ALGID. Následující příklad ukazuje PlayReady Header verze 4.3 s chybějícími hodnotami ALGID.
<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>
Následující obrázek znázorňuje tok obsahu, kde žádost o licenci používá modul CDMi a chybí ID ALGID.
Poznámka:
Každá hlavička PlayReady může mít:
- Pouze jeden typ šifrování. Pokud například ALGID="AESCTR", všechny klíče určené pro hlavičku se použijí v režimu CTR. Pokud je ALGID = "AESCBC", všechny klíče pro tuto hlavičku jsou použity v režimu CBC.
- Pokud chybí ALGID, všechny klíče pro tuto hlavičku se použijí v režimu čítače nebo řetězení bloků šifer, ale hodnota se do hlavičky nevloží.
- Provedení žádosti o získání licence s hlavičkou PlayReady v4.3 na licenční server pod v4.0 vyvolá výjimku.
- Odpověď na licenci může obsahovat jednu nebo více licencí, kde každá licence obsahuje jeden klíč a libovolný počet zásad.
Proč chybí hodnota ALGID
Microsoft doporučuje, aby zašifrovače vždy obsahovaly stejnou hodnotu ALGID v hlavičce PlayReady, kterou zahrnuly při zpracování obsahu.
Ve standardním scénáři šifrátor šifruje obsah a generuje hlavičku PlayReady v obsahu. Šifrovač ví, který režim AES se použil k šifrování; obsahuje tyto informace ve vlastnosti ALGID hlavičky PlayReady. Klienti iniciují žádosti o licence na základě hlaviček PlayReady parsovaných z reálného obsahu, takže hodnota ALGID je přítomná a platná.
V některých scénářích klient zahájí žádost o licenci na základě jednoduché hodnoty KID (128bitový identifikátor GUID). V tomto případě chybí hodnota ALGID v hlavičce PlayReady vložené do žádosti o licenci (označuje se také jako nezadaná). Jedním z příkladů je, když klient vytvoří žádost o licenci pomocí rozhraní API HTML5 EME.
Jak klient řeší situaci s chybějícím ALGID
Pokud klient zahájí žádost o licenci na základě příchozí hlavičky PlayReady, hodnota ALGID v žádosti o licenci bude odpovídat hodnotě nalezené v hlavičce, protože výzva k získání licence obsahuje kopii hlavičky PlayReady. V tomto případě:
- Pro všechny hlavičky PlayReady verze 4.2 nebo nižší je vyžadována hodnota ALGID a musí být platná.
- Pro hlavičky PlayReady verze 4.3 nebo vyšší může být hodnota ALGID přítomna a platná nebo chybí.
Jak serverová sada SDK zpracovává chybějící ID ALGID
Všechny licence doručované prostřednictvím odpovědi na licenci musí obsahovat platnou hodnotu ALGID.
Pokud v příchozí žádosti o licenci není zadán identifikátor ALGID, licenční server musí tyto informace získat z back-endu služby a zadat správnou hodnotu do odpovědi na licenci.
Inicializační vektory (IV)
Ve verzích PlayReady 3.3 a starších se v režimu CTR podporují pouze 64bitové IVs (8 bajtů). Počínaje verzí 4.0 PlayReady jsou 64bitové i 128bitové IV (8bajtů a 16bajtů) podporované v režimech CTR i CBC.
Příklady:
- Podporované jsou teď streamy kompatibilní s HLS, které často používají 128bitové IV v režimu CBC.
- Některé streamy podporované HbbTV, které používají IV s délkou 128 bitů v režimu CTR, jsou nyní podporovány.
Omezení
- Hlavička PlayReady musí používat pouze jednu hodnotu ALGID pro všechny prvky KID. Jinými slovy, všechny klíče použité k šifrování různých stop a vlastností prostředku musí být AES CTR nebo AES CBC. Pokud chybí ALGID u jakéhokoli elementu KID, musí chybět ve všech elementech KID.
- Před verzí PlayReady 4.4 generování licence s klíčem CBC, když příchozí klientský certifikát je Windows a SL2000, vyvolá výjimku. Důvodem je to, že klienti Windows podporují CBC pouze na jednotkách SL3000. Licenci s klíčem CBC může být možné doručit klientovi SL2000, ale pokud je tento klient minimálně PlayReady verze 4.0 a deklaruje podporu pro režim CBC.
- Generování licence s klíčem CBC vyvolá výjimku, pokud příchozí klientský certifikát pochází ze zařízení, které používá verzi sady Porting Kit starší než 4.0.
- Generování licence s klíčem CBC v případě, že příchozí žádost o licenci neindikuje podporu pro AES CBC, vyvolá výjimku.
Důležité
Služby nesmí šifrovat jednu část obsahu v režimu CTR a v režimu CBC pomocí stejné položky {KID, Ck}.
- Z funkčních důvodů klient, který získá licenci pro {KID, Ck, AESCTR} a pro {KID, Ck, AESCBC}, nebude fungovat.
- Z důvodů robustnosti by útočník měl přístup ke stejnému obsahu zašifrovanému pomocí stejného klíče jak v režimu CBC, tak v režimu CTR, mohl snadněji dešifrovat obsah bez autorizace.