使用 匯出 AWS CloudHSM 金鑰的純文字複本 KMU - AWS CloudHSM

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 匯出 AWS CloudHSM 金鑰的純文字複本 KMU

使用 AWS CloudHSM key_mgmt_util 工具中的 exSymKey命令,從硬體安全模組 (HSM) 匯出對稱金鑰的純文字複本,並將其儲存在磁碟上的檔案中。若要匯出金鑰的加密 (包裝) 副本,請使用 wrapKey。若要匯入純文字索引鍵,例如exSymKey匯出的索引鍵,請使用 imSymKey

在匯出程序期間, exSymKey會使用您指定的AES金鑰 (包裝金鑰 ) 來包裝 (加密),然後解壓縮 (解密) 要匯出的金鑰。不過,匯出操作的結果是磁碟上的純文字 (取消包裝) 金鑰。

只有金鑰的擁有者 (也就是建立金鑰的 CU 使用者) 可以匯出金鑰。共用金鑰的使用者可以在密碼編譯操作中使用它,但不能將它匯出。

exSymKey 操作會將金鑰材料複製到您指定的檔案,但不會從 移除金鑰HSM、變更其金鑰屬性 ,或阻止您在密碼編譯操作中使用金鑰。您可以多次匯出相同的金鑰。

exSymKey 只會匯出對稱金鑰。若要匯出公有金鑰,請使用 exportPubKey。若要匯出私有金鑰,請使用 exportPrivateKey

在執行任何 key_mgmt_util 命令之前,您必須啟動 key_mgmt_util,並以加密使用者 (CU) HSM身分登入

語法

exSymKey -h exSymKey -k <key-to-export> -w <wrapping-key> -out <key-file> [-m 4] [-wk <unwrapping-key-file> ]

範例

這些範例示範如何使用 從 exSymKey 匯出您擁有的對稱金鑰HSMs。

範例 :匯出 3DES 個對稱金鑰

此命令會匯出三 DES(3DES) 對稱金鑰 (金鑰控制碼 7)。它使用 中的現有AES金鑰 (金鑰控制碼 6) HSM作為包裝金鑰。然後,它會將 3DES 個金鑰的純文字寫入 3DES.key 檔案。

輸出顯示金鑰 7(3DES 個金鑰) 已成功包裝和取消包裝,然後寫入 3DES.key 檔案。

警告

雖然輸出寫著已將 "Wrapped Symmetric Key"(包裝的對稱金鑰) 寫入輸出檔,但輸出檔中包含純文字 (取消包裝) 金鑰。

Command: exSymKey -k 7 -w 6 -out 3DES.key Cfm3WrapKey returned: 0x00 : HSM Return: SUCCESS Cfm3UnWrapHostKey returned: 0x00 : HSM Return: SUCCESS Wrapped Symmetric Key written to file "3DES.key"
範例 :匯出僅限工作階段的包裝金鑰

此範例示範如何使用只存在於工作階段中的金鑰做為包裝金鑰。因為要匯出的金鑰會被包裝、再立即取消包裝,然後以純文字傳送,所以不需要保留包裝金鑰。

此一系列命令8會從 匯出具有AES金鑰控制碼的金鑰HSM。它使用專為 目的建立的AES工作階段金鑰。

第一個命令使用 genSymKey來建立 256 位元AES金鑰。它會使用 -sess 參數來建立只在目前工作階段中存在的金鑰。

輸出顯示 HSM建立金鑰 262168

Command: genSymKey -t 31 -s 32 -l AES-wrapping-key -sess Cfm3GenerateSymmetricKey returned: 0x00 : HSM Return: SUCCESS Symmetric Key Created. Key Handle: 262168 Cluster Error Status Node id 1 and err state 0x00000000 : HSM Return: SUCCESS

