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

1. Введение

Эта спецификация применяется к любому конечному продукту, созданному с помощью пакета SDK для Сервера PlayReady, комплекта переносов устройств PlayReady, Windows, Xbox, Windows Phone и Silverlight.

1.1. История изменений

Версия Изменение
8 сентября 2021 г. Добавьте необязательный атрибут LICENSEREQUESTED в узел PROTECTINFO.
1 ноября 2017 г. Добавьте раздел "Требования к синтаксису". Исправлено несколько примеров с неправильным порядком атрибутов (атрибуты должны находиться в алфавитном порядке).
12 июля 2017 г. Добавьте раздел PlayReady Header 4.3.0.0, поддерживаемый начиная с PlayReady версии 4.
Добавление требования синтаксиса, что все XML-узлы должны быть явно закрыты закрывающим тегом
10 апреля 2015 г. Добавление раздела PlayReady Header 4.2.0.0, поддерживаемого начиная с PlayReady версии 3
Сентябрь 2011 г. Добавление раздела PlayReady Header 4.1.0.0, поддерживаемого начиная с PlayReady версии 2
Август 2008 г. Начальная версия документации заголовка PlayReady 4.0.0.0, поддерживаемого в PlayReady версии 1

2. Объект PlayReady (PRO)

Объект PlayReady (PRO) содержит следующие поля.

Имя поля Тип поля Размер (биты) Описание
Длина DWORD (32-битное целое число) 32 Длина объекта PlayReady в байтах. Это значение не должно превышать 15 килобайт (КБ).
Число записей объектов PlayReady СЛОВО 16 Указывает количество записей объектов PlayReady в объекте PlayReady.
Записи объектов PlayReady Массив BYTE Меняется Содержит переменное количество записей, содержащих сведения, связанные с лицензиями и приобретением лицензий.

2.1 Записи объектов PlayReady

Объект PlayReady состоит из дополнительных вложенных объектов с именем PlayReady Object Records. Записи объектов PlayReady содержат следующие поля.

Имя поля Тип поля Размер (битов) Описание
Тип записи СЛОВО 16 Указывает тип данных, хранящихся в значении записи.
Длина записи СЛОВО 16 Задает размер в байтах значения записи.
Значение записи Массив BYTE Меняется Содержимое объекта зависит от значения типа записи.

Поле "Тип записи" имеет одно из следующих значений.

Тип значения Описание
0x0001 Указывает, что запись содержит заголовок PlayReady (PRH).
0x0002 Зарезервировано.
0x0003 Указывает внедренное хранилище лицензий (ELS).

2.2. Примеры объектов PlayReady

На следующем рисунке показан сегментованный MP4-файл с объектом PlayReady, который содержит заголовок PlayReady:

Объект PlayReady в MP4

На следующем рисунке показано представление HEX этого MP4-файла:

Гексдамп объекта PlayReady

3. Заголовок PlayReady (PRH)

Заголовок PlayReady (PRH) используется клиентом для поиска или получения лицензии на конкретный элемент контента, в котором она находится. Кодируется с помощью UTF-16.

Матрица поддержки версий 3.1

  Заголовок PlayReady версии 4.3.0.0 Заголовок PlayReady версии 4.2.0.0 Заголовок PlayReady версии 4.1.0.0 Заголовок PlayReady версии 4.0.0.0
Клиенты
на основе пакета SDK для PlayReady 4.0 (см. примечание 1)
Клиенты
на основе пакета SDK для PlayReady 3.0 (см. примечание 2)
 
Клиенты
на основе пакета SDK для PlayReady 2.x (см. примечание 3)
   
Клиенты
на основе пакета SDK playReady 1.x (см. примечание 4)
     

Примечания:

  1. Xbox One версии 1709 или более поздней — клиенты PlayReady 4.X.
  2. Windows 10 (все версии) и Xbox One версии 1703 или более поздней — клиенты PlayReady 3.X. Новейшие устройства, отличные от Windows (например, смарт-телевизоры), выпущенные после 2017 года, являются клиентами PlayReady 3.X.
  3. Silverlight и Windows 8, 8.1 — клиенты PlayReady 2.X. Большинство устройств, отличных от Windows (например, смарт-телевизоров), выпущенных в период с 2011 по 2017 год, являются клиентами PlayReady 2.X.
  4. Большинство устройств, отличных от Windows (например, смарт-телевизоров), выпущенных в период с 2008 по 2011 год, являются клиентами PlayReady 1.X.

3.2. Требования к синтаксису

3.2.1. Канонизировано

XML-код должен быть канонизирован.

3.2.2. Все имена узлов и атрибутов чувствительны к регистру

Поддерживается

<KID VALUE="PV1LM/VEVk+kEOB8qqcWDg=="> </KID>

Не поддерживается

<KID value="PV1LM/VEVk+kEOB8qqcWDg=="> </KID>
<kid VALUE="PV1LM/VEVk+kEOB8qqcWDg=="> </kid>

