DXGKDDI_OPM_SET_SIGNING_KEY_AND_SEQUENCE_NUMBERS Rückruffunktion (dispmprt.h)

Die DxgkDdiOPMSetSigningKeyAndSequenceNumbers-Funktion legt den Signaturschlüssel des angegebenen geschützten Ausgabeobjekts und zwei Sequenznummern fest.

Syntax

DXGKDDI_OPM_SET_SIGNING_KEY_AND_SEQUENCE_NUMBERS DxgkddiOpmSetSigningKeyAndSequenceNumbers;

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

Parameter

[in] MiniportDeviceContext

Ein Handle für einen Kontextblock, der einem Grafikkarte zugeordnet ist. Zuvor hat die DxgkDdiAddDevice-Funktion des Anzeigeminiporttreibers dieses Handle für das DirectX-Grafikkernsubsystem bereitgestellt.

[in] ProtectedOutputHandle

Das Handle für ein geschütztes Ausgabeobjekt. Die DxgkDdiOPMCreateProtectedOutput-Funktion erstellt das geschützte Ausgabeobjekt und gibt das Handle an das Objekt zurück.

[in] EncryptedParameters

Ein Zeiger auf eine DXGKMDT_OPM_ENCRYPTED_PARAMETERS-Struktur , die ein 256-Byte-Array enthält. Das Array enthält zwischen 40 und 256 Bytes Daten, die mit dem öffentlichen Schlüssel aus dem entsprechenden Zertifikat verschlüsselt werden. Weitere Informationen zum öffentlichen Schlüssel erhalten Sie unter Unterstützung des Ausgabeschutz-Managers im Dokument Ausgabeinhaltsschutz. Wenn die geschützte Ausgabe über OPM-Semantik verfügt, werden die Daten mit dem öffentlichen Schlüssel aus dem OPM-Zertifikat des Anzeigeminiporttreibers verschlüsselt. Wenn die geschützte Ausgabe über COPP-Semantik (Certified Output Protection Protocol) verfügt, werden die Daten mit dem öffentlichen Schlüssel aus dem COPP-Zertifikat des Anzeigeminiporttreibers verschlüsselt.

Der Algorithmus, den der Anzeigeminiporttreiber zum Entschlüsseln der Daten im Array verwenden soll, hängt von der Semantik der geschützten Ausgabe ab. Geschützte Ausgaben mit OPM-Semantik verwenden das Verschlüsselungsschema RSAES-OAEP, um die Daten zu entschlüsseln. Weitere Informationen zu RSAES-OAEP finden Sie auf der RSA Laboratories-Website . Geschützte Ausgaben mit COPP-Semantik verwenden den Standardmäßigen RSA-Verschlüsselungsalgorithmus, um die verschlüsselten Daten zu entschlüsseln.

Nachdem der Anzeigeminiporttreiber die Daten entschlüsselt hat, sind derzeit nur die ersten 40 Bytes der Daten nützlich. Die ersten 16 Bytes der entschlüsselten Daten enthalten die Zufallszahl, die die DxgkDdiOPMGetRandomNumber-Funktion des Anzeigeminiporttreibers zurückgegeben hat, als das Handle im Parameter ProtectedOutputHandle an ihn übergeben wurde. Die nächsten 16 Bytes enthalten den 128-Bit-AES-Signaturschlüssel. Die nächsten 4 Bytes enthalten die Sequenznummer, die von DxgkDdiOPMGetInformation oder DxgkDdiOPMGetCOPPCompatibleInformation verwendet wird. Die letzten 4 Bytes enthalten die Sequenznummer, die von DxgkDdiOPMConfigureProtectedOutput verwendet wird. Die restlichen entschlüsselten Daten sollten ignoriert werden, wenn sie vorhanden sind.

Rückgabewert

DxgkDdiOPMSetSigningKeyAndSequenceNumbers gibt STATUS_SUCCESS zurück, wenn die Funktion erfolgreich den Signaturschlüssel und zwei Sequenznummern festgelegt hat. Andernfalls kann STATUS_OPM_INVALID_ENCRYPTED_PARAMETERS aus einem der folgenden Gründe zurückgegeben werden:

  • Wenn die geschützte Ausgabe über OPM-Semantik verfügt, wurden die Daten, die der Display-Miniporttreiber entschlüsselt hat, nicht mit dem RSAES-OAEP-Codierungsalgorithmus codiert. Weitere Informationen zu RSAES-OAEP finden Sie in Abschnitt 7.1.2 in PKCS #1 v2.1: RSA Cryptography Standard auf der Rsa Laboratories-Website .
  • Die Daten wurden vom Aufrufer nicht mit dem entsprechenden öffentlichen Schlüssel verschlüsselt. Wenn die Ausgabe über OPM-Semantik verfügt, sollte der Aufrufer die Daten mit dem öffentlichen Schlüssel aus dem OPM-Zertifikat des Anzeigeminiporttreibers verschlüsseln. Wenn die Ausgabe über COPP-Semantik verfügt, sollte der Aufrufer die Daten mit dem öffentlichen Schlüssel aus dem COPP-Zertifikat des Anzeigeminiporttreibers verschlüsseln.
  • Der Aufrufer hat nicht mindestens 40 Bytes Daten verschlüsselt.
  • Die 16-Byte-Zufallszahl in den Daten, die der Anzeigeminiporttreiber entschlüsselt hat, entsprach nicht der 16-Byte-Zufallszahl, die die DxgkDdiOPMGetRandomNumber-Funktion zurückgegeben hat.

