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


Обзор COPP (Content Output Protection Protocol)

[Функция, связанная с этой страницей, DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngineи аудио и видеозахват в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует, чтобы новый код использовал MediaPlayer, IMFMediaEngine и аудио- и видеозахват в Media Foundation вместо DirectShowпо возможности. Корпорация Майкрософт предлагает, что существующий код, использующий устаревшие API, будет перезаписан для использования новых API, если это возможно.]

Ниже приведены основные действия, которые приложение должно выполнять для использования протокола СЕРТИФИЦИРОВАННОЙ защиты выходных данных (COPP).

Получите цепочку сертификатов драйвера

  1. Создайте граф воспроизведения DirectShow, который выводит видео с использованием рендерера видео (Video Mixing Renderer — VMR-7 или VMR-9) или фильтра расширенного рендерера видео (Enhanced Video Renderer — EVR) .
  2. Запросите VMR для интерфейса IAMCertifiedOutputProtection.
  3. Вызов IAMCertifiedOutputProtection::KeyExchange. Этот метод возвращает 128-разрядное случайное число из драйвера, а также цепочку сертификатов, содержащую 2048-разрядный открытый ключ RSA драйвера.

Валидировать цепочку сертификатов

  1. Проверьте цепочку сертификатов. Если цепочка сертификатов недействительна, остановитесь.
  2. Проверьте список отзыва сертификатов (CRL). Если любой из сертификатов в цепочке сертификатов находится в списке отзыва, остановитесь.
  3. Получите открытый ключ RSA из цепочки сертификатов.

Инициализация сеанса COPP

  1. Создайте 128-разрядный ключ сеанса AES. Этот ключ используется для подписывания данных и проверки того, что подписанные данные не были изменены.
  2. Создайте два криптографически безопасных 32-разрядных случайных чисел. Первое — номер последовательности состояния, а второй — номер последовательности команд. Каждый раз, когда приложение отправляет команду или запрос состояния, он увеличивает соответствующий порядковый номер и включает это число в команду COPP или данные запроса.
  3. Конкатенируйте 128-битное случайное число из графического драйвера, ключ сеанса AES, номер последовательности состояния и номер последовательности команды. Зашифруйте этот массив байтов с помощью открытого ключа драйвера и передайте результат в IAMCertifiedOutputProtection::SessionSequenceStart.

Отправлять команды и запросы состояния КОПП

  1. Сделайте запрос доступных типов защиты и другой информации путем вызова IAMCertifiedOutputProtection::ProtectionStatus.
  2. Задайте требуемые уровни защиты с помощью вызова IAMCertifiedOutputProtection::ProtectionCommand.
  3. Периодически запрашивать текущий локальный уровень защиты. Остановите воспроизведение, если локальный уровень защиты неожиданно изменится или обнаружится проблема.

Использование сертифицированного протокола защиты выходных данных COPP