3.2.3. Закрывающие теги должны быть явными

Все XML-узлы должны быть явно закрыты закрывающим тегом, включая узлы внутри узла CUSTOMATTRIBUTES.

Поддерживается

<KID VALUE="PV1LM/VEVk+kEOB8qqcWDg=="> </KID>
<CUSTOMATTRIBUTES> <MyNode FooAttribute="Foo"> </MyNode> </CUSTOMATTRIBUTES>

Не поддерживается

<KID VALUE="PV1LM/VEVk+kEOB8qqcWDg=="> <CUSTOMATTRIBUTES> <MyNode FooAttribute="Foo"> </CUSTOMATTRIBUTES>

3.2.4. Атрибуты пространства имен

Все атрибуты пространства имен должны отображаться перед атрибутами, не являющихся пространствами имен.

Поддерживается

<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.3.0.0">

Не поддерживается

<WRMHEADER version="4.3.0.0" xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader>

3.2.5. Алфавитный порядок

Все атрибуты должны находиться в алфавитном порядке, в том числе в узлах внутри узла CUSTOMATTRIBUTES.

Поддерживается

<KID ALGID="AESCBC" VALUE="PV1LM/VEVk+kEOB8qqcWDg=="> </KID>
<CUSTOMATTRIBUTES> <MyNode BarAttribute="Bar" FooAttribute="Foo"> </MyNode> </CUSTOMATTRIBUTES>

Не поддерживается

<KID VALUE="PV1LM/VEVk+kEOB8qqcWDg==" ALGID="AESCBC"> </KID>
<CUSTOMATTRIBUTES> <MyNode FooAttribute="Foo" BarAttribute="Bar"> </MyNode> </CUSTOMATTRIBUTES>

3.3. v4.3.0.0

Заголовок PlayReady версии 4.3.0.0 был представлен с PlayReady версии 4.0 в сентябре 2017 г. для поддержки ключей AESCBC в заголовке. Эта поддержка позволяет выполнять шифрование содержимого в режиме CBC, в частности для общих режимов шифрования cbcs. Он также повышает совместимость клиентов PlayReady с другими системами DRM, а также с уже имеющимся контентом.

3.3.1. Различия с другими версиями

Начиная с версии 4.0, пакеты SDK и клиенты PlayReady могут обрабатывать заголовки PlayReady версии 4.0, 4.1, 4.2 и 4.3. Пакеты SDK PlayReady версии до 4.0 возвращают ошибку «неподдерживаемая версия» при использовании заголовков версии 4.3.

Формат заголовка PlayReady версии 4.3.0.0 имеет следующие изменения по сравнению с версией 4.2.0.0:

  • Атрибут версии элемента WRMHEADER имеет строку "4.3.0.0".
  • Атрибут ALGID , расположенный внутри элемента KID , может быть отсутствует в запросе на получение лицензии. Корпорация Майкрософт рекомендует, чтобы атрибут ALGID содержал допустимое значение в заголовке, включенном в содержимое.
  • Если атрибут ALGID присутствует в любом элементе KID и имеется несколько элементов KID в элементе KIDS, все элементыKID должны включать атрибут ALGID, а значения атрибутов должны совпадать.
  • Атрибут ALGID , расположенный внутри элемента KID, теперь может иметь значение AESCBC, в дополнение к AESCTR, при условии, что:
    • Если атрибут ALGID имеет значение AESCBC, атрибут CHECKSUM не должен быть включен.

3.3.2. Примеры

Ниже приведен пример заголовка PlayReady 4.3.0.0 с ключами AESCBC:

<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.3.0.0">
  <DATA>
    <PROTECTINFO>
      <KIDS>
        <KID ALGID="AESCBC" VALUE="PV1LM/VEVk+kEOB8qqcWDg=="></KID>
        <KID ALGID="AESCBC" VALUE="tuhDoKUN7EyxDPtMRNmhyA=="></KID>
      </KIDS>
    </PROTECTINFO>
    <LA_URL>http://rm.contoso.com/rightsmanager.asmx</LA_URL>
    <DS_ID>AH+03juKbUGbHl1V/QIwRA==</DS_ID>
  </DATA>
</WRMHEADER>

Ниже приведен пример заголовка PlayReady 4.3.0.0 с отсутствующим ALGID:

<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.3.0.0">
  <DATA>
    <PROTECTINFO>
      <KIDS>
        <KID VALUE="PV1LM/VEVk+kEOB8qqcWDg=="></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>

3.3.3. Формат

Заголовок PlayReady версии 4.3.0.0 имеет следующий синтаксис:

