Защита содержимого с помощью динамического шифрования Служб мультимедиа

Логотип Служб мультимедиа версии 3


Службы мультимедиа Azure помогут вам защитить данные мультимедиа, покидающие ваш компьютер, на всех этапах хранения, обработки и доставки, а также доставлять в режиме реального времени и по требованию содержимое, зашифрованное динамически с помощью Advanced Encryption Standard (AES-128) или трех основных систем управления цифровыми правами (DRM): Microsoft PlayReady, Google Widevine и Apple FairPlay. Они также обеспечивают службу доставки ключей AES и лицензий DRM (PlayReady, Widevine и FairPlay) авторизованным клиентам. Если содержимое шифруется с применением незащищенного ключа AES и отправляется по протоколу HTTPS, оно не остается в незашифрованном виде до тех пор, пока не достигнет клиента.

Примечание

Widevine недоступен в регионе GovCloud.

В Службах мультимедиа v3 ключ содержимого связан с потоковым указателем (см. этот пример). При использовании службы доставки ключей Служб мультимедиа вы можете позволить Службам мультимедиа Azure создавать ключ содержимого. Ключ содержимого следует создать самостоятельно, если вы используете собственную службу доставки ключей или необходимо обрабатывать сценарий высокой доступности, где нужно иметь один и тот же ключ содержимого в двух центрах обработки данных.

Когда поток запрашивается проигрывателем, Службы мультимедиа используют указанный ключ для динамического шифрования содержимого с помощью незащищенного ключа AES или DRM. Чтобы расшифровать поток, проигрыватель запросит ключ у службы доставки ключей служб мультимедиа или в указанной вами службе доставки ключей. Чтобы определить, есть ли у пользователя право на получение ключа, служба оценивает политику ключа содержимого, которую вы задали для ключа.

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

На следующем рисунке показан рабочий процесс защиты содержимого Служб мультимедиа.

Рабочий процесс защиты содержимого Служб мультимедиа

* Динамическое шифрование поддерживает алгоритмы AES-128 Clear Key, CBCS и CENC. Дополнительные сведения см. в таблице поддержки.

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

Основные компоненты системы защиты содержимого

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

Примечание

Настоятельно рекомендуется внимательно ознакомиться и полностью проверить каждую часть в следующих разделах, прежде чем переходить к следующей части. Для тестирования вашей системы защиты содержимого используйте средства, указанные в этих разделах.

Код Служб мультимедиа

В примере DRM показано, как реализовать систему с несколькими DRM в Службах мультимедиа v3 с помощью .NET. В нем также показано, как использовать службу доставки ключей и лицензий Служб мультимедиа.

Каждый ресурс можно зашифровать с помощью нескольких типов шифрования (AES-128, PlayReady, Widevine, FairPlay). Чтобы понять, какие средства имеет смысл объединять, см. раздел Протоколы потоковой передачи и типы шифрования.

В примере показано, как выполнить следующие задачи.

  1. Создание и настройка политики ключа содержимого.

    Вы создаете политику ключа содержимого, чтобы настроить способ доставки клиентам ключа содержимого (обеспечивающего безопасный доступ к ресурсам).

    • Определите авторизацию доставки лицензий. Укажите логику проверки авторизации на основе утверждений в JSON Web Token (JWT).

    • Настройте лицензии PlayReady, Widevine и (или) FairPlay. Шаблоны позволяют настраивать права и разрешения для каждого DRM.

      ContentKeyPolicyPlayReadyConfiguration playReadyConfig = ConfigurePlayReadyLicenseTemplate();
      ContentKeyPolicyWidevineConfiguration widevineConfig = ConfigureWidevineLicenseTempate();
      ContentKeyPolicyFairPlayConfiguration fairPlayConfig = ConfigureFairPlayPolicyOptions();
      
  2. Создание потокового указателя, который настроен для потоковой передачи зашифрованного ресурса.

    Потоковый указатель должен быть связан с политикой потоковой передачи. В примере мы настраиваем в параметре StreamingLocator.StreamingPolicyName политику Predefined_MultiDrmCencStreaming.

    Применяются шифрования PlayReady и Widevine, и ключ доставляется клиенту воспроизведения на основе настроенных лицензий DRM. Если вы также хотите шифровать свои потоки с помощью CBCS (FairPlay), используйте политику Predefined_MultiDrmStreaming.

    Потоковый указатель также связан с заданной политикой ключа содержимого.

  3. Создание тестового токена.

    Метод GetTokenAsync показывает, как создать маркер тестирования.

  4. Создание URL-адреса потоковой передачи.

    Метод GetDASHStreamingUrlAsync показывает, как создать URL-адрес потоковой передачи. В этом примере URL-адрес передает содержимое DASH.

