DXGKDDI_OPM_SET_SIGNING_KEY_AND_SEQUENCE_NUMBERS fonction de rappel (dispmprt.h)

La fonction DxgkDdiOPMSetSigningKeyAndSequenceNumbers définit la clé de signature de l’objet de sortie protégé donné et deux numéros de séquence.

Syntaxe

DXGKDDI_OPM_SET_SIGNING_KEY_AND_SEQUENCE_NUMBERS DxgkddiOpmSetSigningKeyAndSequenceNumbers;

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

Paramètres

[in] MiniportDeviceContext

Handle d’un bloc de contexte associé à une carte d’affichage. Auparavant, la fonction DxgkDdiAddDevice du pilote miniport d’affichage fournissait cette poignée au sous-système du noyau graphique DirectX.

[in] ProtectedOutputHandle

Handle d’un objet de sortie protégé. La fonction DxgkDdiOPMCreateProtectedOutput crée l’objet de sortie protégé et retourne le handle à l’objet.

[in] EncryptedParameters

Pointeur vers une structure DXGKMDT_OPM_ENCRYPTED_PARAMETERS qui contient un tableau de 256 octets. Le tableau contient entre 40 et 256 octets de données chiffrées avec la clé publique à partir du certificat approprié. Pour plus d’informations sur la clé publique, téléchargez le document Protection du contenu de sortie à partir de Prise en charge de Output Protection Manager. Si la sortie protégée a la sémantique OPM, les données sont chiffrées avec la clé publique du certificat OPM du pilote miniport d’affichage. Si la sortie protégée a la sémantique COPP (Certified Output Protection Protocol), les données sont chiffrées avec la clé publique à partir du certificat COPP du pilote d’affichage miniport.

L’algorithme que le pilote de miniport d’affichage doit utiliser pour déchiffrer les données dans le tableau dépend de la sémantique de la sortie protégée. Les sorties protégées avec la sémantique OPM utilisent le schéma de chiffrement RSAES-OAEP pour déchiffrer les données. Pour plus d’informations sur RSAES-OAEP, consultez le site web rsa Laboratories . Les sorties protégées avec la sémantique COPP utilisent l’algorithme de chiffrement RSA standard pour déchiffrer les données chiffrées.

Une fois que le pilote miniport d’affichage a déchiffré les données, seuls les 40 premiers octets des données sont actuellement utiles. Les 16 premiers octets des données déchiffrées contiennent le nombre aléatoire que la fonction DxgkDdiDdiOPMGetRandomNumber du pilote miniport a retourné lorsque le handle du paramètre ProtectedOutputHandle lui a été passé. Les 16 octets suivants contiennent la clé de signature AES 128 bits. Les 4 octets suivants contiennent le numéro de séquence utilisé par DxgkDdiOPMGetInformation ou DxgkDdiOPMGetCOPPCompatibleInformation. Les 4 derniers octets contiennent le numéro de séquence utilisé par DxgkDdiOPMConfigureProtectedOutput. Le reste des données déchiffrées doit être ignoré si elles existent.

Valeur retournée

DxgkDdiOPMSetSigningKeyAndSequenceNumbers retourne STATUS_SUCCESS si la fonction a correctement défini la clé de signature et deux numéros de séquence. Sinon, il peut retourner STATUS_OPM_INVALID_ENCRYPTED_PARAMETERS pour l’une des raisons suivantes :

  • Si la sortie protégée a une sémantique OPM, les données que le pilote miniport d’affichage a déchiffrées n’ont pas été encodées avec l’algorithme d’encodage RSAES-OAEP. Pour plus d’informations sur RSAES-OAEP, consultez la section 7.1.2 du PKCS #1 v2.1 : RSA Cryptography Standard, sur le site web rsa Laboratories .
  • Les données n’ont pas été chiffrées par l’appelant avec la clé publique appropriée. Si la sortie a une sémantique OPM, l’appelant doit chiffrer les données avec la clé publique du certificat OPM du pilote miniport d’affichage. Si la sortie a une sémantique COPP, l’appelant doit chiffrer les données avec la clé publique du certificat COPP du pilote miniport d’affichage.
  • L’appelant n’a pas chiffré au moins 40 octets de données.
  • Le nombre aléatoire de 16 octets dans les données que le pilote de miniport d’affichage a déchiffrées ne correspondait pas au nombre aléatoire de 16 octets retourné par la fonction DxgkDdiOPMGetRandomNumber .