<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.3.0.0">
  <DATA>
      <PROTECTINFO LICENSEREQUESTED="true">
        <KIDS>
          <KID ALGID="value" CHECKSUM="base64-encoded value" VALUE="base64-encoded guid"></KID>
          <KID ALGID="value" CHECKSUM="base64-encoded value" VALUE="base64-encoded guid"></KID>
          <KID ALGID="value" CHECKSUM="base64-encoded value" VALUE="base64-encoded guid"></KID>
        </KIDS>
      </PROTECTINFO>
      <LA_URL> URL for license acquisition </LA_URL>
      <LUI_URL>
        URL for Non-silent license acquisition web page
      </LUI_URL>
    <DS_ID> base64-encoded guid </DS_ID>
    <CUSTOMATTRIBUTES xmlns="">
      <mm:Publisher xmlns:mm="urn:schema-musicmogul-com">
           <mm:Author>
                Elvis Presley
           </mm:Author>
           <mm:CreationDate>
                2007/08/21:12:00:00
           </mm:CreationDate>
        </mm:Publisher>
    </CUSTOMATTRIBUTES>
    <DECRYPTORSETUP>ONDEMAND</DECRYPTORSETUP>
  </DATA>
</WRMHEADER>

Ниже описаны теги.

Имя тега Обязательно Описание
WRMHEADER Да Самый внешний элемент объекта заголовка. Он может содержать один элемент DATA и должен содержать один атрибут версии. Версия заголовка — 4.3.0.0. Каждый раз, когда корпорация Майкрософт определяет новые обязательные теги или атрибуты, с этими тегами или атрибутами связан новый номер версии. Если версия превышает ту, для которой был написан клиентский код, то код должен завершиться ошибкой, поскольку это предполагает, что заголовок содержит обязательные теги, которые клиент не понимает. Если версия меньше или равна той, для которой был написан клиентский код, то клиентский код может безопасно пропустить любые теги или атрибуты, которые он не понимает.
ДАННЫЕ нет Элемент контейнера для данных заголовка, включая сторонние теги. В элемент WRMHEADER может быть включено не более одного элемента DATA.
PROTECTINFO нет Указывает ноль или один элемент KIDS . В элемент DATA может включаться не более одного элемента PROTECTINFO. При необходимости может включать атрибут LICENSEREQUESTED.
ЛИЦЕНЗИЯ ЗАПРАШИВАЕТСЯ нет Указывает, запрашивает ли приобретение лицензии по крайней мере одну лицензию или нет. Значение должно быть установлено на "true" или "false", если оно присутствует, и предполагается, что установлено на "true", если оно отсутствует. Этот атрибут игнорируется версиями PlayReady до версии 4.5. Приложение пакета SDK для сервера PlayReady может игнорировать этот атрибут. это только информационный.
ДЕТИШКИ нет Указывает один или несколько элементов KID , которые могут использоваться для создания объектов расшифровки для связанного содержимого. Под узлом PROTECTINFO может существовать один или ноль элементов KIDS.
КОЗЛЁНОК нет Содержит все ключевые данные для данной лицензии. Если узел KIDS присутствует, под узлом KIDS должен существовать один или несколько элементов KID. Элемент KID содержит следующие атрибуты.

ALGID: Необязательно. Задает алгоритм шифрования. Может иметь значение "AESCTR", "AESCBC" или "КОКТЕЙЛЬ".

КОНТРОЛЬНАЯ СУММА: необязательно. Только для ключей AES-CTR. Содержит контрольную сумму, вычисляемую с помощью атрибута KID VALUE и ключа содержимого. Дополнительные сведения см. в разделе "Алгоритм контрольной суммы ключей " этого документа.

Если этот узел существует в XML-файле WRMHeader, его значение данных должно быть пустым.

ЗНАЧЕНИЕ: обязательно. Содержит значение GUID идентификатора ключа, закодированное в формате Base64. Обратите внимание, что это значение GUID (DWORD, WORD, WORD, массив 8-BYTE) должно быть в младшем порядке байтов.
LA_URL нет Содержит URL-адрес веб-службы приобретения лицензий. Разрешены только абсолютные URL-адреса. В элемент DATA может быть включено не более одного элемента LA_URL.

Если этот узел существует в XML-файле WRMHeader, его значение данных не должно быть пустым.
LUI_URL нет Содержит URL-адрес веб-страницы приобретения лицензий без автоматического отображения. Разрешены только абсолютные URL-адреса. В элемент DATA может быть включено не более одного элемента LUI_URL.

Если этот узел существует в XML-файле WRMHeader, его значение данных не должно быть пустым.
DS_ID нет Идентификатор службы для доменной службы. В элемент DATA может быть включен только один элемент DS_ID.

Если этот узел существует в XML-файле WRMHeader, его значение данных не должно быть пустым.
Пользовательские атрибуты нет Автор содержимого может добавить пользовательский XML-код в этот элемент. Код Майкрософт не действует на какие-либо данные, содержащиеся в этом элементе. В элемент DATA может быть включено не более одного элемента CUSTOMATTRIBUTES.