Проигрыватель с использованием клиента AES или DRM.

Приложение видеопроигрывателя на основе пакета SDK проигрывателя (или собственное, или браузерное) должно отвечать следующим требованиям.

  • Пакет SDK проигрывателя поддерживает необходимые клиенты DRM.
  • Пакет SDK проигрывателя поддерживает требуемые протоколы потоковой передачи: Smooth, DASH и (или) HTTP Live Streaming (HLS).
  • Пакет SDK проигрывателя может обрабатывать передачу маркера JWT в запрос на приобретение лицензии.

Проигрыватель можно создать с помощью API проигрывателя мультимедиа Azure. API ProtectionInfo Проигрывателя мультимедиа Azure позволяет указать, какие технологии DRM следует использовать на разных платформах DRM.

Для тестирования зашифрованного содержимого AES или CENC (Widevine и (или) PlayReady) можно использовать Проигрыватель мультимедиа Azure. Обязательно нажмите Дополнительные параметры и проверьте параметры шифрования.

Если необходимо протестировать зашифрованное содержимое FairPlay, используйте этот тестовый проигрыватель. Проигрыватель поддерживает DRM Widevine, PlayReady и FairPlay, а также шифрование незащищенного ключа AES-128.

Выберите правильный браузер для тестирования различных DRM:

  • Chrome, Opera или Firefox для Widevine;
  • Microsoft Edge или Internet Explorer 11 для PlayReady;
  • Safari в macOS для FairPlay.

Служба маркеров безопасности

Служба маркеров безопасности (STS) выдает JWT в качестве маркера доступа для обращения к ресурсам серверной части. В качестве ресурса серверной части можно использовать службу доставки лицензий или ключей Служб мультимедиа Azure. Служба маркеров безопасности должна определять следующее:

  • издателя и аудиторию (или область);
  • утверждения, которые зависят от бизнес-требований защиты содержимого;
  • симметричные или асимметричные проверки для проверки сигнатур;
  • поддержку смены ключей (при необходимости).

Для проверки службы маркеров безопасности можно использовать это средство STS. Он поддерживает все три типа ключей проверки: симметричные, асимметричные или Azure Active Directory (Azure AD) со сменой ключей.

Протоколы потоковой передачи и типы шифрования

Службы мультимедиа Azure доставляют содержимое, динамически зашифрованное с помощью незащищенного ключа AES или шифрования DRM путем использования PlayReady, Widevine или FairPlay. В настоящее время поддерживается шифрование форматов HLS, MPEG-DASH и Smooth Streaming. Каждый протокол поддерживает следующие методы шифрования.

HLS

Протокол HLS поддерживает следующие форматы контейнеров и схемы шифрования.

