Share via


DXGKDDI_OPM_SET_SIGNING_KEY_AND_SEQUENCE_NUMBERS función de devolución de llamada (dispmprt.h)

La función DxgkDdiOPMSetSigningKeyAndSequenceNumbers establece la clave de firma del objeto de salida protegido dado y dos números de secuencia.

Sintaxis

DXGKDDI_OPM_SET_SIGNING_KEY_AND_SEQUENCE_NUMBERS DxgkddiOpmSetSigningKeyAndSequenceNumbers;

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

Parámetros

[in] MiniportDeviceContext

Identificador de un bloque de contexto asociado a un adaptador de pantalla. Anteriormente, la función DxgkDdiAddDevice del controlador de miniporte de pantalla proporcionó este identificador al subsistema del kernel de gráficos de DirectX.

[in] ProtectedOutputHandle

Identificador de un objeto de salida protegido. La función DxgkDdiOPMCreateProtectedOutput crea el objeto de salida protegido y devuelve el identificador al objeto .

[in] EncryptedParameters

Puntero a una estructura de DXGKMDT_OPM_ENCRYPTED_PARAMETERS que contiene una matriz de 256 bytes. La matriz contiene entre 40 y 256 bytes de datos cifrados con la clave pública del certificado adecuado. Para obtener más información sobre la clave pública, descargue el documento Protección de contenido de salida del Administrador de protección de salida. Si la salida protegida tiene semántica de OPM, los datos se cifran con la clave pública del certificado OPM del controlador de miniporte para mostrar. Si la salida protegida tiene semántica del Protocolo de protección de salida certificada (COPP), los datos se cifran con la clave pública del certificado COPP del controlador de miniporte para mostrar.

El algoritmo que el controlador de miniporte para mostrar debe usar para descifrar los datos de la matriz depende de la semántica de la salida protegida. Las salidas protegidas con semántica de OPM usan el esquema de cifrado RSAES-OAEP para descifrar los datos. Para obtener más información sobre RSAES-OAEP, consulte el sitio web de RSA Laboratories . Las salidas protegidas con semántica COPP usan el algoritmo de cifrado RSA estándar para descifrar los datos cifrados.

Una vez que el controlador de miniporte de pantalla descifra los datos, solo los primeros 40 bytes de los datos son útiles actualmente. Los primeros 16 bytes de los datos descifrados contienen el número aleatorio que la función DxgkDdiOPMGetRandomNumber del controlador de miniporte para mostrar devuelve cuando se le pasó el identificador en el parámetro ProtectedOutputHandle . Los siguientes 16 bytes contienen la clave de firma AES de 128 bits. Los siguientes 4 bytes contienen el número de secuencia que usa DxgkDdiOPMGetInformation o DxgkDdiOPMGetCOPPCompatibleInformation. Los 4 bytes finales contienen el número de secuencia que usa DxgkDdiOPMConfigureProtectedOutput. El resto de los datos descifrados debe omitirse si existe.

Valor devuelto

DxgkDdiOPMSetSigningKeyAndSequenceNumbers devuelve STATUS_SUCCESS si la función estableció correctamente la clave de firma y dos números de secuencia. De lo contrario, podría devolver STATUS_OPM_INVALID_ENCRYPTED_PARAMETERS por uno de los siguientes motivos:

  • Si la salida protegida tiene semántica de OPM, los datos que el controlador de miniporte para mostrar descifrado no se codificaron con el algoritmo de codificación RSAES-OAEP. Para obtener más información sobre RSAES-OAEP, consulte la sección 7.1.2 en PKCS #1 v2.1: RSA Cryptography Standard, en el sitio web de RSA Laboratories .
  • El autor de la llamada no cifró los datos con la clave pública adecuada. Si la salida tiene semántica de OPM, el autor de la llamada debe cifrar los datos con la clave pública del certificado OPM del controlador de miniporte para mostrar. Si la salida tiene semántica COPP, el autor de la llamada debe cifrar los datos con la clave pública del certificado COPP del controlador de miniporte para mostrar.
  • El autor de la llamada no cifró al menos 40 bytes de datos.
  • El número aleatorio de 16 bytes en los datos que descifra el controlador de miniporte para mostrar no coincide con el número aleatorio de 16 bytes que devolvió la función DxgkDdiOPMGetRandomNumber .