Если этот узел существует в XML-файле WRMHeader, его значение данных не должно быть пустым.
Настройка Дешифратора нет Этот тег может содержать только значение ONDEMAND. Если этот тег присутствует в узле DATA , а его значение имеет значение ONDEMAND, оно указывает приложению, что он не должен ожидать, что полная цепочка лицензий для содержимого будет доступна для приобретения или уже присутствует на клиентском компьютере перед настройкой графа мультимедиа. Если этот тег не задан, он указывает, что приложение может принудительно принудить получение лицензии или уже присутствовать на клиентском компьютере перед настройкой графа мультимедиа. В элемент DATA можно включить не более одного элемента DECRYPTORSETUP.

3.4. v4.2.0.0

Заголовок PlayReady версии 4.2.0.0 был представлен с PlayReady версии 3.0 в апреле 2015 года, чтобы разрешить несколько KIDs в одном заголовке. Это означает, что для шифрования одного ресурса можно использовать несколько ключей, например, если звуковые дорожки должны быть зашифрованы с помощью другого ключа, отличного от видео треков.

3.4.1. Различия с другими версиями

Пакеты SDK PlayReady 3.0 и более поздних версий клиентов могут обрабатывать версии 4.0, версии 4.1 и версии 4.2 PlayReady Header. Предыдущие пакеты SDK PlayReady возвращают ошибку "неподдерживаемая версия" при использовании заголовков версии 4.2. При использовании заголовка версии 4.2 клиент должен знать, какая версия сервера используется с помощью пользовательского механизма для конкретного приложения. Пакеты SDK PlayReady не предоставляют собственный способ получения сведений об этой версии.

Формат заголовка PlayReady версии 4.2.0.0 имеет следующие изменения по сравнению с версией 4.1.0.0:

  • Атрибут версии элемента WRMHEADER имеет строку "4.2.0.0".
  • Элемент KID , расположенный внутри элемента PROTECTINFO , был переименован в KIDS и по-прежнему необязателен.
  • Несколько элементов KID находятся внутри элемента KIDS .

3.4.2. Пример

Заголовок PlayReady 4.2.0.0 с двумя ключами AESCTR:

<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>http://rm.contoso.com/rightsmanager.asmx</LA_URL>
    <DS_ID>AH+03juKbUGbHl1V/QIwRA==</DS_ID>
  </DATA>
</WRMHEADER>

3.4.3. Формат

Заголовок PlayReady версии 4.2.0.0 имеет следующий синтаксис:

<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.2.0.0">
  <DATA>
      <PROTECTINFO>
        <KIDS>
          <KID ALGID="AESCTR" CHECKSUM="base64-encoded value" VALUE="base64-encoded guid"></KID>
          <KID ALGID="AESCTR" CHECKSUM="base64-encoded value" VALUE="base64-encoded guid"></KID>
          <KID ALGID="AESCTR" CHECKSUM="base64-encoded value" VALUE="base64-encoded guid"></KID>
        </KIDS>
      </PROTECTINFO>
      <LA_URL> URL for license acquisition </LA_URL>
      <LUI_URL>
        URL for Non-silent license acquisition web page
      </LUI_URL>
    <DS_ID> base64-encoded guid </DS_ID>
    <CUSTOMATTRIBUTES xmlns="">
      <mm:Publisher xmlns:mm="urn:schema-musicmogul-com">
           <mm:Author>
                Elvis Presley
           </mm:Author>
           <mm:CreationDate>
                2007/08/21:12:00:00
           </mm:CreationDate>
        </mm:Publisher>
    </CUSTOMATTRIBUTES>
    <DECRYPTORSETUP>ONDEMAND</DECRYPTORSETUP>
  </DATA>
</WRMHEADER>

Ниже описаны теги.

Имя тега Обязательно Описание
WRMHEADER Да Самый внешний элемент объекта заголовка. Он может содержать один элемент DATA и должен содержать один атрибут версии. Версия заголовка — 4.2.0.0. Каждый раз, когда корпорация Майкрософт определяет новые обязательные теги или атрибуты, с этими тегами или атрибутами связан новый номер версии. Если версия превышает ту, для которой был написан клиентский код, то код должен завершиться ошибкой, поскольку это предполагает, что заголовок содержит обязательные теги, которые клиент не понимает. Если версия меньше или равна той, для которой был написан клиентский код, то клиентский код может безопасно пропустить любые теги или атрибуты, которые он не понимает.
ДАННЫЕ нет Элемент контейнера для данных заголовка, включая сторонние теги. В элемент WRMHEADER может быть включен только один элемент DATA.
PROTECTINFO нет Указывает ноль или один элемент KIDS . В элемент DATA может включаться не более одного элемента PROTECTINFO.
ДЕТИШКИ нет Указывает один или несколько элементов KID , которые могут использоваться для создания объектов расшифровки для связанного содержимого. Под узлом PROTECTINFO может существовать один или ноль элементов KIDS.
КОЗЛЁНОК нет Содержит все ключевые данные для данной лицензии. Если узел KIDS присутствует, один или несколько элементов KID должны существовать под узлом KIDS . Элемент KID содержит следующие атрибуты.

ALGID: обязательный. Задает алгоритм шифрования. Должно быть задано значение AESCTR или COCKTAIL

