DXGKDDI_OPM_SET_SIGNING_KEY_AND_SEQUENCE_NUMBERS コールバック関数 (dispmprt.h)
DxgkDdiOPMSetSigningKeyAndSequenceNumbers 関数は、指定された保護された出力オブジェクトの署名キーと 2 つのシーケンス番号を設定します。
構文
DXGKDDI_OPM_SET_SIGNING_KEY_AND_SEQUENCE_NUMBERS DxgkddiOpmSetSigningKeyAndSequenceNumbers;
NTSTATUS DxgkddiOpmSetSigningKeyAndSequenceNumbers(
[in] PVOID MiniportDeviceContext,
[in] HANDLE ProtectedOutputHandle,
[in] const DXGKMDT_OPM_ENCRYPTED_PARAMETERS *EncryptedParameters
)
{...}
パラメーター
[in] MiniportDeviceContext
ディスプレイ アダプターに関連付けられているコンテキスト ブロックへのハンドル。 以前は、ディスプレイ ミニポート ドライバーの DxgkDdiAddDevice 関数は、DirectX グラフィックス カーネル サブシステムにこのハンドルを提供しました。
[in] ProtectedOutputHandle
保護された出力オブジェクトへのハンドル。 DxgkDdiOPMCreateProtectedOutput 関数は、保護された出力オブジェクトを作成し、そのハンドルを オブジェクトに返します。
[in] EncryptedParameters
256 バイト配列を含む DXGKMDT_OPM_ENCRYPTED_PARAMETERS 構造体へのポインター。 配列には、適切な証明書の公開キーで暗号化された 40 ~ 256 バイトのデータが含まれています。 公開キーの詳細については、「Output Protection Manager のサポート」から Output Content Protection ドキュメントをダウンロードしてください。 保護された出力に OPM セマンティクスがある場合、データはディスプレイ ミニポート ドライバーの OPM 証明書の公開キーで暗号化されます。 保護された出力に認定された出力保護プロトコル (COPP) セマンティクスがある場合、データはディスプレイ ミニポート ドライバーの COPP 証明書の公開キーで暗号化されます。
ディスプレイ ミニポート ドライバーが配列内のデータの暗号化を解除するために使用するアルゴリズムは、保護された出力のセマンティクスによって異なります。 OPM セマンティクスを使用して保護された出力では、RSAES-OAEP 暗号化スキームを使用してデータの暗号化を解除します。 RSAES-OAEP の詳細については、 RSA 研究所 の Web サイトを参照してください。 COPP セマンティクスを使用して保護された出力では、標準の RSA 暗号化アルゴリズムを使用して暗号化されたデータの暗号化を解除します。
ディスプレイ ミニポート ドライバーがデータの暗号化を解除した後、データの最初の 40 バイトのみが現在役立ちます。 復号化されたデータの最初の 16 バイトには、ProtectedOutputHandle パラメーターのハンドルが渡されたときに表示ミニポート ドライバーの DxgkDdiOPMGetRandomNumber 関数が返す乱数が含まれます。 次の 16 バイトには、128 ビットの AES 署名キーが含まれます。 次の 4 バイトには、 DxgkDdiOPMGetInformation または DxgkDdiOPMGetCOPPCompatibleInformation によって使用されるシーケンス番号が含まれます。 最後の 4 バイトには、 DxgkDdiOPMConfigureProtectedOutput によって使用されるシーケンス番号が含まれます。 復号化されたデータの残りの部分は、存在する場合は無視する必要があります。
戻り値
DxgkDdiOPMSetSigningKeyAndSequenceNumbers は、関数が署名キーと 2 つのシーケンス番号を正常に設定した場合、 STATUS_SUCCESS を返します。 それ以外の場合は、次のいずれかの理由で STATUS_OPM_INVALID_ENCRYPTED_PARAMETERS が返されることがあります。
- 保護された出力に OPM セマンティクスがある場合、ディスプレイ ミニポート ドライバーが復号化したデータは RSAES-OAEP エンコード アルゴリズムでエンコードされませんでした。 RSAES-OAEP の詳細については、RSA 研究所 Web サイトの PKCS #1 v2.1: RSA Cryptography Standard のセクション 7.1.2 を参照してください。
- データは、適切な公開キーを使用して呼び出し元によって暗号化されませんでした。 出力に OPM セマンティクスがある場合、呼び出し元は、ディスプレイ ミニポート ドライバーの OPM 証明書の公開キーを使用してデータを暗号化する必要があります。 出力に COPP セマンティクスがある場合、呼び出し元は、ディスプレイ ミニポート ドライバーの COPP 証明書の公開キーを使用してデータを暗号化する必要があります。
- 呼び出し元は、少なくとも 40 バイトのデータを暗号化しませんでした。
- ディスプレイ ミニポート ドライバーで復号化されたデータ内の 16 バイトの乱数が、 DxgkDdiOPMGetRandomNumber 関数が返した 16 バイトの乱数と一致しませんでした。
この関数は、 Ntstatus.h で定義されている他のエラー コードも返す場合があります。
注釈
署名キーは、 DxgkDdiOPMConfigureProtectedOutput 関数と DxgkDdiOPMGetInformation 関数に渡されるデータが、保護された出力を間接的に使用するアプリケーションから取得されることを確認するために使用されます。 署名キーは、 DxgkDdiOPMGetInformation 関数と DxgkDdiOPMGetCOPPCompatibleInformation 関数によって返されるデータに署名するためにも使用されます。 シーケンス番号の 1 つが DxgkDdiOPMConfigureProtectedOutput によって使用されます。 もう 1 つのシーケンス番号は、 DxgkDdiOPMGetInformation または DxgkDdiOPMGetCOPPCompatibleInformation によって使用されます。
DxgkDdiOPMSetSigningKeyAndSequenceNumbers は、エラーが発生した場合、または EncryptedParameters パラメーターが指すDXGKMDT_OPM_ENCRYPTED_PARAMETERS構造体のデータが必要な形式でない場合に、エラー コードを返す必要があります。 それ以外の場合、 DxgkDdiOPMSetSigningKeyAndSequenceNumbers は次の一連の操作を実行する必要があります。
- EncryptedParameters が指すデータを、適切な秘密キーと暗号化スキームで暗号化解除します。 出力に OPM セマンティクスがある場合、ディスプレイ ミニポート ドライバーは、その OPM 秘密キーを使用してデータを復号化する必要があります。 出力に COPP セマンティクスがある場合、ディスプレイ ミニポート ドライバーは、その COPP 秘密キーを使用してデータの暗号化を解除する必要があります。
- 出力に OPM セマンティクスがある場合は、復号化されたデータが RSAES-OAEP エンコード アルゴリズムでエンコードされていることを確認します。
- 少なくとも 40 バイトのデータが復号化されたことを確認します。
- 復号化されたデータの最初の 16 バイトに含まれる乱数が、ProtectedOutputHandle パラメーターのハンドルが渡されたときに表示ミニポート ドライバーの DxgkDdiOPMGetRandomNumber が返した乱数と一致することを確認します。
- 128 ビット AES 署名キーと 2 つの 32 ビット シーケンス番号をキャッシュします。
保護された出力オブジェクトのハンドルが DxgkDdiOPMSetSigningKeyAndSequenceNumbers に渡される前に、 DxgkDdiOPMGetRandomNumber に渡されます。 保護された各出力オブジェクト ハンドルは、 DxgkDdiOPMSetSigningKeyAndSequenceNumbers にのみ 1 回渡されます。
DxgkDdiOPMSetSigningKeyAndSequenceNumbers を ページング可能にする必要があります。
RSAES-OAEP および MGF1 パラメーター
RSAES-OAEP はパラメーター化された暗号化スキームであり、MGF1 はパラメーター化されたマスク生成関数です。 OPM が RSAES-OAEP と MGF1 を使用する場合に使用するパラメーターを次に示します。 次の用語と RSA Cryptography Standard の詳細については、 RSA ラボラトリー と セキュア ハッシュ の Web サイトを参照してください。
要件
要件 | 値 |
---|---|
対象プラットフォーム | デスクトップ |
Header | dispmprt.h (Dispmprt.h を含む) |
IRQL | PASSIVE_LEVEL (「解説」セクションを参照) |
こちらもご覧ください
DxgkDdiOPMGetCOPPCompatibleInformation
DxgkDdiOPMCreateProtectedOutput