Формат контейнера Схема шифрования Пример URL-адреса
Все AES https://amsv3account-usw22.streaming.media.azure.net/00000000-0000-0000-0000-000000000000/ignite.ism/manifest(format=m3u8-aapl,encryption=cbc)
MPG2-TS CBCS (FairPlay) https://amsv3account-usw22.streaming.media.azure.net/00000000-0000-0000-0000-000000000000/ignite.ism/manifest(format=m3u8-aapl,encryption=cbcs-aapl)
CMAF(fmp4) CBCS (FairPlay) https://amsv3account-usw22.streaming.media.azure.net/00000000-0000-0000-0000-000000000000/ignite.ism/manifest(format=m3u8-cmaf,encryption=cbcs-aapl)
MPG2-TS CENC (PlayReady) https://amsv3account-usw22.streaming.media.azure.net/00000000-0000-0000-0000-000000000000/ignite.ism/manifest(format=m3u8-aapl,encryption=cenc)
CMAF(fmp4) CENC (PlayReady) https://amsv3account-usw22.streaming.media.azure.net/00000000-0000-0000-0000-000000000000/ignite.ism/manifest(format=m3u8-cmaf,encryption=cenc)

HLS/CMAF + FairPlay (включая HEVC/H.265) поддерживается на следующих устройствах:

  • iOS 11 или более поздней версии;
  • iPhone 8 или более поздней версии;
  • macOS High Sierra с процессором Intel 7-го поколения.

MPEG-DASH

Протокол MPEG-DASH поддерживает следующие форматы контейнеров и схемы шифрования.

Формат контейнера Схема шифрования Примеры URL-адресов
Все AES https://amsv3account-usw22.streaming.media.azure.net/00000000-0000-0000-0000-000000000000/ignite.ism/manifest(format=mpd-time-csf,encryption=cbc)
CSF(fmp4) CENC (Widevine + PlayReady) https://amsv3account-usw22.streaming.media.azure.net/00000000-0000-0000-0000-000000000000/ignite.ism/manifest(format=mpd-time-csf,encryption=cenc)
CMAF(fmp4) CENC (Widevine + PlayReady) https://amsv3account-usw22.streaming.media.azure.net/00000000-0000-0000-0000-000000000000/ignite.ism/manifest(format=mpd-time-cmaf,encryption=cenc)

Smooth Streaming

Протокол Smooth Streaming поддерживает следующие форматы контейнеров и схемы шифрования.

Протокол Формат контейнера Схема шифрования
fMP4 AES https://amsv3account-usw22.streaming.media.azure.net/00000000-0000-0000-0000-000000000000/ignite.ism/manifest(encryption=cbc)
fMP4 CENC (PlayReady) https://amsv3account-usw22.streaming.media.azure.net/00000000-0000-0000-0000-000000000000/ignite.ism/manifest(encryption=cenc)
fMP4 PIFF 1.1 (PlayReady) https://amsv3account-usw22.streaming.media.azure.net/00000000-0000-0000-0000-000000000000/ignite.ism/manifest(encryption=piff)

Примечание

Поддержка PIFF 1.1 предоставляется в виде обратно совместимого решения для Smart TV (Samsung, LG), которое реализовало раннюю версию Silverlight стандарта Common Encryption. Формат PIFF рекомендуется использовать только в том случае, когда он необходим для поддержки устаревших моделей Smart TV Samsung или LG, которые поставлялись в 2009–2015 годах и поддерживали шифрование PlayReady PIFF 1.1.

Браузеры

Распространенные браузеры поддерживают следующие клиенты DRM.

Браузер Шифрование
Chrome Widevine
Microsoft Edge, Internet Explorer 11 PlayReady
Firefox Widevine
Opera Widevine
Safari FairPlay

Управление доступом к содержимому

Вы можете контролировать пользователей, имеющих доступ к содержимому, настроив политику ключей содержимого. Службы мультимедиа поддерживают несколько способов авторизации пользователей, которые запрашивают ключи. Прежде чем ключ будет доставлен клиенту (проигрыватель), он должен быть приведен в соответствие с политикой. Политика ключей содержимого может иметь ограничения по открытию или по маркеру.

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

При использовании политики ключей содержимого с ограничениями по маркеру ключ содержимого будет отправлен только тому клиенту, который предоставит в запросе ключа или лицензии действительный маркер JWT или простой веб-маркер (SWT). Этот маркер должен быть выдан службой маркеров безопасности (STS).