Контрольная сумма: Необязательно. Содержит контрольную сумму, вычисляемую с помощью значения KID VALUE и ключа содержимого. Дополнительные сведения см. в разделе "Алгоритм контрольной суммы ключей " этого документа.

Если этот узел существует в XML-файле WRMHeader, его значение данных должно быть пустым.

ЗНАЧЕНИЕ: обязательно. Содержит значение GUID идентификатора ключа, закодированное в формате Base64. Обратите внимание, что это значение GUID (DWORD, WORD, WORD, массив 8-BYTE) должно быть в младшем порядке байтов.
LA_URL нет Содержит URL-адрес веб-службы приобретения лицензий. Разрешены только абсолютные URL-адреса. В элемент DATA может быть включено не более одного элемента LA_URL.

Если этот узел существует в XML-файле WRMHeader, его значение данных не должно быть пустым.
LUI_URL нет Содержит URL-адрес веб-страницы приобретения лицензий без автоматического отображения. Разрешены только абсолютные URL-адреса. В элемент DATA может быть включено не более одного элемента LUI_URL.

Если этот узел существует в XML-файле WRMHeader, его значение данных не должно быть пустым.
DS_ID нет Идентификатор службы для доменной службы. В элемент DATA может быть включено не более одного элемента DS_ID.

Если этот узел существует в XML-файле WRMHeader, его значение данных не должно быть пустым.
Пользовательские атрибуты нет Автор содержимого может добавить произвольный XML-код в этот элемент. Код Майкрософт не действует на какие-либо данные, содержащиеся в этом элементе. В элемент DATA может быть включено не более одного элемента CUSTOMATTRIBUTES.

Если этот узел существует в XML-файле WRMHeader, его значение данных не должно быть пустым.
Настройка Дешифратора нет Этот тег может содержать только значение ONDEMAND. Если этот тег присутствует в узле DATA , а его значение имеет значение ONDEMAND, оно указывает приложению, что он не должен ожидать, что полная цепочка лицензий для содержимого будет доступна для приобретения или уже присутствует на клиентском компьютере перед настройкой графа мультимедиа. Если этот тег не задан, он указывает, что приложение может принудительно принудить получение лицензии или уже присутствовать на клиентском компьютере перед настройкой графа мультимедиа. В элемент DATA можно включить не более одного элемента DECRYPTORSETUP.

3.5. v4.1.0.0

Заголовок PlayReady версии 4.1.0.0 был представлен с PlayReady версии 2.0 в сентябре 2011 года для поддержки живых линейных потоков с масштабируемыми конечными лицензиями, встроенными в поток. Этот тип потока требует от клиентов привязки масштабируемой корневой лицензии без знания ключа шифрования содержимого, который будет использоваться в расшифровке.

3.5.1. Различия с другими версиями

Пакеты SDK PlayReady 2.0 и более поздних версий клиентов могут обрабатывать версии 4.0 и 4.1 PlayReady Headers. Предыдущие версии SDK PlayReady возвращают ошибку "неподдерживаемая версия" при использовании заголовков v4.1.

Формат заголовка PlayReady версии 4.1.0.0 имеет следующие изменения по сравнению с версией 4.0.0.0.0:

  • Атрибут версии элемента WRMHEADER имеет строку "4.1.0.0".
  • Элемент DATA содержит необязательный элемент DECRYPTORSETUP .
  • Элемент KID находится внутри элемента PROTECTINFO и является необязательным, а не обязательным.
  • Элемент KID содержит атрибуты ALGID (обязательно), CHECKSUM (необязательно) и VALUE (обязательно).
  • Элемент KEYLEN удален. Атрибут KEYLEN ранее использовался для различения лицензий на коктейли с ключами разной длины. Заголовок версии 4.1 ограничит поддержку только 8-байтовых коктейльных ключей. Если вы используете ключи для коктейлей, которые не имеют длину в 8 байт, необходимо использовать заголовки версии 4.0.
  • Элементы ALGID и CHECKSUM были удалены, так как их данные содержатся в атрибутах элемента KID .

3.5.2. Формат

Заголовок PlayReady версии 4.1.0.0 имеет следующий синтаксис:

<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.1.0.0">
  <DATA>
      <PROTECTINFO>
        <KID ALGID="AESCTR" CHECKSUM="base64-encoded value" VALUE="base64-encoded guid"></KID>
      </PROTECTINFO>
      <LA_URL> URL for license acquisition </LA_URL>
      <LUI_URL>
        URL for Non-silent license acquisition web page
      </LUI_URL>
    <DS_ID> base64-encoded guid </DS_ID>
    <CUSTOMATTRIBUTES xmlns="">
      <mm:Publisher xmlns:mm="urn:schema-musicmogul-com">
           <mm:Author>
                Elvis Presley
           </mm:Author>
           <mm:CreationDate>
                2007/08/21:12:00:00
           </mm:CreationDate>
        </mm:Publisher>
    </CUSTOMATTRIBUTES>
    <DECRYPTORSETUP>ONDEMAND</DECRYPTORSETUP>
  </DATA>
