使用 匯入純文字對稱金鑰 AWS CloudHSM KMU - AWS CloudHSM

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

使用 匯入純文字對稱金鑰 AWS CloudHSM KMU

使用 AWS CloudHSM key_mgmt_util 工具中的 imSymKey命令,將對稱金鑰的純文字副本從檔案匯入硬體安全模組 (HSM)。您可以使用它來匯入您在 之外透過任何方法產生的金鑰,HSM以及從 匯出的金鑰HSM,例如 exSymKey命令寫入檔案的金鑰。

在匯入過程中, imSymKey會使用您選取的AES金鑰 (包裝金鑰 ) 來包裝 (加密),然後解壓縮 (解密) 要匯入的金鑰。不過,imSymKey 僅適用於包含純文字金鑰的檔案。若要匯出和匯入加密金鑰,請使用 wrapKeyunWrapKey命令。

此外,imSymKey 命令只匯出對稱金鑰。若要匯入公有金鑰,請使用 importPubKey。若要匯入私有金鑰,請使用 importPrivateKeywrapKey

注意

您無法使用對稱或私有PEM金鑰匯入受密碼保護的金鑰。

匯入的金鑰的運作方式與 中產生的金鑰非常類似HSM。不過,OBJ_ATTR_LOCAL 屬性的值為零,表示它不是在本機產生。當您匯入對稱金鑰時,您可以使用以下命令來共用金鑰。匯入金鑰之後,您可以在 shareKeycloudhsm_mgmt_util 中使用 命令來共用金鑰。

imSymKey -l aesShared -t 31 -f kms.key -w 3296 -u 5

在您匯入金鑰之後,請務必標記或刪除金鑰檔案。此命令不會阻止您將相同的金鑰資料匯入許多次。結果 (具有不同金鑰控制代碼和相同金鑰資料的多個金鑰) 會難以追蹤金鑰資料的使用情形,也就很難防止超過其加密限制。

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

語法

imSymKey -h imSymKey -f <key-file> -w <wrapping-key-handle> -t <key-type> -l <label> [-id <key-ID>] [-sess] [-wk <wrapping-key-file> ] [-attest] [-min_srv <minimum-number-of-servers>] [-timeout <number-of-seconds> ] [-u <user-ids>]

範例

這些範例示範如何使用 imSymKey將對稱金鑰匯入您的 HSMs。

範例 :匯入AES對稱金鑰

此範例使用 AES imSymKey將對稱金鑰匯入 HSMs。

第一個命令使用 OpenSSL AES 產生隨機的 256 位元對稱金鑰。此命令將金鑰儲存在 aes256.key 檔案中。

$ openssl rand -out aes256-forImport.key 32

第二個命令使用 將AES金鑰從 aes256.key 檔案imSymKey匯入 HSMs。它使用 金鑰 20,即 中的AES金鑰HSM,作為包裝金鑰,並指定 的標籤imported。與 ID 不同,標籤在叢集內不需要是唯一的。-t (類型) 參數的值為 31,代表 AES。

輸出顯示檔案中的金鑰已包裝和取消包裝,然後匯入 HSM,並在其中指派金鑰控制碼 262180。

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

下一個命令使用 getAttribute取得新匯入金鑰的 OBJ_ATTR_LOCAL 屬性 (屬性 355),並將其寫入 attr_262180 檔案。

Command: getAttribute -o 262180 -a 355 -out attributes/attr_262180 Attributes dumped into attributes/attr_262180_imported file Cfm3GetAttribute returned: 0x00 : HSM Return: SUCCESS

當您檢查屬性檔案時,可以看到OBJ_ATTR_LOCAL屬性的值為零,這表示 中未產生金鑰材料HSM。

$ cat attributes/attr_262180_local OBJ_ATTR_LOCAL 0x00000000
範例 :在叢集之間移動對稱金鑰

此範例示範如何使用 exSymKey和 在叢集之間imSymKey移動純文字AES金鑰。您可以使用類似此程序來建立存在於HSMs兩個叢集上的AES包裝。共用包裝金鑰到位後,您可以使用 wrapKeyunWrapKey 在叢集之間移動加密金鑰。

執行此操作的 CU 使用者必須具有在兩個叢集HSMs上登入 的許可。