Esta función también puede devolver otros códigos de error definidos en Ntstatus.h.

Comentarios

La clave de firma se usa para comprobar que los datos que se pasan a las funciones DxgkDdiOPMConfigureProtectedOutput y DxgkDdiOPMGetInformation proceden de la aplicación que usa indirectamente la salida protegida. La clave de firma también se usa para firmar los datos devueltos por las funciones DxgkDdiOPMGetInformation y DxgkDdiOPMGetCOPPCompatibleInformation . DxgkDdiOPMConfigureProtectedOutput usa uno de los números de secuencia. DxgkDdiOPMGetInformation o DxgkDdiOPMGetCOPPCompatibleInformation usa el otro número de secuencia.

DxgkDdiOPMSetSigningKeyAndSequenceNumbers debe devolver un código de error si se produce un error o si los datos de la estructura DXGKMDT_OPM_ENCRYPTED_PARAMETERS a la que apunta el parámetro EncryptedParameters no tienen el formato necesario. De lo contrario, DxgkDdiOPMSetSigningKeyAndSequenceNumbers debe realizar la siguiente secuencia de operaciones:

  1. Descifra los datos a los que apunta EncryptedParameters con la clave privada y el esquema de cifrado adecuados. Si la salida tiene semántica de OPM, el controlador de minipuerto de pantalla debe usar su clave privada de OPM para descifrar los datos. Si la salida tiene semántica COPP, el controlador de minipuerto de pantalla debe usar su clave privada COPP para descifrar los datos.
  2. Si la salida tiene semántica de OPM, compruebe que los datos que se descifran se codificaron con el algoritmo de codificación RSAES-OAEP.
  3. Compruebe que se descifraron al menos 40 bytes de los datos.
  4. Compruebe que el número aleatorio contenido en los primeros 16 bytes de los datos que se descifran coincide con el número aleatorio que el controlador de miniporte para mostrar DxgkDdiOPMGetRandomNumber devolvió cuando se le pasó el identificador en el parámetro ProtectedOutputHandle .
  5. Almacene en caché la clave de firma AES de 128 bits y los dos números de secuencia de 32 bits.

Antes de pasar el identificador de un objeto de salida protegido a DxgkDdiOPMSetSigningKeyAndSequenceNumbers, se pasa a DxgkDdiOPMGetRandomNumber. Cada identificador de objeto de salida protegido solo se pasa a DxgkDdiOPMSetSigningKeyAndSequenceNumbers una vez.

DxgkDdiOPMSetSigningKeyAndSequenceNumbers debe ser paginable.

Parámetros RSAES-OAEP y MGF1

RSAES-OAEP es un esquema de cifrado con parámetros y MGF1 es una función de generación de máscaras con parámetros. A continuación se muestran los parámetros que usa OPM cuando usa RSAES-OAEP y MGF1. Para obtener más información sobre los términos siguientes y rsa Cryptography Standard, consulte los sitios web rsa Laboratories and Secure Hashing .

Requisitos

Requisito Value
Plataforma de destino Escritorio
Encabezado dispmprt.h (include Dispmprt.h)
IRQL PASSIVE_LEVEL (consulte la sección Comentarios)

Consulte también

DxgkDdiOPMGetCOPPCompatibleInformation

DxgkDdiOPMCreateProtectedOutput

DXGKMDT_OPM_ENCRYPTED_PARAMETERS

DxgkDdiAddDevice

DxgkDdiOPMGetRandomNumber

DxgkDdiOPMGetInformation

DxgkDdiOPMConfigureProtectedOutput