</WRMHEADER>

Ниже описаны теги.

Имя тега Обязательно Описание
WRMHEADER Да Самый внешний элемент объекта заголовка. Он может содержать один элемент DATA и должен содержать один атрибут версии. Версия заголовка — 4.1.0.0. Каждый раз, когда корпорация Майкрософт определяет новые обязательные теги или атрибуты, с этими тегами или атрибутами связан новый номер версии. Если версия превышает ту, для которой был написан клиентский код, то код должен завершиться ошибкой, поскольку это предполагает, что заголовок содержит обязательные теги, которые клиент не понимает. Если версия меньше или равна той, для которой был написан клиентский код, то клиентский код может безопасно пропустить любые теги или атрибуты, которые он не понимает.
ДАННЫЕ нет Элемент контейнера для данных заголовка, включая сторонние теги. В элемент WRMHEADER может быть включено не более одного элемента DATA.
PROTECTINFO нет Указывает ноль или один элемент KID , который может использоваться для создания объектов расшифровки для связанного содержимого. В элемент DATA может включаться не более одного элемента PROTECTINFO.
КОЗЛЁНОК нет Содержит все ключевые данные для данной лицензии. Один или ноль элементов KID могут существовать в узле PROTECTINFO . Элемент KID содержит следующие атрибуты.

ЗНАЧЕНИЕ: обязательно. Содержит значение GUID идентификатора ключа, закодированное в формате Base64. Обратите внимание, что это значение GUID (DWORD, WORD, WORD, массив 8-BYTE) должно быть небольшим порядком байтов.

ALGID: обязательный. Задает алгоритм шифрования. Необходимо установить значение «AESCTR» или «COCKTAIL»

CHECKSUM: Необязательно. Содержит контрольную сумму, вычисляемую с помощью значения KID VALUE и ключа содержимого. Дополнительные сведения см. в разделе "Алгоритм контрольной суммы ключей " этого документа.

Если этот узел существует в XML-файле WRMHeader, его значение данных должно быть пустым.
LA_URL нет Содержит URL-адрес веб-службы приобретения лицензий. Разрешены только абсолютные URL-адреса. В элемент DATA может быть включено не более одного элемента LA_URL.

Если этот узел существует в XML-файле WRMHeader, его значение данных не должно быть пустым.
LUI_URL нет Содержит URL-адрес веб-страницы приобретения лицензий без автоматического отображения. Разрешены только абсолютные URL-адреса. В элемент DATA может быть включено не более одного элемента LUI_URL.

Если этот узел существует в XML-файле WRMHeader, его значение данных не должно быть пустым.
DS_ID нет Идентификатор службы для доменной службы. В элемент DATA может быть включено не более одного элемента DS_ID.

Если этот узел существует в XML-файле WRMHeader, его значение данных не должно быть пустым.
Пользовательские атрибуты нет Автор содержимого может добавить произвольный XML-код в этот элемент. Код Майкрософт не действует на какие-либо данные, содержащиеся в этом элементе. В элемент DATA может быть включен только один элемент CUSTOMATTRIBUTES.

Если этот узел существует в XML-файле WRMHeader, его значение данных не должно быть пустым.
Настройка Дешифратора нет Этот тег может содержать только значение ONDEMAND. Если этот тег присутствует в узле DATA и его значение имеет значение ONDEMAND, оно указывает приложению, что он не должен ожидать, что полная цепочка лицензий для содержимого будет доступна для приобретения или уже присутствует на клиентском компьютере перед настройкой графа мультимедиа. Если этот тег не задан, он указывает, что приложение может принудительно принудить получение лицензии или уже присутствовать на клиентском компьютере перед настройкой графа мультимедиа. В элемент DATA может быть включен только один элемент DECRYPTORSETUP.

Примечания для версии 4.1:

  • Все XML-теги и атрибуты в заголовке PlayReady определяются корпорацией Майкрософт. Единственным исключением является содержимое элемента CUSTOMATTRIBUTES . Разработчики приложений PlayReady для ПК не должны добавлять пользовательские теги за пределами элемента CUSTOMATTRIBUTES .
  • Заголовок PlayReady должен соответствовать спецификациям W3C Canonical XML версии 1.1.
  • Заголовок PlayReady не содержит тег верхнего уровня ?XML , необходимый в хорошо сформированном XML.
  • Рекомендуется, чтобы размер этого поля не должен превышать 1 КБ.

3.6. v4.0.0.0

Заголовок PlayReady версии 4.0.0.0 был представлен вместе с PlayReady версии 1.0 в 2008 году и позволяет одному ключу AESCTR поддерживать содержимое, зашифрованное с помощью AES, или ключу COCKTAIL поддерживать содержимое, зашифрованное с помощью WMDRM.

3.6.1. Примеры

