Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Det här avsnittet innehåller en översikt över innehållskrypteringslägen i PlayReady-system. En översikt över PlayReady och innehållskryptering finns i PlayReady-innehållskryptering. Se Ordlista för krypteringsvillkor och definitioner.
PlayReady version 1.0 introducerade AES-128 CTR-innehållskrypteringsläge, förutom microsofts specifika COCKTAIL-krypteringsläge som tidigare användes i WMDRM (Windows Media Digital Rights Management). AES-128 CTR innehållskrypteringsläge använder AES-nycklar med en längd på 128 bitar i CTR-läge på innehållsfilerna.
Från och med version 4.0 har PlayReady-system stöd för AES 128-bitarsnycklar i både räknare (CTR) och chifferblockeringsläge (CBC).
Den här ändringen säkerställer att tjänster som använder PlayReady fullt ut kan dra nytta av en unik ström och filformat på alla enheter. Dessutom har Microsoft stöd för CMAF-standarden (Common Media Application Format), enligt definitionen i ISO/IEC FDIS 23000-19.
Vanliga krypteringslägen
ISO-standarden ISO/IEC 23001-7 definierar fyra vanliga krypteringslägen.
PlayReady-klienter som börjar med version 4.0 har stöd för AES CBC-nycklar, vilket ger stöd för det gemensamma krypteringsläget "cbcs", utöver AES CTR-nycklar för common encryption-läget "cenc". Före version 4.0 var AES CTR det läge som huvudsakligen hade stöd av PlayReady-klienter, vilket ger stöd för common encryption-läget "cenc". Observera att vanliga krypteringslägen "cens" och "cbc1" är tillåtna och tekniskt genomförbara i ett PlayReady-ekosystem, men stöds inte.
Stöd för krypteringsschemat "cbcs" AES-CBC
Alla klienter som bygger på eller efter PlayReady PK version 4.0 kan ha stöd för CBC-nycklar. Support är dock valfritt för klienter och signaleras till licensservrar via en ytterligare egenskap i protokollet för licensförvärv.
| Utgåva | KOKTAIL | "cenc" | "cbcs" |
|---|---|---|---|
| PlayReady Client 1.0 | stödd | stödd | stöds inte |
| PlayReady Client 2.0 | stödd | stödd | stöds inte |
| PlayReady Client 2.5 | stödd | stödd | stöds inte |
| PlayReady Client 3.0 | stöds inte | stödd | stöds inte |
| PlayReady Client 3.3 | stöds inte | stödd | stöds inte |
| PlayReady Client 4.0 | stöds inte | stödd | stödd |
Anmärkning
- Alla Xbox One-enheter som uppgraderats med version 1709 eller senare stöder "cbcs".
- Alla PlayReady-licensservrar som börjar med version 4.0 stöder utfärdande av licenser med CBC-nycklar.
Signalera ALGID i PlayReady-huvudet
PlayReady-huvudet är ett XML-dokument som vanligtvis ingår i rubriken för en innehållsfil eller dataström. Den beskriver de PlayReady-attribut som krävs för att en klient ska dekryptera det här innehållet. PlayReady-huvudet har en egen specifikation och versionshantering. Mer information finns i PlayReady-rubrikspecifikation.
| Utgåva | PlayReady Header 4.3 | PlayReady Header 4.2 | PlayReady Header 4.1 | PlayReady Header 4.0 |
|---|---|---|---|---|
| PlayReady Client 4.0 (se anmärkning 4) |
✔ | ✔ | ✔ | ✔ |
| PlayReady Client 3.3 (se anmärkning 3) |
✔ | ✔ | ✔ | |
| PlayReady Client 3.0 (se anmärkning 3) |
✔ | ✔ | ✔ | |
| PlayReady Client 2.5 (se anmärkning 2) |
✔ | ✔ | ||
| PlayReady Client 2.0 (se anmärkning 2) |
✔ | ✔ | ||
| PlayReady Client 1.0 (se anmärkning 1) |
✔ |
Anmärkning
- (4) Xbox One version 1709 eller senare är PlayReady 4.X-klienter.
- (3) Alla versioner av Windows 10 och Xbox One version 1703 eller lägre är PlayReady 3.X-klienter. Nyaste icke-Windows-enheter (t.ex. smarta TV-apparater) som släppts efter 2017 är PlayReady 3.X-klienter.
- (2) Silverlight och Windows 8, 8.1 är PlayReady 2.X-klienter. De flesta icke-Windows-enheter (till exempel smarta TV-apparater) som släpptes mellan 2011 och 2017 är PlayReady 2.X-klienter.
- (1) De flesta icke-Windows-enheter (till exempel smarta TV-apparater) som släpptes mellan 2008 och 2011 är PlayReady 1.X-klienter.
Följande är ett exempel på en PlayReady-rubrik 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 (algoritmidentifierare) är en egenskap för KID-elementet och anger krypteringsalgoritmen som användes för att kryptera innehållet. Från och med PlayReady Header version 4.2 krävs ALGID och måste anges till antingen "AESCTR" eller "COCKTAIL". Men från och med version 4.3 kan ALGID också anges till värdet "AESCBC" . I följande exempel visas en PlayReady Header version 4.3 med ALGID-värdena inställda på "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>
Följande bild visar ett innehållsflöde, där licensbegäran baseras på PlayReady-huvudet och ALGID anges.
Saknade ALGID:ar
Från och med PlayReady Header version 4.3 kanske ALGID saknas. I följande exempel visas en PlayReady Header version 4.3 med ALGID-värden som saknas.
<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>
Följande bild visar ett innehållsflöde, där licensbegäran använder CDMi-modulen och ALGID saknas.
Anmärkning
Varje PlayReady-rubrik kan ha:
- Endast en krypteringstyp. Om till exempel ALGID="AESCTR" används alla nycklar för rubriken i CTR-läge. När ALGID="AESCBC" används alla nycklar i det här rubriken i CBC-läget.
- När ALGID saknas används alla nycklar för denna rubrik i räknarläge eller chifferblockskedja, men värdet infogas inte i rubriken.
- Att göra en begäran om licensförvärv med ett PlayReady-huvud v4.3 till en licensserver under v4.0 utlöser ett undantag.
- Ett licenssvar kan innehålla en eller flera licenser, där varje licens innehåller en nyckel och valfritt antal principer.
Varför ALGID-värdet saknas
Microsoft rekommenderar att krypterare alltid innehåller samma ALGID-värde i PlayReady-huvudet som de inkluderade när de bearbetade innehållet.
I ett standardscenario krypterar krypteraren innehåll och genererar PlayReady-huvudet i innehållet. Krypteringsnyckeln vet vilket AES-läge den använde för kryptering. Därför innehåller den den här informationen i ALGID-egenskapen för PlayReady-huvudet. Klienter initierar licensbegäranden baserat på PlayReady-huvuden som parsats ut från verkligt innehåll, så ALGID-värdet är närvarande och giltigt.
I vissa fall initierar klienten en licensbegäran baserat på ett enkelt KID-värde (ett 128-bitars GUID). I det här fallet kommer ALGID-värdet i PlayReady-huvudet som infogas i licensbegäran att saknas (även kallat ospecificerat). Ett exempel är när klienten gör en licensbegäran med hjälp av HTML5 EME-API:er.
Hur klienten hanterar en saknad ALGID
Om klienten initierar en licensbegäran baserat på en inkommande PlayReady-rubrik kommer ALGID-värdet i licensbegäran att återspegla värdet som finns i rubriken eftersom licensförvärvsutmaningen innehåller en kopia av PlayReady-huvudet. I det här fallet:
- För alla PlayReady-huvuden v4.2 eller lägre krävs ALGID-värdet och måste vara giltigt.
- För PlayReady-huvuden v4.3 eller senare kan ALGID-värdet vara närvarande och giltigt eller saknas.
Så hanterar Server SDK en algid som saknas
Alla licenser som levereras via ett licenssvar MÅSTE innehålla ett giltigt ALGID-värde.
Om ALGID är ospecificerat i den inkommande licensbegäran måste licensservern hämta den här informationen från tjänstens serverdel och ange rätt värde i licenssvaret.
Initieringsvektorer (IV: er)
I PlayReady-versionerna 3.3 och tidigare stöds endast 64-bitars IV:er (8 byte-IV:er) i CTR-läge. Från och med PlayReady version 4.0 stöds både 64-bitars- och 128-bitars-IV:er (8 byte och 16 byte-IV:er) både i CTR- och CBC-lägen.
Exempel:
- HLS-kompatibla strömmar som ofta använder 128-bitars-IV:er i CBC-läge stöds nu.
- Vissa HbbTV-konforma strömmar som använder 128-bitars IV:er i CTR-läge stöds nu.
Begränsningar
- En PlayReady-rubrik får bara använda ett ALGID-värde för alla KID-element. Med andra ord måste alla nycklar som används för att kryptera de olika spåren och egenskaperna för en tillgång vara AES CTR eller AES CBC. Om ALGID saknas på ett KID-element måste det saknas i alla KID-element.
- Innan PlayReady version 4.4 genererar du en licens med en CBC-nyckel när det inkommande klientcertifikatet är Windows och SL2000 utlöser ett undantag. Det beror på att Windows-klienter endast stöder CBC på SL3000-enheter. Det kan dock vara möjligt att leverera en licens med en CBC-nyckel till en SL2000-klient, men endast om den här klienten är av PlayReady version minst 4.0 och anger sig stödja CBC-läget.
- Om du genererar en licens med en CBC-nyckel när det inkommande klientcertifikatet är en enhet som använder en Porting Kit-version före 4.0 genereras ett undantag.
- Om du genererar en licens med en CBC-nyckel när den inkommande licensbegäran inte anger stöd för AES CBC utlöser du ett undantag.
Viktigt!
Tjänster får inte kryptera ett enda innehåll i CTR-läge och i CBC-läge med samma {KID, Ck}.
- Av funktionella skäl skulle en klient som hämtar både en licens för {KID, Ck, AESCTR} och för {KID, Ck, AESCBC} inte fungera.
- Av robusthetsskäl kan en angripare som har åtkomst till samma innehåll krypterat med samma nyckel både i CBC- och CTR-lägen enklare dekryptera innehåll utan auktorisering.