接著,範例會驗證金鑰 8 (要匯出的金鑰) 是可擷取的對稱金鑰。它也會驗證包裝金鑰 金鑰 262168是僅存在於工作階段中的AES金鑰。您可以使用 findKey命令,但此範例會將兩個金鑰的屬性匯出至 檔案,然後使用 grep 來尋找檔案中的相關屬性值。

這些命令使用 getAttribute,再加上 -a 的值為 512 (所有),來取得 8262168 金鑰的所有屬性。如需有關這些金鑰屬性的詳細資訊,請參閱AWS CloudHSM 的金鑰屬性參考 KMU

getAttribute -o 8 -a 512 -out attributes/attr_8 getAttribute -o 262168 -a 512 -out attributes/attr_262168

這些命令使用 grep 來驗證要匯出金鑰 (金鑰 8) 的屬性,以及僅限工作階段的包裝金鑰 (金鑰 262168)。

// Verify that the key to be exported is a symmetric key. $ grep -A 1 "OBJ_ATTR_CLASS" attributes/attr_8 OBJ_ATTR_CLASS 0x04 // Verify that the key to be exported is extractable. $ grep -A 1 "OBJ_ATTR_KEY_TYPE" attributes/attr_8 OBJ_ATTR_EXTRACTABLE 0x00000001 // Verify that the wrapping key is an AES key $ grep -A 1 "OBJ_ATTR_KEY_TYPE" attributes/attr_262168 OBJ_ATTR_KEY_TYPE 0x1f // Verify that the wrapping key is a session key $ grep -A 1 "OBJ_ATTR_TOKEN" attributes/attr_262168 OBJ_ATTR_TOKEN 0x00 // Verify that the wrapping key can be used for wrapping $ grep -A 1 "OBJ_ATTR_WRAP" attributes/attr_262168 OBJ_ATTR_WRAP 0x00000001

最後,我們使用工作階段金鑰 (金鑰 262168) 做為包裝金鑰,來使用 exSymKey 命令匯出金鑰 8

當工作階段結束時,金鑰 262168 便不再存在。

Command: exSymKey -k 8 -w 262168 -out aes256_H8.key Cfm3WrapKey returned: 0x00 : HSM Return: SUCCESS Cfm3UnWrapHostKey returned: 0x00 : HSM Return: SUCCESS Wrapped Symmetric Key written to file "aes256_H8.key"
範例 :使用外部取消包裝金鑰

此範例示範如何使用外部取消包裝金鑰從 匯出金鑰HSM。

當您從 匯出金鑰時HSM,您可以在 上指定AES金鑰HSM作為包裝金鑰。依預設,此包裝金鑰會用於將要匯出的金鑰進行包裝和取消包裝。不過,您可以使用 -wk 參數來告訴 exSymKey 使用磁碟上檔案中的外部金鑰來取消包裝。當您這麼做時,由 -w 參數指定的金鑰會包裝目標金鑰,而 -wk 參數指定檔案中的金鑰會將金鑰取消包裝。

由於包裝金鑰必須是對稱的AES金鑰,因此 中的包裝金鑰HSM和磁碟上的取消包裝金鑰必須具有相同的金鑰材料。若要這麼做,您必須先將包裝金鑰匯入 ,HSM或從 匯出操作HSM前匯出包裝金鑰。

此範例會在 之外建立金鑰,HSM並將其匯入 HSM。它使用內部的金鑰複本來包裝要匯出的對稱金鑰,然後複製檔案中的金鑰來將其取消包裝。

第一個命令使用 OpenSSL 產生 256 位元AES金鑰。此命令會將金鑰儲存到 aes256-forImport.key 檔案。OpenSSL 命令不會傳回任何輸出,但您可以使用多個命令來確認其成功。此範例中使用 wc (字數) 工具,該工具會確認檔案中是否包含 32 位元組的資料。

$ openssl rand -out keys/aes256-forImport.key 32 $ wc keys/aes256-forImport.key 0 2 32 keys/aes256-forImport.key