Заголовок PlayReady 4.0.0.0
<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.0.0.0">
  <DATA>
    <PROTECTINFO>
      <ALGID>AESCTR</ALGID>
      <KEYLEN>16</KEYLEN>
    </PROTECTINFO>
    <KID>q5HgCTj40kGeNVhTH9Gexw==</KID>
    <CHECKSUM>w+OZVr8vzrQ=</CHECKSUM>
    <LA_URL>http://rm.contoso.com/rightsmanager.asmx</LA_URL>
    <CUSTOMATTRIBUTES>
      <IIS_DRM_VERSION>8.0.1705.19</IIS_DRM_VERSION>
    </CUSTOMATTRIBUTES>
  </DATA>
</WRMHEADER>
Объект PlayReady с Base64-кодировкой, содержащий заголовок PlayReady версии 4.0.0.0

XAMAAAEAAQBSAzwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4AcQA1AEgAZwBDAFQAagA0ADAAawBHAGUATgBWAGgAVABIADkARwBlAHgAdwA9AD0APAAvAEsASQBEAD4APABDAEgARQBDAEsAUwBVAE0APgB3ACsATwBaAFYAcgA4AHYAegByAFEAPQA8AC8AQwBIAEUAQwBLAFMAVQBNAD4APABMAEEAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBwAHIAbwBmAGYAaQBjAGkAYQBsAHMAaQB0AGUALgBrAGUAeQBkAGUAbABpAHYAZQByAHkALgBtAGUAZABpAGEAcwBlAHIAdgBpAGMAZQBzAC4AdwBpAG4AZABvAHcAcwAuAG4AZQB0AC8AUABsAGEAeQBSAGUAYQBkAHkALwA8AC8ATABBAF8AVQBSAEwAPgA8AEMAVQBTAFQATwBNAEEAVABUAFIASQBCAFUAVABFAFMAPgA8AEkASQBTAF8ARABSAE0AXwBWAEUAUgBTAEkATwBOAD4AOAAuADAALgAxADcAMAA1AC4AMQA5ADwALwBJAEkAUwBfAEQAUgBNAF8AVgBFAFIAUwBJAE8ATgA+ADwALwBDAFUAUwBUAE8ATQBBAFQAVABSAEkAQgBVAFQARQBTAD4APAAvAEQBUAEEAPgA8AAVwBSAE0ASABFAEEARABFAFIAPgA=

3.6.2. Формат

Заголовок PlayReady версии 4.0.0.0 имеет следующий синтаксис:

<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.0.0.0">
<DATA>
      <PROTECTINFO>
        <ALGID>AESCTR</ALGID>
        <KEYLEN>16</KEYLEN>
      </PROTECTINFO>
      <LA_URL> URL for license acquisition </LA_URL>
      <LUI_URL>
        URL for Non-silent license acquisition web page
      </LUI_URL>
    <DS_ID>base64-encoded guid</DS_ID>
    <KID>base64-encoded kid</KID>
    <CUSTOMATTRIBUTES xmlns="">
      <mm:Publisher xmlns:mm="urn:schema-musicmogul-com">
           <mm:Author>
                Elvis Presley
           </mm:Author>
           <mm:CreationDate>
                2007/08/21:12:00:00
           </mm:CreationDate>
        </mm:Publisher>
    </CUSTOMATTRIBUTES>
    <CHECKSUM>
      checksum of the content key for verification
    </CHECKSUM>
  </DATA>
</WRMHEADER>

В следующей таблице описаны различные теги.

Имя тега Обязательно Описание
WRMHEADER Да Самый внешний элемент объекта заголовка. Он может содержать один элемент DATA и один атрибут версии. Версия заголовка — 4.0.0.0.0.

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

Семантика для клиента:
Если версия больше, чем версия, для которой был написан клиентский код, код клиента должен завершиться ошибкой, так как он подразумевает, что заголовок содержит обязательные теги, которые клиент не понимает. Если версия меньше или равна той, для которой был написан клиентский код, то клиентский код может безопасно пропустить какие-либо теги или атрибуты, которые он не понимает.
ДАННЫЕ Да Элемент контейнера для данных заголовка, включая сторонние теги.
PROTECTINFO Да Указывает тип шифрования с помощью дочерних элементов KEYLEN и ALGID .
KEYLEN Да Указывает размер ключа шифрования содержимого. Должно иметь значение 16, если ALGID задано значение "AESCTR", и 7, если ALGID имеет значение "COCKTAIL".
АЛГИДНЫЙ Да Задает алгоритм шифрования. Необходимо задать следующее значение:

AESCTR: соответствует алгоритму AES в режиме счетчика.

КОКТЕЙЛЬ: соответствует алгоритму коктейля.
КОЗЛЁНОК Да Содержит значение GUID идентификатора ключа, закодированное в формате Base64. Обратите внимание, что это значение GUID (DWORD, WORD, WORD, массив 8-BYTE) должно быть в младшем порядке байтов.
Контрольная сумма нет Содержит контрольную сумму, вычисляемую с помощью значения KID VALUE и ключа содержимого. Дополнительные сведения см. в разделе "Алгоритм контрольной суммы ключей ".

