DXGKDDI_OPM_SET_SIGNING_KEY_AND_SEQUENCE_NUMBERS funzione di callback (dispmprt.h)

La funzione DxgkDdiOPMSetSigningKeyAndSequenceNumbers imposta la chiave di firma dell'oggetto di output protetto specificato e due numeri di sequenza.

Sintassi

DXGKDDI_OPM_SET_SIGNING_KEY_AND_SEQUENCE_NUMBERS DxgkddiOpmSetSigningKeyAndSequenceNumbers;

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

Parametri

[in] MiniportDeviceContext

Handle a un blocco di contesto associato a una scheda di visualizzazione. In precedenza, la funzione DxgkDdiAddDevice del driver del miniport visualizzato ha fornito questo handle al sottosistema del kernel grafico DirectX.

[in] ProtectedOutputHandle

Handle in un oggetto di output protetto. La funzione DxgkDdiOPMCreateProtectedOutput crea l'oggetto output protetto e restituisce l'handle all'oggetto .

[in] EncryptedParameters

Puntatore a una struttura DXGKMDT_OPM_ENCRYPTED_PARAMETERS contenente una matrice a 256 byte. La matrice contiene tra 40 e 256 byte di dati crittografati con la chiave pubblica dal certificato appropriato. Per altre informazioni sulla chiave pubblica, scaricare il documento Di protezione del contenuto di output da Support Output Protection Manager. Se l'output protetto ha semantica OPM, i dati vengono crittografati con la chiave pubblica dal certificato OPM del driver miniport visualizzato. Se l'output protetto ha semantica COPP (Certified Output Protection Protocol), i dati vengono crittografati con la chiave pubblica dal certificato COPP del driver miniport visualizzato.

L'algoritmo che il driver miniport visualizzato deve usare per decrittografare i dati nella matrice dipende dalla semantica dell'output protetto. Gli output protetti con semantica OPM usano lo schema di crittografia RSAES-OAEP per decrittografare i dati. Per altre informazioni su RSAES-OAEP , vedere il sito Web RSA Labss. Gli output protetti con semantica COPP usano l'algoritmo di crittografia RSA standard per decrittografare i dati crittografati.

Dopo che il driver miniport visualizzato decrittografa i dati, sono attualmente utili solo i primi 40 byte dei dati. I primi 16 byte dei dati decrittografati contengono il numero casuale restituito dalla funzione DxgkDdiOPMGetRandomNumber visualizzato quando l'handle nel parametro ProtectedOutputHandle è stato passato. I 16 byte successivi contengono la chiave di firma AES a 128 bit. I 4 byte successivi contengono il numero di sequenza usato da DxgkDdiOPMGetInformation o DxgkDdiOPMGetCOPPCompatibleInformation. I 4 byte finali contengono il numero di sequenza usato da DxgkDdiOPMConfigureProtectedOutput. Il resto dei dati decrittografati deve essere ignorato se esiste.

Valore restituito

DxgkDdiOPMSetSigningKeyAndSequenceNumbers restituisceSTATUS_SUCCESS se la funzione imposta correttamente la chiave di firma e due numeri di sequenza. In caso contrario, potrebbe restituire STATUS_OPM_INVALID_ENCRYPTED_PARAMETERS per uno dei motivi seguenti:

  • Se l'output protetto ha semantica OPM, i dati decrittografati dal driver miniport visualizzato non sono stati codificati con l'algoritmo di codifica RSAES-OAEP. Per altre informazioni su RSAES-OAEP, vedere la sezione 7.1.2 nel sito Web PKCS #1 v2.1: RSA Cryptography Standard, nel sito Web RSA Labss .
  • I dati non sono stati crittografati dal chiamante con la chiave pubblica appropriata. Se l'output ha semantica OPM, il chiamante deve crittografare i dati con la chiave pubblica dal certificato OPM del driver miniport visualizzato. Se l'output ha semantica COPP, il chiamante deve crittografare i dati con la chiave pubblica dal certificato COPP del driver miniport visualizzato.
  • Il chiamante non ha crittografato almeno 40 byte di dati.
  • Il numero casuale di 16 byte nei dati decrittografati dal driver miniport visualizzato non corrisponde al numero casuale di 16 byte restituito dalla funzione DxgkDdiOPMGetRandomNumber .