Diese Funktion kann auch andere Fehlercodes zurückgeben, die in Ntstatus.h definiert sind.

Hinweise

Mit dem Signaturschlüssel wird überprüft, ob Daten, die an die Funktionen DxgkDdiOPMConfigureProtectedOutput und DxgkDdiOPMGetInformation übergeben werden, von der Anwendung stammen, die indirekt die geschützte Ausgabe verwendet. Der Signaturschlüssel wird auch verwendet, um die Daten zu signieren, die von den Funktionen DxgkDdiOPMGetInformation und DxgkDdiOPMGetCOPPCompatibleInformation zurückgegeben werden. Eine der Sequenznummern wird von DxgkDdiOPMConfigureProtectedOutput verwendet. Die andere Sequenznummer wird von DxgkDdiOPMGetInformation oder DxgkDdiOPMGetCOPPCompatibleInformation verwendet.

DxgkDdiOPMSetSigningKeyAndSequenceNumbers sollte einen Fehlercode zurückgeben, wenn ein Fehler auftritt oder wenn die Daten in der DXGKMDT_OPM_ENCRYPTED_PARAMETERS-Struktur , auf die vom EncryptedParameters-Parameter verwiesen wird, nicht im erforderlichen Format vorliegen. Andernfalls sollte DxgkDdiOPMSetSigningKeyAndSequenceNumbers die folgende Vorgangssequenz ausführen:

  1. Entschlüsseln Sie die Daten, auf die von EncryptedParameters mit dem entsprechenden privaten Schlüssel und verschlüsselungsschema verwiesen wird. Wenn die Ausgabe über OPM-Semantik verfügt, sollte der Anzeigeminiporttreiber seinen privaten OPM-Schlüssel verwenden, um die Daten zu entschlüsseln. Wenn die Ausgabe über COPP-Semantik verfügt, sollte der Anzeigeminiporttreiber seinen privaten COPP-Schlüssel verwenden, um die Daten zu entschlüsseln.
  2. Wenn die Ausgabe über OPM-Semantik verfügt, überprüfen Sie, ob die entschlüsselten Daten mit dem RSAES-OAEP-Codierungsalgorithmus codiert wurden.
  3. Stellen Sie sicher, dass mindestens 40 Bytes der Daten entschlüsselt wurden.
  4. Stellen Sie sicher, dass die Zufallszahl, die in den ersten 16 Bytes der entschlüsselten Daten enthalten ist, mit der Zufallszahl übereinstimmt, die die DxgkDdiOPMGetRandomNumber des Anzeige-Miniporttreibers zurückgegeben hat, als das Handle im Parameter ProtectedOutputHandle an ihn übergeben wurde.
  5. Zwischenspeichern Sie den 128-Bit-AES-Signaturschlüssel und die beiden 32-Bit-Sequenznummern.

Bevor das Handle eines geschützten Ausgabeobjekts an DxgkDdiOPMSetSigningKeyAndSequenceNumbers übergeben wird, wird es an DxgkDdiOPMGetRandomNumber übergeben. Jedes geschützte Ausgabeobjekthandle wird nur einmal an DxgkDdiOPMSetSigningKeyAndSequenceNumbers übergeben.

DxgkDdiOPMSetSigningKeyAndSequenceNumbers sollte ausgelagert werden.

RSAES-OAEP- und MGF1-Parameter

RSAES-OAEP ist ein parametrisiertes Verschlüsselungsschema, und MGF1 ist eine parametrisierte Maskengenerierungsfunktion. Im Folgenden sind die Parameter aufgeführt, die OPM verwendet, wenn RSAES-OAEP und MGF1 verwendet werden. Weitere Informationen zu den folgenden Begriffen und dem RSA Cryptography Standard finden Sie auf den Websites RSA Laboratories und Secure Hashing .

Anforderungen

Anforderung Wert
Zielplattform Desktop
Kopfzeile dispmprt.h (include Dispmprt.h)
IRQL PASSIVE_LEVEL (siehe Abschnitt Hinweise)

Weitere Informationen

DxgkDdiOPMGetCOPPCompatibleInformation

DxgkDdiOPMCreateProtectedOutput

DXGKMDT_OPM_ENCRYPTED_PARAMETERS

DxgkDdiAddDevice

DxgkDdiOPMGetRandomNumber

DxgkDdiOPMGetInformation

DxgkDdiOPMConfigureProtectedOutput