第一個命令使用 exSymKey將金鑰 14,即 32 位元AES金鑰,從叢集 1 匯出至 aes.key 檔案。它使用 金鑰 6,這是叢集 1 HSMs中 的AES金鑰,作為包裝金鑰。

Command: exSymKey -k 14 -w 6 -out aes.key Cfm3WrapKey returned: 0x00 : HSM Return: SUCCESS Cfm3UnWrapHostKey returned: 0x00 : HSM Return: SUCCESS Wrapped Symmetric Key written to file "aes.key"

然後,使用者登入叢集 2 中的 key_mgmt_util,並執行imSymKey命令,將aes.key檔案中的金鑰匯入叢集 2 HSMs中的 。此命令使用金鑰 252152,這是叢集 2 HSMs中 的AES金鑰,作為包裝金鑰。

由於 exSymKeyimSymKey使用包裝並立即展開目標金鑰的包裝金鑰,因此不同叢集上的包裝金鑰不需要相同。

輸出顯示金鑰已成功匯入叢集 2,且指派的金鑰控制代碼為 21。

Command: imSymKey -f aes.key -w 262152 -t 31 -l xcluster Cfm3WrapHostKey returned: 0x00 : HSM Return: SUCCESS Cfm3CreateUnwrapTemplate returned: 0x00 : HSM Return: SUCCESS Cfm3UnWrapKey returned: 0x00 : HSM Return: SUCCESS Symmetric Key Unwrapped. Key Handle: 21 Cluster Error Status Node id 1 and err state 0x00000000 : HSM Return: SUCCESS Node id 0 and err state 0x00000000 : HSM Return: SUCCESS Node id 2 and err state 0x00000000 : HSM Return: SUCCESS

若要證明叢集 1 的金鑰 14 和叢集 2 中的金鑰 21 具有相同的金鑰材料,請取得每個金鑰的金鑰檢查值 (KCV)。如果KCV值相同,則金鑰材料相同。

下列命令在叢集 1 getAttribute中使用 ,將金鑰 14 的KCV屬性 (屬性 371) 值寫入 attr_14_kcv 檔案。然後,使用 cat 命令取得 attr_14_kcv 檔案的內容。

Command: getAttribute -o 14 -a 371 -out attr_14_kcv Attributes dumped into attr_14_kcv file $ cat attr_14_kcv OBJ_ATTR_KCV 0xc33cbd

此類似命令在叢集 2 getAttribute中使用 ,將索引鍵 21 的KCV屬性 (屬性 371) 值寫入 attr_21_kcv 檔案。然後,使用 cat 命令取得 attr_21_kcv 檔案的內容。

Command: getAttribute -o 21 -a 371 -out attr_21_kcv Attributes dumped into attr_21_kcv file $ cat attr_21_kcv OBJ_ATTR_KCV 0xc33cbd

輸出顯示兩個索引鍵KCV的值相同,證明索引鍵材料相同。

由於兩個叢集HSMs的 中存在相同的金鑰材料,因此您現在可以在叢集之間共用加密的金鑰,而不必暴露純文字金鑰。例如,您可以對包裝金鑰 14 使用 wrapKey 命令,從叢集 1 匯出加密的金鑰,然後對包裝金鑰 21 使用 unWrapKey,將加密的金鑰匯入叢集 2。

範例 :匯入工作階段金鑰

此命令使用 的-sess參數imSymKey來匯入僅在目前工作階段中有效的 192 位元三重DES金鑰。

此命令使用 -f 參數來指定包含要匯入之金鑰的檔案、使用 -t 參數來指定金鑰類型,以及使用 -w 參數來指定包裝金鑰。此命令使用 -l 參數來指定金鑰的分類標籤,也使用 -id 參數來建立金鑰的易記 (且唯一的) 識別符。另外還使用 -attest 參數來驗證用於匯入金鑰的韌體。

輸出顯示金鑰已成功包裝和取消包裝、匯入到 中HSM,並指派金鑰控制碼 37。此外,也已通過證實檢查,表示韌體未被篡改。

Command: imSymKey -f 3des192.key -w 6 -t 21 -l temp -id test01 -sess -attest Cfm3WrapHostKey returned: 0x00 : HSM Return: SUCCESS Cfm3CreateUnwrapTemplate returned: 0x00 : HSM Return: SUCCESS Cfm3UnWrapKey returned: 0x00 : HSM Return: SUCCESS Symmetric Key Unwrapped. Key Handle: 37 Attestation Check : [PASS] Cluster Error Status Node id 0 and err state 0x00000000 : HSM Return: SUCCESS

