Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Каждый файл мультимедиа, защищенный PlayReady, имеет объект PlayReady (PRO), содержащий несколько элементов информации, необходимых PlayReady. Это находится в заголовке содержимого файла, который, например, может содержать метаданные для видео и звуковых треков.
В каждом PRO есть заголовок PlayReady, который предоставляет клиенту сведения, необходимые для поиска или получения лицензии на тот контент, в котором он хранится. Заголовок PlayReady выглядит примерно так:
<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>
Часть, которая нас интересует, это элемент <KIDS>
, содержащий один или несколько элементов <KID>
. КИД (идентификатор ключа) содержит глобальный уникальный идентификатор (GUID), который клиент использует для запроса сервера соответствующего ключа и ALGID, который затем используется для расшифровки файла. KID является общедоступным, так как он содержится в PRO, но ключ сам является секретом службы, а связь между ключом и KID известна только службе.
Создание ключа и шифрование содержимого
Ключи шифрования содержимого в системах PlayReady — это ключи AES-128 CTR и AES-128 CBC. Служба, которая шифрует содержимое, создает новый идентификатор KID и новый ключ контента. КИД вставляется в PRO, а видео и аудиокадры содержимого шифруются с помощью ключа для шифрования содержимого. На следующем рисунке показано, как создается ключ, а затем используется для шифрования содержимого.
Существует два способа создания КИД и ключа, в том числе:
- Используя систему управления ключами (KMS), где служба случайным образом создает каждое значение КИД и ключ и сохраняет их, и может просто искать значение ключа, соответствующее КИД, предоставленному клиентом.
- Использование механизма начального значения ключа PlayReady . С помощью этого механизма служба определяет константное значение, называемое начальной частью ключа (30-байтовое случайное значение), а для каждого содержимого, требующего ключа, создает случайный КИД. С помощью пакета SDK для сервера можно создать ключ, предоставив 128 бит ключа или начальное значение ключа и KID. Ключ будет выведен алгоритмом PlayReady, указанным здесь.
Независимо от того, как вы создаете ключ, необходимо убедиться, что он соответствует правильному КИД, а затем зашифровать содержимое.
Предоставление лицензии для содержимого
Когда клиент отправляет запрос на лицензию, он отправляет заголовок содержимого PlayReady лицензиару. Издатель лицензии извлекает КИД и определяет соответствующее значение ключа, используя один из методов, описанных выше, если он использует механизм начального значения ключа, он просто повторно создает ключ на основе начального значения КИД и начального значения ключа. Затем он создает лицензию, включая этот ключ, который он отправляет клиенту в ответе на лицензию.
Например, предположим, что у вас есть видеофайл. Упаковщик для этого содержимого создает случайный KID 123
, который он вставляет в заголовок файла PlayReady. Упаковщик также создает случайное значение ABC
ключа для соответствия КИД 123
, и сохраняет их в KMS. Упаковщик запрашивает KMS для правильного ключа для шифрования файла и шифрует файл с помощью ключа ABC
. Когда клиент пытается воспроизвести файл, клиент запрашивает у издателя лицензии лицензию, соответствующую KID 123
. Лицензиар ищет KID в KMS и отвечает лицензией, включая ключ ABC
, который позволяет клиенту разблокировать файл, и клиент может просматривать его.
Замечание
Лицензия, отправленная издателем лицензии клиенту (в нашем примере лицензия, содержащая ключ), шифруется; злоумышленник не может перехватывать значение ключа ABC
.
Ключ, используемый для защиты файла мультимедиа и ключа в лицензии, совпадают; Таким образом, упаковщик содержимого и издатель лицензий должны иметь возможность получить или создать тот же ключ для указанного файла мультимедиа. Для этого, если вы используете начальное значение ключа для создания ключей, необходимо поделиться им между упаковщиком содержимого и издателем лицензии.
Общий доступ к ключам между файлами или треками
Так же, как реальный ключ может разблокировать несколько дверей, технически можно использовать один ключ PlayReady для разблокировки нескольких треков в одном файле или даже нескольких файлов в коллекции ресурсов. Во время упаковки пакетировщик содержимого может указать один и тот же идентификатор ключа для нескольких треков или нескольких файлов мультимедиа, а для них используется один и тот же ключ.
Например, с многокачественным видеоматериалом, содержащим 4K, HD и SD видеодорожки и несколько звуковых дорожек, шифратор имеет возможность определить один ключ для каждой из дорожек или один ключ для всех дорожек.
Клиентам потребуется лицензия на каждый из ключей, которые они имеют право расшифровать. Обратите внимание, что доставка нескольких лицензий может выполняться сервером лицензий в одном ответе.
В одном ресурсе с несколькими треками решение между одним ключом для всех треков или ключом для каждой дорожки выполняется службой управления содержимым и на основе следующих критериев:
- Дополнительные ключи усложняют работу, но позволяют при доставке лицензии указать, какие дорожки сервис хочет разрешить расшифровать конкретному клиенту.
- Меньшее количество ключей делает систему менее сложной, но не позволяет вам при доставке лицензии указать, какие треки служба хочет разрешить конкретному клиенту расшифровать.
- Некоторые клиенты могут иметь ограничение в том, что не поддерживается использование нескольких ключей для одного ресурса.
Замечание
Хотя ключи PlayReady могут разблокировать несколько цифровых файлов мультимедиа, корпорация Майкрософт решительно против этого. Использование уникальных ключей во всех файлах обеспечивает большую безопасность, чем защита файлов с одним ключом.
Накопление лицензий в ответе о лицензиях
Ответ на одну лицензию также может содержать несколько лицензий и, следовательно, несколько ключей для разблокировки нескольких файлов или треков в одной транзакции. Это эффективнее, чем создание нескольких ответов для нескольких лицензий, так как она включает только одну транзакцию. Это может быть полезно для различных сценариев:
- Один файл мультимедиа шифруется с помощью нескольких ключей. Например, видеосвязь шифруется с помощью key1, а звуковая дорожка шифруется с помощью Key2. Когда клиент запрашивает лицензию для KID1, сервер лицензий выдает ответ на лицензию, включая лицензии НА KID1 и KID2, поэтому у клиента есть все ключи для расшифровки видео и звуковых треков файла.
- Каждая песня в альбоме шифруется с помощью другого ключа, но клиент приобрел права для всех из них. Когда клиент начинает играть первую песню, сервер лицензий выдает ответ лицензии, включая одну лицензию для каждой песни в альбоме, поэтому клиент имеет все ключи, необходимые для легкого воспроизведения всего альбома.
- Ожидается, что ключ для канала на прямом телевидении будет меняться каждые 24 часа. При запуске воспроизведения сервер отправляет ответ с лицензией, включая лицензию для текущего ключа, а также лицензию со следующим ключом, поэтому при изменении ключа клиент уже будет иметь следующий ключ, и изменения происходят без проблем.