本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 匯入純文字對稱金鑰 AWS CloudHSM KMU
使用 AWS CloudHSM key_mgmt_util 工具中的 imSymKey命令,將對稱金鑰的純文字副本從檔案匯入硬體安全模組 (HSM)。您可以使用它來匯入您在 之外透過任何方法產生的金鑰,HSM以及從 匯出的金鑰HSM,例如 exSymKey命令寫入檔案的金鑰。
在匯入過程中, imSymKey會使用您選取的AES金鑰 (包裝金鑰 ) 來包裝 (加密),然後解壓縮 (解密) 要匯入的金鑰。不過,imSymKey 僅適用於包含純文字金鑰的檔案。若要匯出和匯入加密金鑰,請使用 wrapKey和 unWrapKey命令。
此外,imSymKey 命令只匯出對稱金鑰。若要匯入公有金鑰,請使用 importPubKey。若要匯入私有金鑰,請使用 importPrivateKey或 wrapKey。
注意
您無法使用對稱或私有PEM金鑰匯入受密碼保護的金鑰。
匯入的金鑰的運作方式與 中產生的金鑰非常類似HSM。不過,OBJ_ATTR_LOCAL 屬性的值為零,表示它不是在本機產生。當您匯入對稱金鑰時,您可以使用以下命令來共用金鑰。匯入金鑰之後,您可以在 shareKey
cloudhsm_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包裝。共用包裝金鑰到位後,您可以使用 wrapKey和 unWrapKey 在叢集之間移動加密金鑰。
執行此操作的 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金鑰,作為包裝金鑰。
由於 exSymKey和 imSymKey使用包裝並立即展開目標金鑰的包裝金鑰,因此不同叢集上的包裝金鑰不需要相同。
輸出顯示金鑰已成功匯入叢集 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
接下來,您可以使用 getAttribute或 findKey命令來驗證新匯入金鑰的屬性。以下命令使用 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
。有效值:
-
21:三重 DES(3DES)
。 -
31: AES
必要:是
-
- -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來展開。
必要:否