DXGKDDI_OPM_SET_SIGNING_KEY_AND_SEQUENCE_NUMBERS回呼函式 (dispmprt.h)
DxgkDdiOPMSetSigningKeyAndSequenceNumbers 函式會設定指定的受保護輸出物件的簽署密鑰和兩個序號。
語法
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下載輸出內容保護檔。 如果受保護的輸出具有 OPM 語意,則會使用顯示迷你埠驅動程式 OPM 憑證的公鑰來加密數據。 如果受保護的輸出具有認證輸出保護通訊協定 (COPP) 語意,則會使用來自顯示迷你埠驅動程式 COPP 憑證的公鑰來加密數據。
顯示迷你埠驅動程序應該用來解密數位中數據的演算法,取決於受保護輸出的語意。 使用 OPM 語意保護的輸出會使用 RSAES-OAEP 加密配置來解密數據。 如需 RSAES-OAEP 的詳細資訊,請參閱 RSA 實驗室 網站。 使用 COPP 語意保護的輸出會使用標準 RSA 加密演算法來解密加密的數據。
顯示迷你埠驅動程式解密數據之後,目前只有前 40 個字節的數據很有用。 解密數據的前 16 個字節包含隨機數位,顯示迷你埠驅動程式的 DxgkDdiOPMGetRandomNumber 函式在傳遞至 protectedOutputHandle 參數 句柄時傳回。 接下來的 16 個字組包含 128 位 AES 簽署金鑰。 接下來 4 個字節包含 DxgkDdiOPMGetInformation 或 DxgkDdiOPMGetCOPPCompatibleInformation所使用的序號。 最後 4 個字節包含 DxgkDdiOPMConfigureProtectedOutput所使用的序號。 如果數據存在,則應該忽略解密數據的其餘部分。
傳回值
如果函式成功設定簽署密鑰和兩個序號,DxgkDdiOPMSetSigningKeyAndSequenceNumbers 會傳回 STATUS_SUCCESS。 否則,可能會因為下列其中一個原因而傳回 STATUS_OPM_INVALID_ENCRYPTED_PARAMETERS:
- 如果受保護的輸出具有 OPM 語意,則顯示迷你埠驅動程式解密的數據未使用 RSAES-OAEP 編碼演演算法進行編碼。 如需 RSAES-OAEP 的詳細資訊,請參閱 PKCS #1 v2.1 中的 7.1.2 節:RSA 密碼編譯標準,請參閱 RSA 實驗室 網站。
- 呼叫端未使用適當的公鑰來加密數據。 如果輸出具有 OPM 語意,呼叫端應該使用顯示迷你埠驅動程式 OPM 憑證中的公鑰來加密數據。 如果輸出具有 COPP 語意,呼叫端應該使用顯示迷你埠驅動程式 COPP 憑證中的公鑰來加密數據。
- 呼叫端未加密至少 40 個字節的數據。
- 顯示迷你埠驅動程式解密之數據中的 16 位元組隨機數不符合傳回 DxgkDdiOPMGetRandomNumber 函式的 16 位元組隨機數。
此函式也可能傳回 Ntstatus.h中定義的其他錯誤碼。
言論
簽署密鑰是用來驗證傳遞至 DxgkDdiOPMConfigureProtectedOutput 和 DxgkDdiOPMGetInformation 函式來自間接使用受保護輸出的應用程式。 簽署密鑰也可用來簽署 DxgkDdiOPMGetInformation 和 DxgkDdiOPMGetCOPPCompatibleInformation 函式所傳回的數據。 DxgkDdiOPMConfigureProtectedOutput會使用其中一個序號。 DxgkDdiOPMGetInformation 或 DxgkDdiOPMGetCOPPCompatibleInformation會使用其他序號。
DxgkDdiOPMSetSigningKeyAndSequenceNumbers 如果發生錯誤,或 EncryptedParameters 參數所指向之 DXGKMDT_OPM_ENCRYPTED_PARAMETERS 結構中的數據,則應該傳回失敗碼。 否則,DxgkDdiOPMSetSigningKeyAndSequenceNumbers 應該執行下列作業順序:
- 使用適當的私鑰和加密配置,將 EncryptedParameters 所指向的數據解密。 如果輸出具有 OPM 語意,顯示迷你埠驅動程序應該使用其 OPM 私鑰來解密數據。 如果輸出具有 COPP 語意,顯示迷你埠驅動程式應該使用其 COPP 私鑰來解密數據。
- 如果輸出具有 OPM 語意,請確認解密的數據是以 RSAES-OAEP 編碼演演算法編碼。
- 確認至少解密了 40 個字節的數據。
- 確認解密的前 16 個字節數據中包含的隨機數符合顯示迷你埠驅動程式 DxgkDdiOPMGetRandomNumber 當 ProtectedOutputHandle 參數中的句柄傳回的隨機數。
- 快取 128 位 AES 簽署金鑰和兩個 32 位序號。
在受保護的輸出物件的句柄傳遞至 DxgkDdiOPMSetSigningKeyAndSequenceNumbers之前,它會傳遞至 DxgkDdiOPMGetRandomNumber。 每個受保護的輸出物件句柄只會傳遞至 DxgkDdiOPMSetSigningKeyAndSequenceNumbers 一次。
DxgkDdiOPMSetSigningKeyAndSequenceNumbers 應設為可分頁。
RSAES-OAEP 和 MGF1 參數
RSAES-OAEP 是參數化加密配置,MGF1 是參數化的遮罩產生函式。 以下是 OPM 使用 RSAES-OAEP 和 MGF1 時所使用的參數。 如需下列詞彙和 RSA 密碼編譯標準的詳細資訊,請參閱 RSA 實驗室 和 安全哈希 網站。
要求
要求 | 價值 |
---|---|
目標平臺 | 桌面 |
標頭 | dispmprt.h (包括 Dispmprt.h) |
IRQL | PASSIVE_LEVEL (請參閱一節) |
另請參閱
DxgkDdiOPMGetCOPPCompatibleInformation
DxgkDdiOPMCreateProtectedOutput