функция обратного вызова DXGKDDI_OPM_SET_SIGNING_KEY_AND_SEQUENCE_NUMBERS (dispmprt.h)

Функция DxgkDdiOPMSetSigningKeyAndSequenceNumbers задает ключ подписывания данного объекта защищенного вывода и два порядковых номера.

Синтаксис

DXGKDDI_OPM_SET_SIGNING_KEY_AND_SEQUENCE_NUMBERS DxgkddiOpmSetSigningKeyAndSequenceNumbers;

NTSTATUS DxgkddiOpmSetSigningKeyAndSequenceNumbers(
  [in] PVOID MiniportDeviceContext,
  [in] HANDLE ProtectedOutputHandle,
  [in] const DXGKMDT_OPM_ENCRYPTED_PARAMETERS *EncryptedParameters
)
{...}

Параметры

[in] MiniportDeviceContext

Дескриптор для блока контекста, связанного с видеоадаптером. Ранее функция DxgkDdiAddDevice драйвера мини-порта дисплея предоставляла этот дескриптор подсистеме ядра графики DirectX.

[in] ProtectedOutputHandle

Дескриптор защищенного выходного объекта. Функция DxgkDdiOPMCreateProtectedOutput создает защищенный выходной объект и возвращает дескриптор объекту .

[in] EncryptedParameters

Указатель на структуру DXGKMDT_OPM_ENCRYPTED_PARAMETERS , содержащую 256-байтный массив. Массив содержит от 40 до 256 байт данных, зашифрованных с помощью открытого ключа из соответствующего сертификата. Для получения дополнительных сведений об открытом ключе скачайте документ Защита содержимого выходных данных из раздела Поддержка диспетчера защиты выходных данных. Если защищенные выходные данные имеют семантику OPM, данные шифруются с помощью открытого ключа из сертификата OPM драйвера мини-порта дисплея. Если защищенные выходные данные имеют семантику протокола COPP, данные шифруются с помощью открытого ключа из сертификата COPP драйвера минипорта дисплея.

Алгоритм, который драйвер минипорта отображения должен использовать для расшифровки данных в массиве, зависит от семантики защищенных выходных данных. Защищенные выходные данные с семантикой OPM используют схему шифрования RSAES-OAEP для расшифровки данных. Дополнительные сведения о RSAES-OAEP см. на веб-сайте лабораторий RSA . Защищенные выходные данные с семантикой COPP используют стандартный алгоритм шифрования RSA для расшифровки зашифрованных данных.

После того как драйвер мини-порта дисплея расшифровывает данные, в настоящее время полезны только первые 40 байт данных. Первые 16 байт расшифрованных данных содержат случайное число, возвращаемое функцией DxgkDdiOPMGetRandomNumber драйвера дисплея при передаче дескриптора в параметре ProtectedOutputHandle . Следующие 16 байт содержат 128-разрядный ключ подписывания AES. Следующие 4 байта содержат порядковый номер, используемый dxgkDdiOPMGetInformation или DxgkDdiOPMGetCOPPCompatibleInformation. Последние 4 байта содержат порядковый номер, используемый DxgkDdiOPMConfigureProtectedOutput. Остальные расшифрованные данные следует игнорировать, если они существуют.

Возвращаемое значение