Вы можете использовать Azure Active Directory в качестве службы маркеров безопасности или развернуть пользовательскую службу маркеров безопасности. Чтобы создать маркер, подписанный указанным ключом, и получить утверждения, указанные в конфигурации ограничения по маркерам, должна быть настроена служба маркеров безопасности. Служба доставки лицензий и ключей Служб мультимедиа возвращает клиенту запрошенную лицензию или ключ, если выполнены оба следующих условия:

  • маркер является действительным;
  • утверждения в маркере соответствуют утверждениям, настроенным для лицензии или ключа.

При настройке политики ограничения по маркеру необходимо задать такие параметры, как основной ключ проверки, издатель и аудитория. Основной ключ проверки содержит ключ, которым был подписан маркер. Издателем является служба STS, которая выдала маркер. Аудитория, иногда называемая областью, описывает назначение маркера или ресурс, доступ к которому обеспечивает этот маркер. Служба доставки лицензий или ключей Служб мультимедиа проверяет, соответствуют ли эти значения в маркере значениям в шаблоне.

Предотвращение воспроизведения маркеров

Функция Предотвращение воспроизведения маркеров позволяет клиентам Служб мультимедиа устанавливать ограничения на то, сколько раз один и тот же маркер можно использовать для запроса ключа или лицензии. Клиент может добавить в маркер утверждение типа urn:microsoft:azure:mediaservices:maxuses, где значение — это количество возможных использований маркера для получения лицензии или ключа. Все последующие запросы по предоставлению ключей с идентичным маркером к функции Доставки ключей будут возвращать ответ об отсутствии авторизации. В примере DRM показано, как добавить утверждение.

Рекомендации

  • Клиенты должны контролировать создание маркеров. Утверждение необходимо помещать непосредственно в сам маркер.
  • При использовании этой функции запросы с маркерами, срок действия которых превышает один час с момента получения запроса, отклоняются с ответом об отсутствии авторизации.
  • Маркеры имеют уникальную идентификацию посредством сигнатуры. Любое изменение в полезных данных (например, обновление срока действия или утверждения) изменяет сигнатуру маркера, и с этого момента он будет считаться новым маркером, с которым функция доставки ключей еще не взаимодействовала.
  • Если маркер превысил значение maxuses, установленное клиентом, возникает сбой воспроизведения.
  • Эту функцию можно использовать для всего существующего защищенного содержимого (необходимо изменить только выданный маркер).
  • Эта функция работает как с JWT, так и с SWT.

Использование пользовательской службы маркеров безопасности

Клиент может выбрать пользовательскую службу маркеров безопасности для предоставления маркеров JWT. Причины.

  • Поставщик удостоверений (IDP), используемый клиентом, не поддерживает службу маркеров безопасности. В этом случае решение — использовать пользовательскую службу STS.

  • Клиенту может потребоваться более гибкий или более жесткий контроль при интеграции STS с системой выставления счетов подписчика клиента.

    Например, оператор службы OTT может предлагать несколько пакетов подписчиков, таких как Premium, Basic, Sports и т. д. Оператору может потребоваться сопоставить утверждения в маркере с пакетом подписчика, чтобы предоставлялось только содержимое в определенном пакете. В этом случае пользовательская STS предоставляет необходимую гибкость и контроль.

  • Для включения пользовательских утверждений в маркер для выбора между разными ContentKeyPolicyOption с различными параметрами лицензии DRM (лицензия на подписку и лицензия на аренду).

  • Для включения утверждения, представляющего идентификатор ключа содержимого, к которому маркер предоставляет доступ.

При применении пользовательской STS необходимо внести два изменения:

  • При настройке службы доставки лицензий для ресурса необходимо указать ключ безопасности, используемый для проверки пользовательской STS вместо текущего ключа из Azure Active Directory.
  • Когда создается маркер JTW, вместо закрытого ключа текущего сертификата X509 в Azure AD указан ключ безопасности.