Cette fonction peut également retourner d’autres codes d’erreur définis dans Ntstatus.h.

Remarques

La clé de signature permet de vérifier que les données transmises aux fonctions DxgkDdiOPMConfigureProtectedOutput et DxgkDdiOPMGetInformation proviennent de l’application qui utilise indirectement la sortie protégée. La clé de signature est également utilisée pour signer les données retournées par les fonctions DxgkDdiOPMGetInformation et DxgkDdiOPMGetCOPPCompatibleInformation . L’un des numéros de séquence est utilisé par DxgkDdiOPMConfigureProtectedOutput. L’autre numéro de séquence est utilisé par DxgkDdiOPMGetInformation ou DxgkDdiOPMGetCOPPCompatibleInformation.

DxgkDdiOPMSetSigningKeyAndSequenceNumbers doit retourner un code d’échec si une erreur se produit ou si les données de la structure DXGKMDT_OPM_ENCRYPTED_PARAMETERS pointée par le paramètre EncryptedParameters ne sont pas au format requis. Sinon, DxgkDdiOPMSetSigningKeyAndSequenceNumbers doit effectuer la séquence d’opérations suivante :

  1. Déchiffrez les données pointées par EncryptedParameters avec la clé privée et le schéma de chiffrement appropriés. Si la sortie a une sémantique OPM, le pilote miniport d’affichage doit utiliser sa clé privée OPM pour déchiffrer les données. Si la sortie a une sémantique COPP, le pilote miniport d’affichage doit utiliser sa clé privée COPP pour déchiffrer les données.
  2. Si la sortie a une sémantique OPM, vérifiez que les données qui ont été déchiffrées ont été encodées avec l’algorithme d’encodage RSAES-OAEP.
  3. Vérifiez qu’au moins 40 octets des données ont été déchiffrés.
  4. Vérifiez que le nombre aléatoire contenu dans les 16 premiers octets des données qui ont été déchiffrées correspond au nombre aléatoire que le DxgkDdiOPMGetRandomNumber du pilote d’affichage du miniport a retourné lorsque le handle dans le paramètre ProtectedOutputHandle lui a été passé.
  5. Mettre en cache la clé de signature AES 128 bits et les deux numéros de séquence 32 bits.

Avant que le handle d’un objet de sortie protégé ne soit passé à DxgkDdiOPMSetSigningKeyAndSequenceNumbers, il est passé à DxgkDdiOPMGetRandomNumber. Chaque handle d’objet de sortie protégé n’est passé qu’une seule fois à DxgkDdiOPMSetSigningKeyAndSequenceNumbers .

DxgkDdiOPMSetSigningKeyAndSequenceNumbers doit être rendu paginable.

Paramètres RSAES-OAEP et MGF1

RSAES-OAEP est un schéma de chiffrement paramétré et MGF1 est une fonction de génération de masque paramétrable. Voici les paramètres utilisés par OPM lorsqu’il utilise RSAES-OAEP et MGF1. Pour plus d’informations sur les termes suivants et la Norme de chiffrement RSA, consultez les sites web RSA Laboratories and Secure Hashing .

Configuration requise

Condition requise Valeur
Plateforme cible Desktop (Expérience utilisateur)
En-tête dispmprt.h (inclure Dispmprt.h)
IRQL PASSIVE_LEVEL (voir la section Remarques)

Voir aussi

DxgkDdiOPMGetCOPPCompatibleInformation

DxgkDdiOPMCreateProtectedOutput

DXGKMDT_OPM_ENCRYPTED_PARAMETERS

DxgkDdiAddDevice

DxgkDdiOPMGetRandomNumber

DxgkDdiOPMGetInformation

DxgkDdiOPMConfigureProtectedOutput