Поделиться через


Идентификаторы ключей и ключей (KID)

Каждый файл мультимедиа, защищенный 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> элементов. KID (идентификатор ключа) содержит глобальный уникальный идентификатор (GUID), который клиент использует для запроса сервера соответствующего ключа и ALGID, который затем используется для расшифровки файла. KID является общедоступным, так как он содержится в PRO, но сам ключ является секретом для службы, а связь между ключом и KID известна только службе.

Создание ключа и шифрование содержимого

Ключи шифрования содержимого в системах PlayReady — ключи AES-128 CTR и AES-128 CBC. Служба, которая шифрует содержимое, создает новый KID и новый ключ содержимого. KID вставляется в PRO, а видео и аудиокадры содержимого шифруются с помощью ключа содержимого. На следующем рисунке показано, как создается ключ, а затем используется для шифрования содержимого.

 

PlayReady content encryption flow

 

Существует два способа создания КИД и ключа, в том числе:

  • С помощью системы управления ключами (KMS), где служба случайным образом создает каждое значение KID и ключ и сохраняет их, и может просто искать значение ключа, соответствующее KID, предоставленному клиентом.
  • Использование механизма начального значения ключа PlayReady . С помощью этого механизма служба определяет постоянное значение, называемое начальным значением ключа (30-байтовое случайное значение), а для каждого фрагмента содержимого, требующего ключа, создает случайный КИД. С помощью пакета SDK для сервера можно создать ключ, предоставив 128 бит ключа или начальное значение ключа и KID. Ключ будет выведен алгоритмом PlayReady, указанным здесь.

Независимо от того, как вы создаете ключ, вы должны иметь возможность убедиться, что он соответствует правильному KID, а затем зашифровать содержимое.

Предоставление лицензии для содержимого

Когда клиент отправляет запрос на лицензию, он отправляет заголовок PlayReady содержимого издателю лицензии. Издатель лицензии извлекает KID и определяет соответствующее значение ключа, используя один из описанных выше методов, если используется механизм начального значения ключа, он просто повторно создает ключ на основе начального значения KID и начального значения ключа. Затем он создает лицензию, включая этот ключ, который он отправляет клиенту в ответе лицензии.

Например, предположим, что у вас есть видеофайл. Упаковщик для этого содержимого создает случайный КИД 123, который вставляется в заголовок PlayReady файла. Упаковщик также создает случайное значение ABC ключа, соответствующее KID123, и сохраняет их в KMS. Упаковщик запрашивает у KMS правильный ключ для шифрования файла и шифрует файл с помощью ключаABC. Когда клиент пытается воспроизвести файл, клиент запрашивает у издателя лицензии лицензию, соответствующую KID 123. Издатель лицензии ищет KID в KMS и отвечает с помощью лицензии, включая ключABC, который позволяет клиенту разблокировать файл, и клиент может просмотреть его.

Примечание

Лицензия, отправленная издателем лицензии клиенту (в нашем примере лицензия, содержащая ключ ABC), шифруется; злоумышленник не может перехватить значение ключа.

Ключ, используемый для защиты файла мультимедиа и ключа в лицензии, совпадают; Таким образом, упаковщик содержимого и издатель лицензии должны иметь возможность получить или создать тот же ключ для указанного файла мультимедиа. Для этого, если вы используете начальное значение ключа для создания ключей, необходимо поделиться им между упаковщиком содержимого и издателем лицензии.

Совместное использование ключей между файлами или дорожками

Так же, как реальный ключ может разблокировать несколько дверей, технически можно использовать один ключ PlayReady для разблокировки нескольких дорожек в одном файле или даже нескольких файлов в коллекции ресурсов. Во время упаковки упаковщик содержимого может указать один и тот же идентификатор ключа для нескольких дорожек или нескольких файлов мультимедиа, а для них используется один и тот же ключ.

Например, с многокачественный видеоматериал с 4K, HD и SD видеодорожками и несколькими звуковыми дорожками, шифратор имеет возможность определять один ключ на дорожку или один ключ для всех дорожек.

Клиентам потребуется лицензия на каждый из ключей, которые у них есть право расшифровать. Обратите внимание, что доставка нескольких лицензий может выполняться сервером лицензирования в одном ответе лицензии.

В одном ресурсе с несколькими дорожками решение между одним ключом для всех дорожек или ключом для каждой дорожки выполняется службой управления содержимым и на основе следующих критериев:

  • Дополнительные ключи усложняют работу, но позволяют указать во время доставки лицензий то, что отслеживает служба, чтобы разрешить конкретному клиенту расшифровку.
  • Меньше ключей является менее сложным, но не позволяет указывать во время доставки лицензий, что отслеживает служба, чтобы разрешить конкретному клиенту расшифровку.
  • Некоторые клиенты могут иметь ограничение, которое они не поддерживают несколько ключей для одного ресурса.

Примечание

Хотя ключи PlayReady могут разблокировать несколько цифровых файлов мультимедиа, корпорация Майкрософт решительно против этого. Использование уникальных ключей во всех файлах обеспечивает большую безопасность, чем защита файлов с одним и тем же ключом.

Размещение лицензий в ответе на лицензии

Один ответ на лицензию также может содержать несколько лицензий и, следовательно, несколько ключей для разблокировки нескольких файлов или дорожек в одной транзакции. Это более эффективно, чем создание нескольких ответов для нескольких лицензий, так как оно включает только одну транзакцию. Это может быть полезно для разных сценариев:

  • Один файл мультимедиа шифруется с помощью нескольких ключей. Например, видеодорожка шифруется с помощью Key1, а звуковая дорожка шифруется с помощью Key2. Когда клиент запрашивает лицензию для KID1, сервер лицензирования выдает ответ лицензии, включая лицензии НА KID1 и KID2, поэтому у клиента есть все ключи для расшифровки видео и звуковых дорожек файла.
  • Каждая песня в альбоме шифруется с помощью другого ключа, но клиент приобрел права для всех из них. Когда клиент начинает воспроизводить первую песню, сервер лицензирования выдает ответ лицензии, включая одну лицензию для каждой песни в альбоме, поэтому клиент имеет все ключи, необходимые для легкого воспроизведения всего альбома.
  • Ожидается, что ключ для канала в прямом эфире будет меняться каждые 24 часа. При запуске воспроизведения сервер отправляет ответ лицензии, включая лицензию для текущего ключа, но и лицензию со следующим ключом, поэтому при изменении ключа клиент уже получит следующий ключ, и изменение происходит без проблем.

См. также:

Спецификация заголовка PlayReady

Упаковка содержимого