Новые возможности PlayReady версии 4.5
Эта страница содержит обзор наиболее значительных изменений между PlayReady версии 4.4 и PlayReady версии 4.5.
Общие изменения в PlayReady версии 4.5
Вызов шифрования с помощью сертификата развертывания сервера PlayReady
В предыдущих версиях PlayReady приобретение лицензий и другие проблемы клиента всегда шифруются с помощью фиксированного открытого ключа. Начиная с PlayReady 4.5, клиент, закодированный для взаимодействия только с вспомогательным сервером, может вместо этого шифровать проблемы с сертификатом развертывания сервера PlayReady, выданным лицензией корпорации Майкрософт. Затем пакет SDK для сервера PlayReady расшифровывает запрос с соответствующим закрытым ключом, переданным в него приложением пакета SDK для сервера PlayReady, а не с фиксированным закрытым ключом.
Время сервера лицензирования
В предыдущих версиях PlayReady использование функции безопасного времени обычно требовало от клиентского приложения взаимодействовать с отдельным сервером безопасного времени, чтобы получить время, используемое для установки локальных часов. Начиная с PlayReady 4.5, клиент, закодированный для взаимодействия только с вспомогательным сервером, может использовать время, предоставленное пакетом SDK для сервера PlayReady во время приобретения лицензии. Дополнительные сведения см. в разделе "Доверенные часы PlayReady".
Exchange ключей
Используя протокол приобретения лицензий, клиент PlayReady и сервер теперь могут обмениваться произвольными ключами, которые можно использовать для шифрования, расшифровки, подписывания и проверки произвольных данных, предоставляемых приложением, где сами ключи защищены с помощью PlayReady. Если клиент имеет значение SL3000, сами ключи защищены доверенной средой выполнения. Дополнительные сведения см. в разделе Exchange ключа PlayReady.
Политика подложки
Добавлены функциональные возможности, которые упрощают использование ограничения явного цифрового вывода видео, определенного правилами соответствия PlayReady.
Изменения в пакете SDK для сервера PlayReady версии 4.5
Общие изменения сервера
Ключи Exchange лицензии можно использовать для предоставления произвольных ключей клиенту во время приобретения лицензии.
При предоставлении клиентом поддерживаемых технологий подложки предоставляются приложению пакета SDK для сервера PlayReady Server. Это упрощает использование ограничения явного цифрового вывода видео с водяными знаками в соответствии с правилами соответствия PlayReady.
Изменения документации по API сервера
Новая документация по API сервера для .NET стандартной версии пакета SDK для сервера PlayReady была создана и опубликована. Корпорация Майкрософт рекомендует перейти на пакет SDK для .NET ценовой категории "Стандартный".
Документация по API сервера в файле PlayReady.chm, включенная в пакет документации PlayReady, применяется только к устаревшей версии пакета SDK для сервера PlayReady платформа .NET Framework. Эта документация теперь считается нерекомендуемой, не была обновлена с момента playReady 4.0 и не будет получать будущие обновления.
Большинство API в двух пакетах SDK идентичны, поэтому для большинства целей должна быть достаточно .NET стандартная документация. Однако существует несколько существенных различий, в которых различаются классы, интерфейсы и методы.
Ниже приведены общие различия между двумя пакетами SDK.
Пакет SDK .NET уровня "Стандартный" использует интерфейсы во многих местах, где пакет SDK платформа .NET Framework использует классы.
Интерфейсы обработчика пакета SDK .NET уровня "Стандартный", реализованные приложением, используют асинхронные методы, в которых пакет SDK платформа .NET Framework использует синхронные методы. Поэтому имена API интерфейса API обработчика пакета SDK для .Net Standard заканчиваются словом "Async" и возвращают класс Task<вместо простого класса> (где класс зависит от метода интерфейса обработчика).
Пакет SDK для .NET уровня "Стандартный" не зависит от транспорта. Таким образом, никакой контекст HTTP не предоставляется приложению напрямую. При использовании ASP.NET Core обратитесь к документации по ASP.NET Core, особенно интерфейсу IHttpContextAccessor.
Пакет SDK для .NET уровня "Стандартный" не поддерживает протокол упаковки содержимого (например, IPackagingDataAcquisitionHandler не существует). Эта функция будет восстановлена в PlayReady 4.6.
Ниже приведен полный список конкретных различий по состоянию на PlayReady 4.5. Этот список не включает функции, которые существуют только в пакете SDK .NET standard, и не перечисляют все удаленные классы упаковки, которые будут восстановлены.
платформа .NET Framework класс или интерфейс | эквивалент .NET Standard | Различия |
---|---|---|
Класс ProtocolChallengeContext | Интерфейс IProtocolChallengeContext | Свойство HttpRequest Request существует только в пакете SDK для платформа .NET Framework, как описано выше. |
Класс ProtocolChallenge | Интерфейс IProtocolChallenge | Нет. |
Интерфейс IDeleteLicenseHandler | Аналогично | ProcessDeleteLicenseDataAsync является синхронным в пакете SDK платформа .NET Framework, как описано выше. |
Класс DeleteLicenseDataChallenge | Интерфейс IDeleteLicenseDataChallenge | Нет. |
Интерфейс IDomainHandler | Аналогично | HandleJoinDomainAsync и HandleLeaveDomainAsync синхронны в пакете SDK платформа .NET Framework, как описано выше. |
Класс JoinDomainChallenge | Интерфейсы IDomainChallenge и IJoinDomainChallenge | Статический метод JoinDomainChallenge.GenerateDomainKeyPair не существует в пакете SDK .NET standard. Потеря этой функции — это ошибка, которая будет исправлена в PlayReady 4.6 путем добавления его в качестве статического метода в DomainCertificateBuilder. |
Класс LeaveDomainChallenge | Интерфейс ILeaveDomainChallenge | Нет. |
Интерфейс ILicenseAcknowledgementHandler | Аналогично | HandleLicenseAcknowledgementAsync является синхронным в пакете SDK платформа .NET Framework, как описано выше. |
Класс LicenseAcknowledgementChallenge | Интерфейс ILicenseAcknowledgementChallenge | Нет. |
Интерфейс ILicenseAcquisitionHandler | Аналогично | HandleLicenseAcquisitionAsync является синхронным в пакете SDK платформа .NET Framework, как описано выше. |
Класс LicenseChallenge | Интерфейс ILicenseChallenge | Нет. |
Интерфейс IMeteringHandler | Аналогично | GetMeteringCertificateAsync и ProcessMeteringDataAsync синхронны в пакете SDK для платформа .NET Framework, как описано выше. |
Класс MeteringCertificateChallenge | Интерфейс IMeteringCertificateChallenge | Нет. |
Класс ProcessMeteringDataChallenge | Интерфейс IProcessMeteringDataChallenge | Нет. |
Интерфейс ISecureStopHandler | Аналогично | ProcessSecureStopDataAsync является синхронным в пакете SDK платформа .NET Framework, как описано выше. |
Класс SecureStopDataChallenge | Интерфейс ISecureStopDataChallenge | Перегрузка метода GetSecureStopData, принимающую ISecureStop2Handler, существует только в пакете SDK для платформа .NET Framework. Вместо этого пакет SDK .NET уровня "Стандартный" загружает этот обработчик, как и любой другой. |
Интерфейс ISecureStopHandler2 | Аналогично | GetSecureStop2AESKeyAsync является синхронным в пакете SDK платформа .NET Framework, как описано выше. |
Класс PlayReadyServerAuthorization | Аналогично | Методы класса являются статическими в пакете SDK платформа .NET Framework и экземпляре в пакете SDK .NET standard. |
Изменения API сервера
Это просто обзор. Дополнительные сведения см. в документации по API сервера .
Метод LicenseResponse.GetLicenses теперь возвращает пустой массив вместо null, если лицензии не были добавлены.
Добавлены следующие классы и перечисления.
- Класс AdvancedLicense (абстрактный, наследуется от лицензии) — подмножество существующих свойств и методов из MediaLicense было перемещено в этот класс, а MediaLicense теперь наследует от AbstractLicense. Для использования MediaLicense изменения приложения не требуются.
- Класс KeyExchangeLicense (наследуется от AdvancedLicense) используется для создания лицензий, предоставляющих клиенту произвольные ключи во время приобретения лицензии.
- Класс KeyExchangeRight (наследуется от Right) — используется для указания ключа и разрешенного использования лицензии KeyExchange.
- Перечисление KeyExchangeAlgorithm используется для указания допустимого использования ключа в лицензии KeyExchange.
- Класс WatermarkVendor используется для предоставления приложению поддерживаемых технологий подложки клиента.
- Класс LicenseServerTimeCertificate используется для хранения сертификата для подписи времени сервера лицензирования, возвращенного в ответе на получение лицензии.
В отдельные классы были добавлены следующие элементы.
- Класс PlayReadyHeader показывает, указывает ли заголовок поддержку ключей для каждого потока и явно запрашивает лицензию.
- Перечисление ContentKeyType добавляет значение KeyExchange.
- Класс Certificate добавляет свойства массива байтов, предоставляющие дайджест и открытый ключ издателя сертификата.
- Класс License добавляет свойство GUID, предоставляющее уникальный идентификатор лицензии и свойство IEnumerable<Right> для возврата прав, добавленных в лицензию.
- Перечисление LicenseChallengeTeeAPIs добавляет значения для всех новых API TEE PK 4.5.
- Перечисление LicenseChallengeReeFeatures добавляет значения для LicenseServerTime и KeyExchange.
- Класс LicenseChallenge добавляет список KeyExchangeAlgorithms, поддерживаемый клиентом, WatermarkVendors, поддерживает PK-версии TEE и REE клиента (которые могут быть одинаковыми) и требует ли клиент текущего LicenseServerTime.
- Класс LicenseResponse добавляет свойство LicenseServerTimeCertificate для задания сертификата, используемого для подписи времени сервера лицензирования, возвращенного в ответе на получение лицензии.
- Класс ExplicitOutputRestrictionsConstants добавляет константы для watermark и InternalScreenOnly. Дополнительные сведения об этих guid см. в правилах соответствия PlayReady.
Изменения в комплекте переноса устройств PlayReady версии 4.5
Общие изменения в комплекте для переноса устройств
- Весь комплект переноса устройств PlayReady обновлен до языка заметки исходного кода (SAL) 2.0 (Майкрософт).
- Некоторые неподдерживаемые пути к коду, используемые только во внутренних реализациях Майкрософт, были удалены для устранения путаницы и сокращения времени компиляции и двоичных размеров. Ожидается, что в будущие выпуски будут включены дополнительные улучшения в этой области.
- Если поддерживается базовой архитектурой компилятора и компьютера, собственные 128-разрядные целочисленные типы теперь можно использовать для ускорения реализации ECC256 по умолчанию.
- Добавлена реализация алгоритма HMAC SHA256 по умолчанию.
Изменения API пакета переноса устройств
Это просто обзор. Дополнительные сведения см. в документации по API, предоставленной в связанных комментариях к коду в комплекте переноса устройств PlayReady .
DRM_CDMI_SetServercertificate теперь разрешено вызывать с помощью сертификата развертывания сервера PlayReady для получения лицензии на шифрование конфиденциальности и других проблем клиента. Функция перенаправит Drm_AppContext_SetProperty в этом сценарии. Существующее использование остается неизменным.
Добавлены следующие общедоступные функции:
- Drm_AppContext_SetProperty
- Drm_KeyExchange_Prepare
- Drm_KeyExchange_Perform
- Drm_KeyExchange_Close
Добавлены следующие структуры:
- DRM_DGP_REE_FEATURE_LIST_4_5
- DRM_DGP_TEE_API_LIST_4_5
Добавлены следующие API TEE:
- DRM_TEE_BASE_GetSystemTime2
- DRM_TEE_LICPREP_PackageKey2
- DRM_TEE_LICENSESERVERTIME_ProcessResponseData
- DRM_TEE_DECRYPT_PrepareToDecrypt2
- DRM_TEE_LICGEN_CompleteLicense2
- DRM_TEE_KEYEXCHANGE_Prepare
- DRM_TEE_KEYEXCHANGE_Perform
Добавлены следующие API TEE OEM:
- OEM_TEE_BASE_ECC256_SetKey
- OEM_TEE_CRYPTO_SHA256_HMAC_VerifyMAC
- OEM_TEE_CRYPTO_SHA256_HMAC_CreateMAC
- OEM_TEE_PERSISTENTSTORAGE_Read
- OEM_TEE_PERSISTENTSTORAGE_Write
- OEM_TEE_GetSupportedWatermarkVendors
Следующие API TEE OEM были переименованы без функциональных изменений:
Старое имя | Новое имя |
---|---|
OEM_TEE_DECRYPT_UnshuffleScalableContentKeys | OEM_TEE_BASE_UnshuffleScalableContentKeys |
OEM_TEE_DECRYPT_CalculateContentKeyPrimeWithAES128Key | OEM_TEE_BASE_CalculateContentKeyPrimeWithAES128Key |
OEM_TEE_DECRYPT_DeriveScalableKeyWithAES128Key | OEM_TEE_BASE_DeriveScalableKeyWithAES128Key |
OEM_TEE_DECRYPT_InitUplinkXKey | OEM_TEE_BASE_InitUplinkXKey |
OEM_TEE_DECRYPT_UpdateUplinkXKey | OEM_TEE_BASE_UpdateUplinkXKey |
OEM_TEE_DECRYPT_DecryptContentKeysWithDerivedKeys | OEM_TEE_BASE_DecryptContentKeysWithDerivedKeys |
OEM_TEE_DECRYPT_EnforcePolicy | OEM_TEE_POLICY_Enforce |