DxgkDdiOPMSetSigningKeyAndSequenceNumbers возвращает STATUS_SUCCESS , если функция успешно задала ключ подписи и два порядковых номера. В противном случае он может вернуть STATUS_OPM_INVALID_ENCRYPTED_PARAMETERS по одной из следующих причин:

  • Если защищенные выходные данные имеют семантику OPM, данные, расшифрованные драйвером минипорта дисплея, не были закодированы с помощью алгоритма кодирования RSAES-OAEP. Дополнительные сведения о RSAES-OAEP см. в разделе 7.1.2 статьи PKCS #1 версии 2.1: стандарт шифрования RSA на веб-сайте RSA Laboratories .
  • Данные не были зашифрованы вызывающим абонентом с помощью соответствующего открытого ключа. Если выходные данные имеют семантику OPM, вызывающий объект должен зашифровать данные с помощью открытого ключа из сертификата OPM драйвера мини-порта дисплея. Если выходные данные имеют семантику COPP, вызывающий объект должен зашифровать данные с помощью открытого ключа из сертификата COPP драйвера мини-порта дисплея.
  • Вызывающий объект не шифрует по крайней мере 40 байт данных.
  • 16-байтовое случайное число в данных, расшифровываемое драйвером мини-порта дисплея, не совпадает с 16-байтным случайным числом, возвращенным функцией DxgkDdiOPMGetRandomNumber .

Эта функция также может возвращать другие коды ошибок, определенные в Ntstatus.h.

Комментарии

Ключ подписи используется для проверки того, что данные, передаваемые в функции DxgkDdiOPMConfigureProtectedOutput и DxgkDdiOPMGetInformation , поступают из приложения, которое косвенно использует защищенные выходные данные. Ключ подписывания также используется для подписывания данных, возвращаемых функциями DxgkDdiOPMGetInformation и DxgkDdiOPMGetCOPPCompatibleInformation . Один из порядковых номеров используется dxgkDdiOPMConfigureProtectedOutput. Другой порядковый номер используется dxgkDdiOPMGetInformation или DxgkDdiOPMGetCOPPCompatibleInformation.

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

  1. Расшифруйте данные, на которые указывает EncryptedParameters , с помощью соответствующего закрытого ключа и схемы шифрования. Если выходные данные имеют семантику OPM, драйвер минипорта отображения должен использовать закрытый ключ OPM для расшифровки данных. Если выходные данные имеют семантику COPP, драйвер мини-порта отображения должен использовать закрытый ключ COPP для расшифровки данных.
  2. Если выходные данные имеют семантику OPM, убедитесь, что расшифрованные данные были закодированы с помощью алгоритма кодирования RSAES-OAEP.
  3. Убедитесь, что было расшифровано не менее 40 байт данных.
  4. Убедитесь, что случайное число, содержащееся в первых 16 байтах расшифрованных данных, совпадает со случайным числом, возвращенным dxgkDdiOPMGetRandomNumber драйвера дисплея miniport, когда ему был передан дескриптор в параметре ProtectedOutputHandle .
  5. Кэшируйте 128-разрядный ключ подписывания AES и два 32-разрядных порядковых номера.

Перед передачей дескриптора защищенного выходного объекта в DxgkDdiOPMSetSigningKeyAndSequenceNumbers он передается в DxgkDdiOPMGetRandomNumber. Каждый дескриптор защищенного выходного объекта передается в DxgkDdiOPMSetSigningKeyAndSequenceNumbers только один раз.

DxgkDdiOPMSetSigningKeyAndSequenceNumbers должны быть доступны для страниц.

Параметры RSAES-OAEP и MGF1

RSAES-OAEP — это параметризованная схема шифрования, а MGF1 — параметризованная функция создания маски. Ниже приведены параметры, используемые OPM при использовании RSAES-OAEP и MGF1. Дополнительные сведения о следующих терминах и стандарте шифрования RSA см. на веб-сайтах RSA Laboratories и Secure Hashing .

Требования

Требование Значение
Целевая платформа Персональный компьютер
Верхняя часть dispmprt.h (включая Dispmprt.h)
IRQL PASSIVE_LEVEL (см. раздел "Примечания")

См. также раздел

DxgkDdiOPMGetCOPPCompatibleInformation

DxgkDdiOPMCreateProtectedOutput

DXGKMDT_OPM_ENCRYPTED_PARAMETERS

DxgkDdiAddDevice

DxgkDdiOPMGetRandomNumber

DxgkDdiOPMGetInformation

DxgkDdiOPMConfigureProtectedOutput