Questa funzione potrebbe anche restituire altri codici di errore definiti in Ntstatus.h.

Commenti

La chiave di firma viene usata per verificare che i dati passati alle funzioni DxgkDdiOPMConfigureProtectedOutput e DxgkDdiOPMGetInformation provengono dall'applicazione che usa indirettamente l'output protetto. La chiave di firma viene usata anche per firmare i dati restituiti dalle funzioni DxgkDdiOPMGetInformation e DxgkDdiOPMGetCOPPCompatibleInformation. Uno dei numeri di sequenza viene usato da DxgkDdiOPMConfigureProtectedOutput. L'altro numero di sequenza viene usato da DxgkDdiOPMGetInformation o DxgkDdiOPMGetCOPPCompatibleInformation.

DxgkDdiOPMSetSigningKeyAndSequenceNumbers deve restituire un codice di errore se si verifica un errore o se i dati nella struttura DXGKMDT_OPM_ENCRYPTED_PARAMETERS puntano al parametro EncryptedParameters non sono nel formato richiesto. In caso contrario, DxgkDdiOPMSetSigningKeyAndSequenceNumbers deve eseguire la sequenza di operazioni seguente:

  1. Decrittografare i dati a cui punta EncryptedParameters con la chiave privata e lo schema di crittografia appropriati. Se l'output ha semantica OPM, il driver miniport visualizzato deve usare la chiave privata OPM per decrittografare i dati. Se l'output ha semantica COPP, il driver miniport visualizzato deve usare la chiave privata COPP per decrittografare i dati.
  2. Se l'output ha semantica OPM, verificare che i dati decrittografati siano stati codificati con l'algoritmo di codifica RSAES-OAEP.
  3. Verificare che almeno 40 byte dei dati siano stati decrittografati.
  4. Verificare che il numero casuale contenuto nei primi 16 byte dei dati decrittografati corrisponda al numero casuale restituito dal driver DxgkDdiOPMGetRandomNumber quando l'handle nel parametro ProtectedOutputHandle è stato passato.
  5. Memorizzare nella cache la chiave di firma AES a 128 bit e i due numeri di sequenza a 32 bit.

Prima che un handle dell'oggetto di output protetto venga passato a DxgkDdiOPMSetSigningKeyAndSequenceNumbers, viene passato a DxgkDdiOPMGetRandomNumber. Ogni handle dell'oggetto di output protetto viene passato solo a DxgkDdiOPMSetSigningKeyAndSequenceNumbers una sola volta.

DxgkDdiOPMSetSigningKeyAndSequenceNumbers deve essere reso paginabile.

Parametri RSAES-OAEP e MGF1

RSAES-OAEP è uno schema di crittografia con parametri e MGF1 è una funzione di generazione maschera con parametri. Di seguito sono riportati i parametri usati da OPM quando usa RSAES-OAEP e MGF1. Per altre informazioni sui termini seguenti e lo standard di crittografia RSA, vedere i siti Web RSA Labss e Secure Hashing .

Requisiti

Requisito Valore
Piattaforma di destinazione Desktop
Intestazione dispmprt.h (include Dispmprt.h)
IRQL PASSIVE_LEVEL (vedere la sezione Osservazioni)

Vedi anche

DxgkDdiOPMGetCOPPCompatibleInformation

DxgkDdiOPMCreateProtectedOutput

DXGKMDT_OPM_ENCRYPTED_PARAMETERS

DxgkDdiAddDevice

DxgkDdiOPMGetRandomNumber

DxgkDdiOPMGetInformation

DxgkDdiOPMConfigureProtectedOutput