此命令使用 imSymKey命令,將AES金鑰從 aes256-forImport.key 檔案匯入 HSM。當命令完成時,金鑰存在於HSM具有金鑰控制碼的 262167aes256-forImport.key 檔案中。

Command: imSymKey -f keys/aes256-forImport.key -t 31 -l aes256-imported -w 6 Cfm3WrapHostKey returned: 0x00 : HSM Return: SUCCESS Cfm3CreateUnwrapTemplate returned: 0x00 : HSM Return: SUCCESS Cfm3UnWrapKey returned: 0x00 : HSM Return: SUCCESS Symmetric Key Unwrapped. Key Handle: 262167 Cluster Error Status Node id 1 and err state 0x00000000 : HSM Return: SUCCESS Node id 0 and err state 0x00000000 : HSM Return: SUCCESS

此命令在匯出操作時使用該金鑰。命令使用 exSymKey 匯出金鑰 21,這是 192 位元AES金鑰。若要包裝金鑰,它會使用金鑰 262167,這是匯入 的複本HSM。為了要將金鑰取消包裝,它使用 aes256-forImport.key 檔案中的相同金鑰資料。命令完成時,會將金鑰 21 匯出到 aes192_h21.key 檔案。

Command: exSymKey -k 21 -w 262167 -out aes192_H21.key -wk aes256-forImport.key Cfm3WrapKey returned: 0x00 : HSM Return: SUCCESS Wrapped Symmetric Key written to file "aes192_H21.key"

參數

-h

顯示命令的說明。

必要:是

-k

指定要匯出之金鑰的金鑰控制代碼。此為必要參數。輸入您擁有之對稱金鑰的金鑰控制代碼。此為必要參數。若要尋找金鑰控點,請使用 findKey命令。

若要驗證金鑰是否可以匯出,請使用 getAttribute命令來取得OBJ_ATTR_EXTRACTABLE屬性的值,該值由常數 表示354。此外,您只能匯出您擁有的金鑰。若要尋找金鑰的擁有者,請使用 getKeyInfo命令。

必要:是

-w

指定包裝金鑰的金鑰控制代碼。此為必要參數。若要尋找金鑰控點,請使用 findKey命令。

包裝金鑰是 中的金鑰HSM,用於加密 (包裝) 然後解密 (解包裝) 要匯出的金鑰。只有AES金鑰可以用作包裝金鑰。

您可以使用任何AES金鑰 (任何大小) 作為包裝金鑰。由於包裝金鑰會包裝,然後立即展開目標金鑰,因此您可以將 作為工作階段限定AES金鑰作為包裝金鑰。若要判斷金鑰是否可以用作包裝金鑰,請使用 getAttribute取得OBJ_ATTR_WRAP屬性的值,該屬性由常數 表示262。若要建立包裝金鑰,請使用 genSymKey來建立AES金鑰 (類型 31)。

如果您使用 -wk 參數來指定外部的取消包裝金鑰,則在匯出期間會使用 -w 包裝金鑰來進行包裝,但不會用來取消包裝。

注意

Key 4 代表不支援的內部金鑰。我們建議您使用您建立和管理的AES金鑰作為包裝金鑰。

必要:是

-out

指定輸出檔案的路徑和名稱。命令成功時,這個檔案中會包含匯出的純文字金鑰。如果檔案已存在,命令會覆寫檔案且不會有任何警告。

必要:是

-m

指定包裝機制。唯一的有效值是 4,這代表 NIST_AES_WRAP 機制。

必要:否

預設:4

-wk

使用指定檔案中的 AES金鑰來展開要匯出的 金鑰。輸入包含純文字AES索引鍵之檔案的路徑和名稱。

當您包含此參數時, exSymKey會使用 -w 參數HSM指定的 金鑰來包裝要匯出的金鑰,並使用-wk檔案中的 金鑰來將其解壓縮。-w-wk參數值必須解析為相同的純文字金鑰。

必要:否

預設:使用 上的包裝金鑰HSM來展開。

相關主題