Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ten temat zawiera omówienie trybów szyfrowania zawartości w systemach PlayReady. Aby uzyskać omówienie PlayReady i szyfrowania zawartości, zobacz PlayReady Content Encryption. Zobacz Słownik terminów i definicji szyfrowania.
PlayReady w wersji 1.0 wprowadził tryb szyfrowania zawartości AES-128 CTR, oprócz trybu szyfrowania KOKTAJL specyficznego dla firmy Microsoft, który był wcześniej używany w WMDRM (Windows Media Digital Rights Management). Tryb szyfrowania zawartości AES-128 CTR używa kluczy AES o długości 128 bitów używanych w plikach zawartości w trybie licznika (CTR).
Począwszy od wersji 4.0, systemy PlayReady obsługują klucze 128-bitowe AES w trybie licznika (CTR) i w trybie łańcucha bloków szyfrowania (CBC).
Ta zmiana gwarantuje, że usługi korzystające z usługi PlayReady mogą w pełni korzystać z unikatowego strumienia i formatu plików na wszystkich urządzeniach. Ponadto firma Microsoft obsługuje standard CMAF (Common Media Application Format), zgodnie z definicją w standardzie ISO/IEC FDIS 23000-19.
Typowe tryby szyfrowania
Standard ISO/IEC 23001-7 definiuje cztery tryby wspólnego szyfrowania.
Klienci PlayReady począwszy od wersji 4.0 obsługują klucze CBC AES, co umożliwia obsługę trybu szyfrowania wspólnego "cbcs", oprócz kluczy CTR AES dla trybu szyfrowania wspólnego "cenc". Przed wersją 4.0 usługa AES CTR była trybem obsługiwanym głównie przez klientów PlayReady, który umożliwia obsługę trybu "cenc" w trybie common encryption. Należy pamiętać, że tryby Szyfrowania Zwykłego "cens" i "cbc1" są dozwolone i technicznie wykonalne w ekosystemie PlayReady, ale nie są obsługiwane.
Obsługa schematu szyfrowania "cbcs" AES-CBC
Wszyscy klienci zbudowani w oparciu o lub po wersji 4.0 PlayReady PK mogą obsługiwać klucze CBC. Obsługa jest jednak opcjonalna dla klientów i sygnalizowana serwerom licencji za pośrednictwem dodatkowej właściwości w protokole pozyskiwania licencji.
| wersja | KOKTAJL | "cenc" | "cbcs" |
|---|---|---|---|
| PlayReady Client 1.0 | Obsługiwane | Obsługiwane | niewspierane |
| PlayReady Client 2.0 | Obsługiwane | Obsługiwane | niewspierane |
| PlayReady Client 2.5 | Obsługiwane | Obsługiwane | niewspierane |
| PlayReady Client 3.0 | niewspierane | Obsługiwane | niewspierane |
| PlayReady Client 3.3 | niewspierane | Obsługiwane | niewspierane |
| PlayReady Client 4.0 | niewspierane | Obsługiwane | Obsługiwane |
Uwaga / Notatka
- Wszystkie konsole Xbox One uaktualnione do wersji 1709 lub nowszej obsługują 'cbcs'.
- Wszystkie serwery licencji PlayReady począwszy od wersji 4.0 obsługują wydawanie licencji przy użyciu kluczy CBC.
Sygnalizowanie identyfikatora ALGID w nagłówku PlayReady
Nagłówek PlayReady jest zwykle dokumentem XML zawartym w nagłówku pliku zawartości lub strumienia. Opisuje atrybuty PlayReady potrzebne klientowi do odszyfrowania tej zawartości. Nagłówek PlayReady ma własną specyfikację i wersjonowanie. Więcej informacji można znaleźć w Specyfikacji nagłówka PlayReady.
| wersja | Nagłówek PlayReady 4.3 | Nagłówek PlayReady 4.2 | Nagłówek PlayReady 4.1 | Nagłówek PlayReady 4.0 |
|---|---|---|---|---|
| PlayReady Client 4.0 (patrz uwaga 4) |
✔ | ✔ | ✔ | ✔ |
| PlayReady Client 3.3 (patrz uwaga 3) |
✔ | ✔ | ✔ | |
| PlayReady Client 3.0 (patrz uwaga 3) |
✔ | ✔ | ✔ | |
| PlayReady Client 2.5 (patrz uwaga 2) |
✔ | ✔ | ||
| PlayReady Client 2.0 (patrz uwaga 2) |
✔ | ✔ | ||
| PlayReady Client 1.0 (patrz uwaga 1) |
✔ |
Uwaga / Notatka
- (4) Konsola Xbox One w wersji 1709 lub nowszej to klienci PlayReady 4.X.
- (3) Wszystkie wersje systemu Windows 10 i Konsola Xbox One w wersji 1703 lub starszej to Klienci PlayReady 3.X. Najnowsze urządzenia z systemem innych niż Windows (np. Smart TVs) wydane po 2017 r. to klienci PlayReady 3.X.
- (2) Silverlight i Windows 8, 8.1 są klientami oprogramowania PlayReady 2.X. W latach 2011-2017 większość urządzeń z systemem innych niż Windows (np. Smart TV) jest klientami PlayReady 2.X.
- (1) W latach 2008-2011 większość urządzeń innych niż Windows (np. Smart TV) jest klientami PlayReady 1.X.
Poniżej przedstawiono przykład nagłówka PlayReady w wersji 4.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 (identyfikator algorytmu) jest właściwością elementu KID i określa algorytm szyfrowania używany do szyfrowania zawartości. Począwszy od playReady Header w wersji 4.2, algID jest wymagany i musi być ustawiony na "AESCTR" lub "COCKTAIL". Jednak począwszy od wersji 4.3, identyfikator ALGID można również ustawić na wartość "AESCBC". W poniższym przykładzie przedstawiono nagłówek PlayReady w wersji 4.3 z wartościami ALGID ustawionymi 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>
Na poniższej ilustracji przedstawiono przepływ zawartości, w którym żądanie licencji jest oparte na nagłówku PlayReady i identyfikator ALGID jest określony.
Brakujące identyfikatory ALGID
Począwszy od nagłówka PlayReady w wersji 4.3, może brakować identyfikatora ALGID. W poniższym przykładzie pokazano nagłówek PlayReady w wersji 4.3 z brakującymi wartościami 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>
Na poniższej ilustracji przedstawiono przepływ zawartości, w którym żądanie licencji korzysta z modułu CDMi, a brakuje identyfikatora ALGID.
Uwaga / Notatka
Każdy nagłówek PlayReady może mieć następujące elementy:
- Tylko jeden typ szyfrowania. Jeśli na przykład ALGID="AESCTR", wszystkie klucze dla nagłówka są używane w trybie CTR. Gdy ALGID="AESCBC", wszystkie klucze w tym nagłówku są używane w trybie CBC.
- Gdy brakuje identyfikatora ALGID, wszystkie klucze dla tego nagłówka są używane w trybie licznika lub łańcuchu bloków szyfrowania, ale wartość nie jest wstawiana w nagłówku.
- Wykonanie żądania uzyskania licencji za pomocą nagłówka PlayReady w wersji 4.3 na serwerze licencji poniżej wersji 4.0 zgłosi wyjątek.
- Odpowiedź na licencję może zawierać jedną lub wiele licencji, gdzie każda licencja zawiera jeden klucz i dowolną liczbę zasad.
Dlaczego brakuje wartości ALGID
Firma Microsoft zaleca, aby szyfratory zawsze zawierały tę samą wartość ALGID w nagłówku PlayReady, którą zawierały podczas przetwarzania zawartości.
W standardowym scenariuszu szyfrator szyfruje zawartość i generuje nagłówek PlayReady w ramach zawartości. Szyfrujący wie, który tryb AES był używany do szyfrowania; w związku z tym zawiera te informacje we właściwości ALGID nagłówka PlayReady. Klienci inicjują żądania licencji na podstawie nagłówków PlayReady przeanalizowanych z rzeczywistej zawartości, więc wartość ALGID jest obecna i prawidłowa.
W niektórych scenariuszach klient inicjuje żądanie licencji na podstawie prostej wartości KID (128-bitowego identyfikatora GUID). W takim przypadku w nagłówku PlayReady wstawionym w żądaniu licencji brakuje wartości ALGID (również znanej jako nieokreślona). Jednym z przykładów jest to, że klient wysyła żądanie licencji przy użyciu interfejsów API EME HTML5.
Jak Klient radzi sobie z brakiem identyfikatora ALGID
Jeśli klient inicjuje żądanie licencji na podstawie przychodzącego nagłówka PlayReady, wartość ALGID w żądaniu licencji będzie odzwierciedlać wartość znalezioną w nagłówku, ponieważ wyzwanie pozyskiwania licencji zawiera kopię nagłówka PlayReady. W tym przypadku:
- W przypadku wszystkich nagłówków PlayReady w wersji 4.2 lub starszej wymagana jest wartość ALGID i musi być prawidłowa.
- W przypadku nagłówków PlayReady w wersji 4.3 lub nowszej wartość ALGID może być obecna i prawidłowa lub brakuje.
Jak zestaw SDK serwera obsługuje brakujący identyfikator ALGID
Wszystkie licencje dostarczane za pośrednictwem odpowiedzi na licencje MUSZĄ zawierać prawidłową wartość ALGID.
Jeśli identyfikator ALGID nie jest określony w przychodzącym żądaniu licencji, serwer licencji musi uzyskać te informacje z zaplecza usługi i umieścić odpowiednią wartość w odpowiedzi licencji.
Wektory inicjowania (IV)
W wersjach PlayReady 3.3 i starszych tylko 64-bitowe wektory inicjalizujące (8-bajtowe wektory inicjalizujące) są obsługiwane w trybie CTR. Począwszy od PlayReady w wersji 4.0, zarówno 64-bitowe, jak i 128-bitowe wektory inicjalizujące (IV) o długości 8 bajtów i 16 bajtów są obsługiwane w trybach CTR i CBC.
Przykłady:
- Obsługiwane są teraz strumienie zgodne ze standardem HLS, które często używają 128-bitowych wektorów inicjalizujących w trybie CBC.
- Niektóre strumienie zgodne z HbbTV, wykorzystujące wektory inicjalizacyjne o długości 128 bitów w trybie CTR, są teraz obsługiwane.
Ograniczenia
- Nagłówek PlayReady musi używać tylko jednej wartości ALGID dla wszystkich elementów KID. Innymi słowy, wszystkie klucze używane do szyfrowania różnych ścieżek i cech zasobu muszą być AES CTR lub AES CBC. Jeśli identyfikator ALGID brakuje w dowolnym elemencie KID, to musi go brakować we wszystkich elementach KID.
- Przed programem PlayReady w wersji 4.4 generowanie licencji z kluczem CBC, gdy przychodzący certyfikat klienta to Windows i SL2000 zgłasza wyjątek. Jest to spowodowane tym, że klienci systemu Windows obsługują CBC tylko w jednostkach SL3000. Może być możliwe dostarczenie licencji z kluczem CBC do klienta SL2000, jeśli ten klient ma wersję PlayReady co najmniej 4.0 i deklaruje obsługę trybu CBC.
- Generowanie licencji przy użyciu klucza CBC, gdy przychodzący certyfikat klienta jest związany z urządzeniem korzystającym z Porting Kit w wersji wcześniejszej niż 4.0, doprowadzi do zgłoszenia wyjątku.
- Generowanie licencji przy użyciu klucza CBC, gdy przychodzące żądanie licencji nie wskazuje obsługi AES CBC, spowoduje wyjątek.
Ważne
Usługi nie mogą szyfrować pojedynczej zawartości w trybie CTR i w trybie CBC przy użyciu tego samego {KID, Ck}.
- Ze względów funkcjonalnych klient uzyskujący licencję dla {KID, Ck, AESCTR} i {KID, Ck, AESCBC} nie będzie działać.
- Ze względu na niezawodność osoba atakująca mająca dostęp do tej samej zawartości zaszyfrowanej przy użyciu tego samego klucza zarówno w trybach CBC, jak i CTR, może łatwiej odszyfrować zawartość bez autoryzacji.