Предыдущие версии PlayReady обрабатывают это поле как обязательное, поэтому его следует включить в любой заголовок, который будет использоваться предыдущей версией PlayReady.
LA_URL нет Содержит URL-адрес веб-службы приобретения лицензий. Разрешены только абсолютные URL-адреса.
LUI_URL нет Содержит URL-адрес веб-страницы приобретения лицензий без автоматического отображения. Разрешены только абсолютные URL-адреса.
DS_ID нет Идентификатор службы для доменной службы.
Пользовательские атрибуты нет Автор содержимого может добавить произвольный XML-код в этот элемент. Код Майкрософт не действует на какие-либо данные, содержащиеся в этом элементе.

Примечания для версии 4.0:

  • Все XML-теги и атрибуты в заголовке PlayReady определяются корпорацией Майкрософт. Единственным исключением является содержимое элемента CUSTOMATTRIBUTES . Разработчики приложений PlayReady для ПК не должны добавлять пользовательские теги за пределами элемента CUSTOMATTRIBUTES , так как это может столкнуться с будущими тегами, которые корпорация Майкрософт определяет.
  • Порядок дочерних элементов в элементе контейнера не имеет значения.
  • Обратите внимание, что заголовок PlayReady не содержит тег верхнего уровня ?XML , необходимый в хорошо сформированном XML.
  • Рекомендуется, чтобы размер этого поля не должен превышать 1 КБ.
  • CHECKSUM требуется пакетом SDK для Сервера PlayReady вплоть до версии 1.2. Начиная с версии 1.5, PlayReady Server SDK рассматривает контрольную сумму как необязательную. Для PlayReady Porting Kit 1.2 по умолчанию требуется КОНТРОЛЬНАЯ СУММА. PlayReady Porting Kit 2.0 рассматривает контрольную сумму как опционально.

4. Внедренное хранилище лицензий (ELS)

Рекомендуется добавить пустое встроенное хранилище лицензий в объект PlayReady в следующих условиях:

  • Объект PlayReady должен быть вставлен в файл содержимого.
  • Содержимое может использоваться в контексте доменов PlayReady с внедренными лицензиями.

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

Замечание

Не добавляйте пустое встроенное хранилище лицензий в объект PlayReady, который предназначен для вставки в виде строки base-64 в манифест клиента Smooth Streaming.

Замечание

Рекомендуемый размер — 10 КБ.

5. Алгоритм контрольной суммы ключа

Алгоритм контрольной суммы в заголовке PlayReady предназначен для защиты от несоответствия ключей. В первые дни DRM песни были зашифрованы неправильно помеченными ключами. Это привело к воспроизведению белого шума, когда песни были расшифрованы. И если песни воспроизводились достаточно громко, оборудование для воспроизведения уничтожалось. С помощью контрольной суммы ключ содержимого можно проверить как ключ, который использовался для шифрования файла. Алгоритм работает следующим образом:

Для значения ALGID , заданного как AESCBC, не определен алгоритм контрольной суммы ключей. Атрибут CHECKSUM должен быть опущен.

Для значения ALGID, установленного как AESCTR, 16-байтовый идентификатор ключа шифруется с использованием 16-байтового контентного ключа AES в режиме ECB. Первые 8 байт буфера извлекаются и кодируются в кодировке Base64.

Для значения ALGID , заданного как "COCKTAIL", выполните следующие действия:

  1. Создается 21-байтовый буфер.

  2. Ключ содержимого помещается в буфер, а остальная часть буфера заполняется нулями.

  3. Для пяти итераций:

    a. buffer = SHA-1 (буфер).

  4. Первые 7 байт буфера извлекаются и кодируются в кодировке Base64.

  5. После выполнения этих действий байты в кодировке Base64 используются в качестве контрольной суммы.

Пользовательские атрибуты

Поставщик услуг может добавить собственный XML в элемент CUSTOMATTRIBUTES заголовка PlayReady. Все теги, используемые внутри элемента CUSTOMATTRIBUTES , гарантированно не сталкиваются с будущими тегами, определенными корпорацией Майкрософт.

Код Майкрософт не действует на любом XML-файле в этом элементе. Серверная часть поставщика услуг или код на стороне клиента являются единственными, которые обычно интерпретируют значение этого элемента. Например, предположим, что услуга под белыми ярлыками представляет фронтенд-службы AAA, BBB, CCC. Такая служба может зашифровать библиотеку содержимого только один раз (так как это дорогостоящая операция), но когда она обслуживает содержимое для конечного пользователя, она может задать customATTRIBUTES имя конкретной интерфейсной службы, на которую подписывается конечный пользователь. Когда конечный пользователь запрашивает лицензию на это содержимое, это позволяет службе белых меток определить, на какую интерфейсную службу подписывается конечный пользователь, чтобы она могли выдавать другую лицензию.

Размер этого поля не должен превышать 1 килобайт (КБ).