Аппаратное аварийное восстановление
В этом разделе представлен обзор добавления аппаратного управления цифровыми правами на основе PlayReady (DRM) в приложение универсальная платформа Windows (UWP).
Примечание.
Оборудование PlayReady DRM поддерживается на различных устройствах, включая устройства Windows и не Windows, такие как телевизоры, телефоны и планшеты. Чтобы устройство Windows поддерживало аппаратное аварийное восстановление PlayReady, оно должно работать под управлением Windows 10 и иметь поддерживаемую конфигурацию оборудования.
Все чаще поставщики контента переходят к аппаратным защитам для предоставления разрешения на воспроизведение полного содержимого с высоким уровнем ценности в приложениях. Надежная поддержка аппаратной реализации криптографического ядра добавлена в PlayReady для удовлетворения этой потребности. Эта поддержка обеспечивает безопасное воспроизведение содержимого высокой четкости (1080p) и ультра-высокого определения (UHD) на нескольких платформах устройств. Материалы ключей (включая закрытые ключи, ключи содержимого и любые другие ключевые материалы, используемые для получения или разблокировки указанных ключей), а расшифрованные сжатые и несжатые примеры видео защищены с помощью аппаратной безопасности.
Реализация Windows TEE
В этом разделе представлен краткий обзор реализации доверенной среды выполнения (TEE) Windows 10.
Сведения о реализации TEE Для Windows выходят за рамки этого документа. Однако краткое обсуждение разницы между портом TEE стандартного набора портов для переноса и порта Windows будет полезно. Windows реализует уровень прокси-сервера OEM и передает сериализованные функции PRITEE в драйвер пользовательского режима в подсистеме Windows Media Foundation. Это в конечном итоге будет перенаправлено в драйвер Windows TrEE (доверенные среды выполнения) или графический драйвер OEM. Подробные сведения о любом из этих подходов выходят за рамки этого документа. На следующей схеме показан общий компонент для порта Windows. Если вы хотите разработать реализацию TEE Для Windows PlayReady, обратитесь к WMLA@Microsoft.comней.
Рекомендации по использованию аппаратного DRM
В этом разделе представлен краткий список элементов, которые следует учитывать при разработке приложений, предназначенных для использования аппаратного DRM. Как описано в статье PlayReady DRM с PlayReady HWDRM для Windows 10, все выходные защиты применяются в реализации TEE Windows, что имеет некоторые последствия для поведения защиты выходных данных:
- Поддержка уровня защиты выходных данных (OPL) для несжатого цифрового видео 270: PlayReady HWDRM для Windows 10 не поддерживает понижение разрешения и будет применяться к использованию HDCP. Рекомендуется, чтобы содержимое высокого определения для HWDRM было больше 270 (хотя оно не требуется). Кроме того, рекомендуется задать ограничение типа HDCP в лицензии (HDCP версии 2.2 в Windows 10).
- В отличие от программного DRM (SWDRM), защита выходных данных применяется ко всем мониторам на основе наименее способных мониторов. Например, если у пользователя есть два монитора, где один из мониторов поддерживает HDCP, а другой — нет, воспроизведение завершится ошибкой, если лицензия требует HDCP, даже если содержимое отображается только на мониторе, поддерживающем HDCP. В программном drM содержимое будет воспроизводиться до тех пор, пока оно отрисовывается только на мониторе, поддерживающем HDCP.
- HWDRM не гарантируется, что клиент будет использовать и обеспечить безопасность, если следующие условия не выполняются ключами содержимого и лицензиями:
- Лицензия, используемая для ключа видеоконтента, должна иметь свойство минимального уровня безопасности 3000.
- Звук должен быть зашифрован для другого ключа содержимого, отличного от видео, и лицензия, используемая для звука, должна иметь свойство минимального уровня безопасности 2000. Кроме того, звук можно оставить в ясном месте.
Кроме того, при использовании HWDRM следует учитывать следующие элементы:
- Защищенный процесс мультимедиа (PMP) не поддерживается.
- Видео Windows Media (также известное как VC-1) не поддерживается (см . раздел "Переопределение аппаратного DRM").
- Несколько единиц обработки графики (GPU) не поддерживаются для постоянных лицензий.
Чтобы обрабатывать постоянные лицензии на компьютерах с несколькими GPU, рассмотрим следующий сценарий:
- Клиент покупает новый компьютер с интегрированной графической картой.
- Клиент использует приложение, которое получает постоянные лицензии при использовании аппаратного DRM.
- Постоянная лицензия теперь привязана к аппаратным ключам этой графической карты.
- Затем клиент устанавливает новую графическую карту.
- Все лицензии в хэшированного хранилища данных (HDS) привязаны к встроенной видеокарте, но клиент теперь хочет воспроизвести защищенное содержимое с помощью недавно установленной графической карты.
Чтобы предотвратить сбой воспроизведения, так как лицензии не могут быть расшифрованы оборудованием, PlayReady использует отдельный HDS для каждой графической карты, с которой она сталкивается. Это приведет к тому, что PlayReady попытается получить лицензию на содержимое, в котором PlayReady обычно имеет лицензию (т. е. в случае программного drM или любой случай без изменения оборудования, PlayReady не потребуется повторно получить лицензию). Таким образом, если приложение получает постоянную лицензию при использовании аппаратного DRM, ваше приложение должно иметь возможность обрабатывать ситуацию, когда эта лицензия фактически теряется, если конечный пользователь устанавливает (или удаляет) графический карточку. Так как это не распространенный сценарий, вы можете решить, чтобы обрабатывать вызовы поддержки, когда содержимое больше не воспроизводится после изменения оборудования, а не выяснить, как справиться с изменением оборудования в коде клиента или сервера.
Переопределение аппаратного DRM
В этом разделе описывается переопределение аппаратного DRM (HWDRM), если содержимое, которое будет воспроизводиться обратно, не поддерживает аппаратное drM.
По умолчанию аппаратный DRM используется, если система поддерживает ее. Однако некоторые содержимое не поддерживается в аппаратном drM. Одним из примеров этого является содержимое коктейля. Другим примером является любое содержимое, использующее видеокодек, отличный от H.264 и HEVC. Еще одним примером является содержимое HEVC, так как некоторые аппаратные DRM поддерживают HEVC, и некоторые из него не будут. Таким образом, если вы хотите воспроизвести часть содержимого и аппаратного DRM не поддерживает его в системе, возможно, вы захотите отказаться от аппаратного DRM.
В следующем примере показано, как отказаться от аппаратного drM. Это необходимо сделать только перед переключением. Кроме того, убедитесь, что у вас нет объекта PlayReady в памяти, в противном случае поведение не определено.
var applicationData = Windows.Storage.ApplicationData.current;
var localSettings = applicationData.localSettings.createContainer("PlayReady", Windows.Storage.ApplicationDataCreateDisposition.always);
localSettings.values["SoftwareOverride"] = 1;
Чтобы вернуться к аппаратному drM, задайте для параметра SoftwareOverride значение 0.
Для каждого воспроизведения мультимедиа необходимо задать для MediaProtectionManager значение:
mediaProtectionManager.properties["Windows.Media.Protection.UseSoftwareProtectionLayer"] = true;
Лучший способ определить, находится ли вы в аппаратном drM или программном DRM, — посмотреть на C:\Users\username>\AppData\<Local\Packages\<имя>_приложения\LocalCache\PlayReady\*
- Если есть файл mspr.hds, вы находитесь в программном drM.
- Если у вас есть другой файл *.hds, вы находитесь в аппаратном DRM.
- Вы можете удалить всю папку PlayReady и повторить тест.
Определение типа аппаратного DRM
В этом разделе описывается, как определить, какой тип аппаратного DRM поддерживается в системе.
Вы можете использовать метод PlayReadyStatics.CheckSupportedHardware , чтобы определить, поддерживает ли система определенную функцию аварийного восстановления оборудования. Например:
bool isFeatureSupported = PlayReadyStatics.CheckSupportedHardware(PlayReadyHardwareDRMFeatures.HEVC);
Перечисление PlayReadyHardwareDRMFeatures содержит допустимый список значений функций DRM оборудования, которые можно запрашивать. Чтобы определить, поддерживается ли оборудование DRM, используйте элемент HardwareDRM в запросе. Чтобы определить, поддерживает ли оборудование кодек с высоким уровнем эффективности видео (HEVC)/H.265, используйте член HEVC в запросе.
Вы также можете использовать свойство PlayReadyStatics.PlayReadyCertificateSecurityLevel , чтобы получить уровень безопасности сертификата клиента, чтобы определить, поддерживается ли оборудование DRM. Если уровень безопасности возвращаемого сертификата больше или равен 3000, клиент не является индивидуализированным или подготовленным (в этом случае это свойство возвращает значение 0) или аппаратное drM не используется (в этом случае это свойство возвращает значение меньше 3000).
Обнаружение поддержки AES128CBC аппаратного drM
Начиная с Windows 10 версии 1709, вы можете обнаружить поддержку шифрования оборудования AES128CBC на устройстве, вызвав PlayReadyStatics.CheckSupportedHardware и указав значение перечисления PlayReadyHardwareDRMFeatures.Aes128Cbc. В предыдущих версиях Windows 10 указание этого значения приведет к возникновению исключения. По этой причине необходимо проверить наличие значения перечисления путем вызова ApiInformation.IsApiContractPresent и указания основной версии контракта 5 перед вызовом CheckSupportedHardware.
bool supportsAes128Cbc = ApiInformation.IsApiContractPresent("Windows.Foundation.UniversalApiContract", 5);
if (supportsAes128Cbc)
{
supportsAes128Cbc = PlayReadyStatics.CheckSupportedHardware(PlayReadyHardwareDRMFeatures.Aes128Cbc);
}