DXGKDDI_OPM_SET_SIGNING_KEY_AND_SEQUENCE_NUMBERS função de retorno de chamada (dispmprt.h)

A função DxgkDdiOPMSetSigningKeyAndSequenceNumbers define a chave de assinatura do objeto de saída protegido fornecido e dois números de sequência.

Sintaxe

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

Um identificador para um bloco de contexto associado a um adaptador de exibição. Anteriormente, a função DxgkDdiAddDevice do driver de miniporta de exibição forneceu esse identificador para o subsistema de kernel de elementos gráficos DirectX.

[in] ProtectedOutputHandle

O identificador para um objeto de saída protegido. A função DxgkDdiOPMCreateProtectedOutput cria o objeto de saída protegido e retorna o identificador para o objeto .

[in] EncryptedParameters

Um ponteiro para uma estrutura DXGKMDT_OPM_ENCRYPTED_PARAMETERS que contém uma matriz de 256 bytes. A matriz contém entre 40 e 256 bytes de dados criptografados com a chave pública do certificado apropriado. Para obter mais informações sobre a chave pública, baixe o documento Proteção de Conteúdo de Saída do Gerenciador de Proteção de Saída de Suporte. Se a saída protegida tiver semântica do OPM, os dados serão criptografados com a chave pública do certificado OPM do driver de miniporta de exibição. Se a saída protegida tiver semântica COPP (Certified Output Protection Protocol), os dados serão criptografados com a chave pública do certificado COPP do driver de miniporta de exibição.

O algoritmo que o driver de miniporto de exibição deve usar para descriptografar os dados na matriz depende da semântica da saída protegida. As saídas protegidas com semântica do OPM usam o esquema de criptografia RSAES-OAEP para descriptografar os dados. Para obter mais informações sobre o RSAES-OAEP, consulte o site do RSA Laboratories . Saídas protegidas com semântica COPP usam o algoritmo de criptografia RSA padrão para descriptografar os dados criptografados.

Depois que o driver de miniporta de exibição descriptografa os dados, somente os primeiros 40 bytes dos dados são úteis no momento. Os primeiros 16 bytes dos dados descriptografados contêm o número aleatório que a função DxgkDdiOPMGetRandomNumber do driver de miniporta de exibição retornou quando o identificador no parâmetro ProtectedOutputHandle foi passado para ele. Os próximos 16 bytes contêm a chave de assinatura AES de 128 bits. Os próximos 4 bytes contêm o número de sequência usado por DxgkDdiOPMGetInformation ou DxgkDdiOPMGetCOPPCompatibleInformation. Os 4 bytes finais contêm o número de sequência usado por DxgkDdiOPMConfigureProtectedOutput. O restante dos dados descriptografados deve ser ignorado se existirem.

Retornar valor

DxgkDdiOPMSetSigningKeyAndSequenceNumbers retornará STATUS_SUCCESS se a função definir com êxito a chave de assinatura e dois números de sequência. Caso contrário, ele poderá retornar STATUS_OPM_INVALID_ENCRYPTED_PARAMETERS por um dos seguintes motivos:

  • Se a saída protegida tiver semântica OPM, os dados que o driver de miniporto de exibição descriptografou não foram codificados com o algoritmo de codificação RSAES-OAEP. Para obter mais informações sobre RSAES-OAEP, consulte a seção 7.1.2 no PKCS #1 v2.1: RSA Cryptography Standard, no site do RSA Laboratories .
  • Os dados não foram criptografados pelo chamador com a chave pública apropriada. Se a saída tiver semântica do OPM, o chamador deverá criptografar os dados com a chave pública do certificado OPM do driver de miniporta de exibição. Se a saída tiver semântica COPP, o chamador deverá criptografar os dados com a chave pública do certificado COPP do driver de miniporta de exibição.
  • O chamador não criptografou pelo menos 40 bytes de dados.
  • O número aleatório de 16 bytes nos dados que o driver de miniporto de exibição descriptografou não correspondeu ao número aleatório de 16 bytes retornado pela função DxgkDdiOPMGetRandomNumber .

Essa função também pode retornar outros códigos de erro definidos em Ntstatus.h.

Comentários

A chave de assinatura é usada para verificar se os dados passados para as funções DxgkDdiOPMConfigureProtectedOutput e DxgkDdiOPMGetInformation vêm do aplicativo que usa indiretamente a saída protegida. A chave de assinatura também é usada para assinar os dados retornados pelas funções DxgkDdiOPMGetInformation e DxgkDdiOPMGetCOPPCompatibleInformation . Um dos números de sequência é usado por DxgkDdiOPMConfigureProtectedOutput. O outro número de sequência é usado por DxgkDdiOPMGetInformation ou DxgkDdiOPMGetCOPPCompatibleInformation.

DxgkDdiOPMSetSigningKeyAndSequenceNumbers deve retornar um código de falha se ocorrer um erro ou se os dados na estrutura DXGKMDT_OPM_ENCRYPTED_PARAMETERS que é apontado pelo parâmetro EncryptedParameters não estiverem no formato necessário. Caso contrário, DxgkDdiOPMSetSigningKeyAndSequenceNumbers deve executar a seguinte sequência de operações:

  1. Descriptografe os dados apontados por EncryptedParameters com a chave privada e o esquema de criptografia apropriados. Se a saída tiver semântica OPM, o driver de miniporta de exibição deverá usar sua chave privada OPM para descriptografar os dados. Se a saída tiver semântica COPP, o driver de miniporta de exibição deverá usar sua chave privada COPP para descriptografar os dados.
  2. Se a saída tiver semântica OPM, verifique se os dados que foram descriptografados foram codificados com o algoritmo de codificação RSAES-OAEP.
  3. Verifique se pelo menos 40 bytes dos dados foram descriptografados.
  4. Verifique se o número aleatório contido nos primeiros 16 bytes dos dados que foram descriptografados corresponde ao número aleatório que o DxgkDdiOPMGetRandomNumber do driver de miniporta de exibição retornou quando o identificador no parâmetro ProtectedOutputHandle foi passado para ele.
  5. Armazene em cache a chave de assinatura AES de 128 bits e os dois números de sequência de 32 bits.

Antes que o identificador de um objeto de saída protegido seja passado para DxgkDdiOPMSetSigningKeyAndSequenceNumbers, ele é passado para DxgkDdiOPMGetRandomNumber. Cada identificador de objeto de saída protegido só é passado para DxgkDdiOPMSetSigningKeyAndSequenceNumbers uma vez.

DxgkDdiOPMSetSigningKeyAndSequenceNumbers deve ser tornado paginável.

Parâmetros RSAES-OAEP e MGF1

RSAES-OAEP é um esquema de criptografia parametrizado e MGF1 é uma função de geração de máscara parametrizada. A seguir estão os parâmetros que o OPM usa quando usa RSAES-OAEP e MGF1. Para obter mais informações sobre os termos a seguir e o RSA Cryptography Standard, consulte os sites laboratórios RSA e hash seguro.

Requisitos

Requisito Valor
Plataforma de Destino Área de Trabalho
Cabeçalho dispmprt.h (inclua Dispmprt.h)
IRQL PASSIVE_LEVEL (consulte a seção Comentários)

Confira também

DxgkDdiOPMGetCOPPCompatibleInformation

DxgkDdiOPMCreateProtectedOutput

DXGKMDT_OPM_ENCRYPTED_PARAMETERS

DxgkDdiAddDevice

DxgkDdiOPMGetRandomNumber

DxgkDdiOPMGetInformation

DxgkDdiOPMConfigureProtectedOutput