Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом разделе представлен обзор режимов шифрования содержимого в системах PlayReady. Общие сведения о шифровании контента PlayReady и шифровании содержимого см. в разделе "Шифрование содержимого PlayReady". См. глоссарий для терминов и определений шифрования.
PlayReady версии 1.0 ввела режим шифрования содержимого AES-128 CTR, в дополнение к специфическому для Microsoft режиму шифрования COCKTAIL, который использовался ранее в WMDRM (Windows Media Digital Rights Management). В режиме шифрования содержимого AES-128 CTR используются ключи AES с длиной 128 бит, используемых в файлах содержимого в режиме счетчика (CTR).
Начиная с версии 4.0 системы PlayReady поддерживают 128-разрядные ключи AES в режиме счетчика (CTR) и режиме цепочки блоков шифров (CBC).
Это изменение гарантирует, что службы с помощью PlayReady могут полностью воспользоваться уникальным форматом потока и файла на всех устройствах. Кроме того, корпорация Майкрософт поддерживает стандарт CMAF (общий формат приложения мультимедиа), как определено в iso/IEC ПИИ 23000-19.
Общие режимы шифрования
Стандарт ISO/IEC 23001-7 определяет четыре режима общего шифрования.
Клиенты PlayReady, начиная с версии 4.0, поддерживают ключи AES CBC, что позволяет поддерживать общий режим шифрования cbcs, а также ключи AES CTR для общего режима шифрования cenc. До версии 4.0 AES CTR был режимом, который в основном поддерживается клиентами PlayReady, что позволяет поддерживать режим общего шифрования cenc. Обратите внимание, что общие режимы шифрования "cens" и "cbc1" разрешены и технически доступны в экосистеме PlayReady, но не поддерживаются.
Поддержка схемы шифрования 'cbcs' AES-CBC
Все клиенты, созданные на основе PlayReady PK версии 4.0, могут поддерживать ключи CBC. Поддержка для клиентов является необязательной, но, если она предоставляется, сигнализируется серверам лицензий через дополнительное свойство в протоколе приобретения лицензий.
Версия | КОКТЕЙЛЬ | ценз | cbcs |
---|---|---|---|
Клиент PlayReady 1.0 | поддерживаемый | поддерживаемый | Не поддерживается |
PlayReady Client 2.0 | поддерживаемый | поддерживаемый | Не поддерживается |
Клиент PlayReady 2.5 | поддерживаемый | поддерживаемый | Не поддерживается |
Клиент PlayReady 3.0 | Не поддерживается | поддерживаемый | Не поддерживается |
Клиент PlayReady 3.3 | Не поддерживается | поддерживаемый | Не поддерживается |
Клиент PlayReady 4.0 | Не поддерживается | поддерживаемый | поддерживаемый |
Замечание
- Все устройства Xbox One, обновленные до версии 1709 или более поздней, поддерживают 'cbcs'.
- Все серверы лицензий PlayReady, начиная с версии 4.0, поддерживают выдачу лицензий с помощью ключей CBC.
Сигнализация ALGID в заголовке PlayReady
Заголовок PlayReady — это XML-документ, который обычно включается в заголовок файла содержимого или потока. В нем описываются атрибуты PlayReady, необходимые для расшифровки этого содержимого клиентом. Заголовок PlayReady имеет собственную спецификацию и версионирование. Для получения дополнительной информации см. спецификацию заголовка PlayReady.
Версия | Заголовок PlayReady 4.3 | Заголовок PlayReady 4.2 | Заголовок PlayReady 4.1 | Заголовок PlayReady 4.0 |
---|---|---|---|---|
Клиент PlayReady 4.0 (см. примечание 4) |
✔ | ✔ | ✔ | ✔ |
Клиент PlayReady 3.3 (см. примечание 3) |
✔ | ✔ | ✔ | |
Клиент PlayReady 3.0 (см. примечание 3) |
✔ | ✔ | ✔ | |
Клиент PlayReady 2.5 (см. примечание 2) |
✔ | ✔ | ||
PlayReady Client 2.0 (см. примечание 2) |
✔ | ✔ | ||
Клиент PlayReady 1.0 (см. примечание 1) |
✔ |
Замечание
- (4) Xbox One версии 1709 или более поздней — клиенты PlayReady 4.X.
- (3) Windows 10 для всех версий и Xbox One версии 1703 или ниже — клиенты PlayReady 3.X. Новейшие устройства, отличные от Windows (например, смарт-телевизоры), выпущенные после 2017 года, являются клиентами PlayReady 3.X.
- (2) Silverlight и Windows 8, 8.1 — клиенты PlayReady 2.X. Большинство устройств, отличных от Windows (например, смарт-телевизоров), выпущенных в период с 2011 по 2017 год, являются клиентами PlayReady 2.X.
- (1) Большинство устройств, отличных от Windows (например, смарт-телевизоров), выпущенных в период с 2008 по 2011 год, являются клиентами PlayReady 1.X.
Ниже приведен пример заголовка PlayReady версии 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 (идентификатор алгоритма) является свойством элемента KID и задает алгоритм шифрования, используемый для шифрования содержимого. Начиная с PlayReady Header версии 4.2, ALGID является обязательным и должен иметь значение AESCTR или COCKTAIL. Однако, начиная с версии 4.3, значение "AESCBC" также может быть установлено для ALGID. Следующий пример демонстрирует заголовок PlayReady версии 4.3, в котором параметры ALGID установлены на значение "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>
На следующем рисунке показан поток содержимого, где запрос лицензии основан на заголовке PlayReady и указан ALGID.
Отсутствующие ALGIDs
Начиная с заголовка PlayReady версии 4.3, ALGID может отсутствовать. В следующем примере показан заголовок PlayReady версии 4.3 с отсутствующими значениями 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>
На следующем рисунке показан поток содержимого, в котором запрос лицензии использует модуль CDMi, а ALGID отсутствует.
Замечание
У каждого заголовка PlayReady может быть:
- Только один тип шифрования. Например, если ALGID="AESCTR", все ключи, связанные с заголовком, используются в режиме CTR. Когда ALGID="AESCBC", все ключи для этого заголовка используются в режиме CBC.
- Если ALGID отсутствует, все ключи, относящиеся к этому заголовку, используются в режиме счётчика или режиме цепочки блоков шифрования, но его значение не вставляется в заголовок.
- Создание запроса на получение лицензии с заголовком PlayReady версии 4.3 на сервер лицензий с версией ниже 4.0 вызовет исключение.
- Ответ на лицензию может включать одну или несколько лицензий, где каждая лицензия содержит один ключ и любое количество политик.
Почему значение ALGID отсутствует
Корпорация Майкрософт рекомендует, чтобы шифраторы всегда включали то же значение ALGID в заголовок PlayReady, который они включали при обработке содержимого.
В стандартном сценарии шифратор шифрует содержимое и создает заголовок PlayReady в содержимом. Шифратор знает, какой режим AES он использовал для шифрования; таким образом, он содержит эти сведения в свойстве ALGID заголовка PlayReady. Клиенты инициируют запросы лицензий на основе заголовков PlayReady, проанализированных из реального содержимого, поэтому значение ALGID присутствует и допустимо.
В некоторых сценариях клиент инициирует запрос лицензии на основе простого значения KID (128-разрядного GUID). В этом случае значение ALGID в заголовке PlayReady, вставленное в запрос на лицензию, будет отсутствует (также известное как не указано). Один из примеров заключается в том, что клиент выполняет запрос на лицензию с помощью API EME HTML5.
Как клиент обрабатывает отсутствующий ALGID
Если клиент инициирует запрос лицензии на основе входящего заголовка PlayReady, то значение ALGID в запросе лицензии будет отражать значение, найденное в заголовке, так как задача приобретения лицензии включает копию заголовка PlayReady. В данном случае:
- Для всех заголовков PlayReady версии 4.2 или ниже требуется значение ALGID и должно быть допустимым.
- Для заголовков PlayReady версии 4.3 или позже значение ALGID может присутствовать и быть допустимым, или отсутствовать.
Как пакет SDK сервера обрабатывает отсутствующий ALGID
Все лицензии, предоставляемые с помощью ответа на лицензию, должны содержать допустимое значение ALGID.
Если ALGID не указан в запросе на входящие лицензии, сервер лицензий должен получить эти сведения из серверной части службы и поместить правильное значение в ответ на лицензию.
Вектора Инициализации (ВИ)
В PlayReady версии 3.3 и более ранних версиях поддерживаются только 64-разрядные IV (8-байтовые IV) в режиме CTR. Начиная с PlayReady версии 4.0, в режимах CTR и CBC поддерживаются 64-разрядные и 128-разрядные IVs (8-байтовые и 16-байтовые IV).
Примеры.
- Теперь поддерживаются потоки, совместимые с HLS, которые часто используют 128-разрядные IV в режиме CBC.
- Теперь поддерживаются некоторые потоки, соответствующие стандартам HbbTV, использующие 128-битные начальные значения (IV) в режиме CTR.
Ограничения
- Заголовок PlayReady должен использовать только одно значение ALGID для всех элементов KID. Другими словами, все ключи, используемые для шифрования различных треков и качеств ресурса, должны быть AES CTR или AES CBC. Если ALGID отсутствует в любом элементе KID, он должен быть отсутствует во всех элементах KID.
- До версии PlayReady 4.4, создание лицензии с ключом CBC при получении клиентского сертификата для Windows и SL2000 вызывает исключение. Это связано с тем, что клиенты Windows поддерживают CBC только в единицах SL3000. Можно предоставить лицензию с ключом CBC клиенту SL2000, если этот клиент использует PlayReady версии 4.0 или выше и заявляет поддержку режима CBC.
- Создание лицензии с ключом CBC, если входящий сертификат клиента — это устройство, использующее версию комплекта портов до версии 4.0, вызовет исключение.
- Создание лицензии с ключом CBC, если входящий запрос на лицензию не указывает на поддержку AES CBC, вызовет исключение.
Это важно
Службы не должны шифровать один фрагмент содержимого в режиме CTR и в режиме CBC с помощью того же {KID, Ck}.
- По функциональным причинам клиент, приобретающий лицензию для {KID, Ck, AESCTR} и для {KID, Ck, AESCBC}, может не функционировать.
- По соображениям надежности злоумышленник, имеющий доступ к одному содержимому, зашифрованному с одним и тем же ключом в режимах CBC и CTR, может более легко расшифровать содержимое без авторизации.