Существует два типа ключей безопасности:

  • Симметричный ключ: тот же ключ используется для создания и проверки маркера JWT.
  • Асимметричный ключ: пара открытого и закрытого ключей в сертификате X509 используется с закрытым ключом для шифрования и создания маркера JWT и с открытым ключом для проверки маркера.

При использовании .NET Framework/C# в качестве платформы разработки сертификат X509, используемый для асимметричного ключа безопасности, должен иметь длину ключа минимум 2048 бит. Такая длина ключа — требование класса System.IdentityModel.Tokens.X509AsymmetricSecurityKey в .NET Framework. В противном случае выдается следующее исключение: IDX10630: The 'System.IdentityModel.Tokens.X509AsymmetricSecurityKey' for signing can't be smaller than '2048' bits (System.IdentityModel.Tokens.X509AsymmetricSecurityKey для подписывания не может быть меньше 2048 бит).

Пользовательский ключ и URL-адрес для получения лицензии

Если вы хотите указать другую службу доставки лицензий или ключей (не Службы мультимедиа), используйте следующие шаблоны. Два заменяемых поля в шаблонах позволяют совместно использовать вашу политику потоковой передачи во многих ресурсах вместо создания политики потоковой передачи для каждого ресурса.

  • EnvelopeEncryption.CustomKeyAcquisitionUrlTemplate: шаблон для URL-адреса пользовательской службы, которая доставляет ключи для проигрывателей конечных пользователей. Если для выдачи ключей вы используете Службы мультимедиа Azure, этот шаблон не нужен.

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

    • {AlternativeMediaId}, которое заменяется значением StreamingLocatorId.AlternativeMediaId;
    • {ContentKeyId}, которое заменяется значением идентификатора запрошенного ключа.
  • StreamingPolicyPlayReadyConfiguration.CustomLicenseAcquisitionUrlTemplate: шаблон для URL-адреса пользовательской службы, которая доставляет лицензии для проигрывателей конечных пользователей. Если для выдачи лицензий вы используете Службы мультимедиа Azure, этот шаблон не нужен.

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

    • {AlternativeMediaId}, которое заменяется значением StreamingLocatorId.AlternativeMediaId;
    • {ContentKeyId}, которое заменяется значением идентификатора запрошенного ключа.
  • StreamingPolicyWidevineConfiguration.CustomLicenseAcquisitionUrlTemplate: то же, что и предыдущий шаблон, только для Widevine.

  • StreamingPolicyFairPlayConfiguration.CustomLicenseAcquisitionUrlTemplate: то же, что и предыдущий шаблон, только для FairPlay.

Пример:

streamingPolicy.EnvelopEncryption.customKeyAcquisitionUrlTemplate = "https://mykeyserver.hostname.com/envelopekey/{AlternativeMediaId}/{ContentKeyId}";

ContentKeyId имеет значение запрошенного ключа. Вы можете использовать AlternativeMediaId, если хотите сопоставлять запрос с сущностью на вашей стороне. Например, AlternativeMediaId можно использовать для поиска разрешений.

Примеры REST, в которых используются настраиваемые URL-адреса для приобретения лицензий или ключей, см. в разделе Политики потоковой передачи — создание.

Примечание

Widevine — это служба, которая предоставляется компанией Google Inc. и подпадает под условия предоставления услуг и политику конфиденциальности Google Inc.

Диагностика

Если возникает ошибка MPE_ENC_ENCRYPTION_NOT_SET_IN_DELIVERY_POLICY, убедитесь, что указана соответствующая политика потоковой передачи.

Если возникают ошибки с _NOT_SPECIFIED_IN_URL в конце, проверьте, указан ли формат шифрования в URL-адресе. Например, …/manifest(format=m3u8-cmaf,encryption=cbcs-aapl). См. раздел Протоколы потоковой передачи и типы шифрования.

Получение справки, отправка отзывов, получение обновлений

Прочитайте статью сообщества Служб мультимедиа Azure, чтобы узнать, как задавать вопросы, оставлять отзывы и получать новости о Службах мультимедиа.