接下來,您可以使用 getAttributefindKey命令來驗證新匯入金鑰的屬性。以下命令使用 findKey,以驗證金鑰 37 具有命令所指定的類型、標籤和 ID,而且是工作階段金鑰。如輸出的第 5 行所示,findKey 報告唯一符合所有屬性的金鑰是金鑰 37。

Command: findKey -t 21 -l temp -id test01 -sess 1 Total number of keys present 1 number of keys matched from start index 0::0 37 Cluster Error Status Node id 1 and err state 0x00000000 : HSM Return: SUCCESS Node id 0 and err state 0x00000000 : HSM Return: SUCCESS Node id 2 and err state 0x00000000 : HSM Return: SUCCESS Cfm3FindKey returned: 0x00 : HSM Return: SUCCESS

參數

-attest

執行完整性檢查,以驗證執行叢集的韌體未被篡改。

預設:無認證檢查。

必要:否

-f

指定檔案,其中包含要匯入的金鑰。

檔案必須包含指定長度的 AES或 三重DES金鑰的純文字副本。RC4 和 DES金鑰在 FIPS模式 上無效HSMs。

  • AES:16、24 或 32 個位元組

  • 三 DES(3DES):24 個位元組

必要:是

-h

顯示命令的說明。

必要:是

-id

指使用者定義的金錀識別符。輸入叢集中唯一的字串。預設為空字串。

預設:無 ID 值。

必要:否

-l

指使用者定義的金錀對標籤。輸入一個字串。

您可以使用任何可以幫助您識別金錀的片語。標籤不具唯一性,因此您可使用標籤將金錀進行分組和分類。

必要:是

-min_srv

指定 -timeout 參數值過期前HSMs,在其中同步金鑰的最小數量。如果未在規定時間內同步至指定數量的伺服器,金鑰就不會建立。

AWS CloudHSM 會自動將每個金鑰同步到叢集HSM中的每個金鑰。若要加速程序,請將 的值設定為min_srv小於叢集HSMs中的 數目,並設定低逾時值。然而,請注意有些請求可能不會產生金鑰。

預設:1

必要:否

-sess

建立只在目前工作階段中存在的金鑰。工作階段結束後,金鑰無法復原。

當您僅短暫需要金鑰 (例如,加密後快速解密另一個金鑰的包裝金鑰) 時,請使用此參數。請勿使用工作階段金鑰來加密工作階段結束後可能需要解密的資料。

若要將工作階段金鑰變更為持久性 (金鑰) 金鑰,請使用 setAttribute

預設:此金鑰是持久性金鑰。

必要:否

-timeout

指定命令等待金鑰同步至 min_srv 參數所HSMs指定數目的時間 (以秒為單位)。

此參數只有在命令中同時使用 min_srv 參數時才有效。

預設:無逾時。該命令會無限期等待,並且僅在將金錀同步到最小數目的伺服器時才返回。

必要:否

-t

指對稱金鑰的類型。輸入代表金鑰類型的常數。例如,若要建立AES金鑰,請輸入 -t 31

有效值:

必要:是

-u

將您匯入的金鑰共用給指定的使用者。此參數授予其他HSM加密使用者 (CUs) 在密碼編譯操作中使用此金鑰的許可。

輸入一個 ID 或以逗號分隔HSM的使用者 清單IDs,例如 -u 5,6。請勿包含目前HSM使用者的使用者 ID。若要尋找 ID,您可以在 cloudhsm_mgmt_util listUsers命令列工具中使用 listUsers 命令,或在 key_mgmt_util 命令列工具中使用 命令。

必要:否

-w

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

包裝金鑰是 中的金鑰HSM,用於在匯入過程中加密 ("wrap") 然後解密 ("unwrap) 金鑰。只有AES金鑰可以用作包裝金鑰。

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

如果您使用 -wk 參數來指定外部包裝金鑰,則會使用 -w 包裝金鑰來取消包裝 (而不是包裝) 要匯入的金鑰。

注意

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

必要:是

-wk

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

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

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

必要:否

相關主題