當您需要將一個密碼機中的密鑰複製到另一個密碼機時,可以在原密碼機中將密鑰匯出,然後匯入到另外一個密碼機中。本文介紹如何在兩台密碼機之間複製密鑰。
適用的密碼機類型
通用密碼機(FIPS)
適用情境
兩台密碼機不在同一叢集,密鑰無法自動同步的情境。
兩台密碼機屬於同一叢集時,叢集中的密碼機資訊會自動同步,您無需複製密鑰。
前提條件
已啟動HSM用戶端代理(hsm_proxy)。具體操作,請參見啟動HSM用戶端(hsm_proxy)。
使用的工具
key_mgmt_tool命令列工具。詳細介紹,請參見key_mgmt_tool。
執行本文檔操作前,請通過key_mgmt_tool(密碼機密鑰管理工具)並使用CU使用者登入,命令如下。
請將
/opt/hsm/bin/key_mgmt_tool替換為真實路徑。請將
<yourCuUserName>、<yourCuUserPassword>替換真實CU使用者名稱、密碼。
$/opt/hsm/bin/key_mgmt_tool
Command: loginHSM -u CU -s <yourCuUserName> -p <yourCuUserPassword>複製對稱金鑰
以將密碼機A中的對稱金鑰,複製到密碼機B中為例介紹。其中:
被複製的密鑰為AES 256位密鑰。
封裝密鑰採用RSA 2048位密鑰,公開金鑰指數使用65537。
匯出複製的密鑰時,使用RSA_OAEP(SHA256)封裝和解鎖裝方法。
在密碼機B中,產生並匯出封裝密鑰。
執行
genRSAKeyPair命令,產生一個RSA密鑰作為封裝密鑰。Command: genRSAKeyPair -m 2048 -e 65537 -l rsa_wrapping_key參數
說明
-m
密鑰長度。
-e
公開金鑰指數。取值在65537~2^31-1之間,且為奇數。
-l
密鑰標籤。
預期輸出:
Cfm3GenerateKeyPair returned: 0x00 : HSM Return: SUCCESS Cfm3GenerateKeyPair: public key handle: 33 private key handle: 32 Cluster Status: Node id 0 status: 0x00000000 : HSM Return: SUCCESS執行
exportPubKey命令,匯出RSA公開金鑰。Command: exportPubKey -k 33 -out rsa_wrapping_key.pub參數
說明
-k
公開金鑰的標識。
-out
匯出後的公開金鑰檔案名稱。
預期輸出:
PEM formatted public key is written to rsa_wrapping_key.pub Cfm3ExportPubKey returned: 0x00 : HSM Return: SUCCESS
在密碼機A中,使用密碼機B中匯出的RSA公開金鑰,封裝要複製的對稱金鑰。
執行
genSymKey命令,產生對稱金鑰。如果您已有對稱金鑰,請跳過本步驟。Command: genSymKey -t 31 -s 32 -l mySymmetricKey參數
說明
-t
密鑰類型。取值:
16:GENERIC_SECRET
21:3DES
31:AES
-s
密鑰長度。單位為位元組。
AES類型的密鑰:取值為16、 24或32。
3DES類型的密鑰:取值為24。
GENERIC_SECRET類型的密鑰:取值<= 800。
-l
密鑰標籤。
預期輸出:
Cfm3GenerateSymmetricKey returned: 0x00 : HSM Return: SUCCESS Symmetric Key Created. Key Handle: 29 Cluster Status: Node id 0 status: 0x00000000 : HSM Return: SUCCESS執行
importPubKey命令,匯入從密碼機B擷取的RSA公開金鑰。Command: importPubKey -sess -l rsa_pub_key -f rsa_wrapping_key.pub參數
說明
-sess
密鑰用於會話。表示它是臨時使用,而非長期儲存。
-l
密鑰標籤。
-f
公開金鑰的檔案名稱。
預期輸出:
Cfm3CreatePublicKey returned: 0x00 : HSM Return: SUCCESS Public Key Handle: 28 Cluster Status: Node id 0 status: 0x00000000 : HSM Return: SUCCESS執行
wrapKey命令,使用上述RSA公開金鑰進行對稱金鑰的封裝並儲存到檔案。Command: wrapKey -k 29 -w 28 -m 8 -t 3 -out symmetric_key_wrapped_with_rsa.wrap參數
說明
-k
待封裝的密鑰的標識。
-w
封裝密鑰的標識。
-m
封裝方法。取值:
0:AES_CBC_PAD (如果設定了-noheader,則必須提供 IV)
1:AES_CBC (如果設定了-noheader,則必須提供 IV)
4:CLOUDHSM_AES_KEY_WRAP
5:NIST_AES_WRAP_NO_PAD (密鑰長度必須是 8 位元組的倍數)
6(預設值):NIST_AES_WRAP_PAD
7:RSA_AES
8:RSA_OAEP (密鑰長度必須 <= (Mod_len-2*Hash_len-2) 位元組)
9:NIST_TDEA_WRAP (密鑰長度必須是 4 位元組的倍數)
10:AES_GCM
11:CLOUDHSM_AES_GCM
12:RSA_PKCS (密鑰長度必須 <= (Mod_len-11) 位元組)
-t
雜湊類型。封裝方法為RSA_AES(7)、RSA_OAEP(8)時,需要設定。取值:
2(預設值):SHA1
3:SHA256
4:SHA384
5:SHA512
6:SHA224
-out
密鑰封裝後,儲存的檔案名稱。
預期輸出:
Cfm2WrapKey5 returned: 0x00 : HSM Return: SUCCESS Key Wrapped. Wrapped Key written to file "symmetric_key_wrapped_with_rsa.wrap" length 525
在密碼機B中,執行
unWrapKey命令,使用RSA私密金鑰對已封裝的對稱金鑰進行解鎖裝並存入密碼機。Command: unWrapKey -f symmetric_key_wrapped_with_rsa.wrap -w 32 -m 8 -t 3參數
說明
-f
封裝後的密鑰檔案名稱。
-w
封裝密鑰的標識。
-m
封裝方法。取值:
0:AES_CBC_PAD (如果設定了-noheader,則必須提供 IV)
1:AES_CBC (如果設定了-noheader,則必須提供 IV)
4:CLOUDHSM_AES_KEY_WRAP
5:NIST_AES_WRAP_NO_PAD
6(預設值):NIST_AES_WRAP_PAD
7:RSA_AES
8:RSA_OAEP
9:NIST_TDEA_WRAP
10:AES_GCM
11:CLOUDHSM_AES_GCM
12:RSA_PKCS
-t
雜湊類型。封裝方法為RSA_AES(7)、RSA_OAEP(8)時,需要設定。取值:
2(預設值):SHA1
3:SHA256
4:SHA384
5:SHA512
6:SHA224
Cfm2UnWrapKey5 returned: 0x00 : HSM Return: SUCCESS Key Unwrapped. Key Handle: 31 Cluster Status: Node id 0 status: 0x00000000 : HSM Return: SUCCESS
複製非對稱金鑰
以將密碼機A中的非對稱金鑰,複製到密碼機B中為例介紹。其中:
被複製的密鑰為EC secp256k1密鑰。
封裝密鑰採用RSA 2048位密鑰,公開金鑰指數使用65537。
匯出複製的密鑰時,使用RSA_OAEP(SHA256)封裝和解鎖裝方法。
在密碼機B中,產生並匯出封裝密鑰。
執行
genRSAKeyPair命令,產生一個RSA密鑰作為封裝密鑰。Command: genRSAKeyPair -m 2048 -e 65537 -l rsa_wrapping_key參數
說明
-m
密鑰長度。
-e
公開金鑰指數。取值在65537~2^31-1之間,且為奇數。
-l
密鑰標籤。
預期輸出:
Cfm3GenerateKeyPair returned: 0x00 : HSM Return: SUCCESS Cfm3GenerateKeyPair: public key handle: 33 private key handle: 32 Cluster Status: Node id 0 status: 0x00000000 : HSM Return: SUCCESS執行
exportPubKey命令,匯出RSA公開金鑰。Command: exportPubKey -k 33 -out rsa_wrapping_key.pub參數
說明
-k
公開金鑰的標識。
-out
匯出後的公開金鑰檔案名稱。
預期輸出:
PEM formatted public key is written to rsa_wrapping_key.pub Cfm3ExportPubKey returned: 0x00 : HSM Return: SUCCESS
在密碼機A中,使用密碼機B中匯出的RSA公開金鑰,封裝要複製的非對稱金鑰。
執行
genECCKeyPair命令,產生非對稱金鑰。如果您已有非對稱金鑰,請跳過本步驟。Command: genECCKeyPair -i 16 -l secp256k1_key參數
說明
-i
ECC曲線。取值:1~16。
-l
密鑰標籤。
預期輸出:
Cfm3GenerateKeyPair returned: 0x00 : HSM Return: SUCCESS Cfm3GenerateKeyPair: public key handle: 29 private key handle: 28 Cluster Status: Node id 0 status: 0x00000000 : HSM Return: SUCCESS執行
importPubKey命令,匯入從密碼機B擷取的RSA公開金鑰。Command: importPubKey -sess -l rsa_pub_key -f rsa_wrapping_key.pub參數
說明
-sess
密鑰用於會話。表示它是臨時使用,而非長期儲存。
-l
密鑰標籤。
-f
公開金鑰的檔案名稱。
預期輸出:
Cfm3CreatePublicKey returned: 0x00 : HSM Return: SUCCESS Public Key Handle: 31 Cluster Status: Node id 0 status: 0x00000000 : HSM Return: SUCCESS執行
wrapKey命令,使用匯入的RSA公開金鑰,對非對稱金鑰的私密金鑰進行封裝。Command: wrapKey -k 28 -w 31 -m 8 -t 3 -out secp256k1_key_wrapped_with_rsa.wrap參數
說明
-k
待封裝的密鑰的標識。
-w
封裝密鑰的標識。
-m
封裝方法。取值:
0:AES_CBC_PAD (如果設定了-noheader,則必須提供 IV)
1:AES_CBC (如果設定了-noheader,則必須提供 IV)
4:CLOUDHSM_AES_KEY_WRAP
5:NIST_AES_WRAP_NO_PAD (密鑰長度必須是 8 位元組的倍數)
6(預設值):NIST_AES_WRAP_PAD
7:RSA_AES
8:RSA_OAEP (密鑰長度必須 <= (Mod_len-2*Hash_len-2) 位元組)
9:NIST_TDEA_WRAP (密鑰長度必須是 4 位元組的倍數)
10:AES_GCM
11:CLOUDHSM_AES_GCM
12:RSA_PKCS (密鑰長度必須 <= (Mod_len-11) 位元組)
-t
雜湊類型。封裝方法為RSA_AES(7)、RSA_OAEP(8)時,需要設定。取值:
2(預設值):SHA1
3:SHA256
4:SHA384
5:SHA512
6:SHA224
-out
密鑰封裝後,儲存的檔案名稱。
預期輸出:
Cfm2WrapKey5 returned: 0x00 : HSM Return: SUCCESS Key Wrapped. Wrapped Key written to file "secp256k1_key_wrapped_with_rsa.wrap" length 515執行
exportPubKey命令,匯出非對稱金鑰的公開金鑰。Command: exportPubKey -k 29 -out secp256k1_key.pub參數
說明
-k
公開金鑰的標識。
-out
匯出後的公開金鑰檔案名稱。
預期輸出:
PEM formatted public key is written to secp256k1_key.pub Cfm3ExportPubKey returned: 0x00 : HSM Return: SUCCESS
在密碼機B中,解鎖裝非對稱金鑰的私密金鑰,並匯入非對稱金鑰的公開金鑰。
執行
unWrapKey命令,使用RSA私密金鑰,對已封裝的非對稱金鑰的私密金鑰,進行解鎖裝。Command: unWrapKey -f secp256k1_key_wrapped_with_rsa.wrap -w 32 -m 8 -t 3參數
說明
-f
封裝後的密鑰檔案名稱。
-w
封裝密鑰的標識。
-m
封裝方法。取值:
0:AES_CBC_PAD (如果設定了-noheader,則必須提供 IV)
1:AES_CBC (如果設定了-noheader,則必須提供 IV)
4:CLOUDHSM_AES_KEY_WRAP
5:NIST_AES_WRAP_NO_PAD
6(預設值):NIST_AES_WRAP_PAD
7:RSA_AES
8:RSA_OAEP
9:NIST_TDEA_WRAP
10:AES_GCM
11:CLOUDHSM_AES_GCM
12:RSA_PKCS
-t
雜湊類型。封裝方法為RSA_AES(7)、RSA_OAEP(8)時,需要設定。取值:
2(預設值):SHA1
3:SHA256
4:SHA384
5:SHA512
6:SHA224
預期輸出:
Cfm2UnWrapKey5 returned: 0x00 : HSM Return: SUCCESS Key Unwrapped. Key Handle: 27 Cluster Status: Node id 0 status: 0x00000000 : HSM Return: SUCCESS執行
importPubKey命令,匯入非對稱金鑰的公開金鑰。Command: importPubKey -l secp256k1_key_pub_imported -f secp256k1_key.pub預期輸出:
參數
說明
-sess
密鑰用於會話。表示它是臨時使用,而非長期儲存。
-l
密鑰標籤。
-f
公開金鑰的檔案名稱。
Cfm3CreatePublicKey returned: 0x00 : HSM Return: SUCCESS Public Key Handle: 26 Cluster Status: Node id 0 status: 0x00000000 : HSM Return: SUCCESS