在密碼機(jī)HSM之間復(fù)制密鑰
當(dāng)您需要將一個(gè)密碼機(jī)中的密鑰復(fù)制到另一個(gè)密碼機(jī)時(shí),可以在原密碼機(jī)中將密鑰導(dǎo)出,然后導(dǎo)入到另外一個(gè)密碼機(jī)中。本文介紹如何在兩臺(tái)密碼機(jī)之間復(fù)制密鑰。
適用的密碼機(jī)類(lèi)型
通用密碼機(jī)(FIPS)
適用場(chǎng)景
兩臺(tái)密碼機(jī)不在同一集群,密鑰無(wú)法自動(dòng)同步的場(chǎng)景。
兩臺(tái)密碼機(jī)屬于同一集群時(shí),集群中的密碼機(jī)信息會(huì)自動(dòng)同步,您無(wú)需復(fù)制密鑰。
前提條件
已啟動(dòng)HSM客戶(hù)端代理(hsm_proxy)。具體操作,請(qǐng)參見(jiàn)啟動(dòng)HSM客戶(hù)端(hsm_proxy)。
使用的工具
key_mgmt_tool命令行工具。詳細(xì)介紹,請(qǐng)參見(jiàn)key_mgmt_tool。
執(zhí)行本文檔操作前,請(qǐng)通過(guò)key_mgmt_tool(密碼機(jī)密鑰管理工具)并使用CU用戶(hù)登錄,命令如下。
請(qǐng)將
/opt/hsm/bin/key_mgmt_tool
替換為真實(shí)路徑。請(qǐng)將
<yourCuUserName>
、<yourCuUserPassword>
替換真實(shí)CU用戶(hù)名、密碼。
$/opt/hsm/bin/key_mgmt_tool
Command: loginHSM -u CU -s <yourCuUserName> -p <yourCuUserPassword>
復(fù)制對(duì)稱(chēng)密鑰
以將密碼機(jī)A中的對(duì)稱(chēng)密鑰,復(fù)制到密碼機(jī)B中為例介紹。其中:
被復(fù)制的密鑰為AES 256位密鑰。
封裝密鑰采用RSA 2048位密鑰,公鑰指數(shù)使用65537。
導(dǎo)出復(fù)制的密鑰時(shí),使用RSA_OAEP(SHA256)封裝和解封裝方法。
在密碼機(jī)B中,生成并導(dǎo)出封裝密鑰。
執(zhí)行
genRSAKeyPair
命令,生成一個(gè)RSA密鑰作為封裝密鑰。Command: genRSAKeyPair -m 2048 -e 65537 -l rsa_wrapping_key
參數(shù)
說(shuō)明
-m
密鑰長(zhǎng)度。
-e
公鑰指數(shù)。取值在65537~2^31-1之間,且為奇數(shù)。
-l
密鑰標(biāo)簽。
預(yù)期輸出:
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
執(zhí)行
exportPubKey
命令,導(dǎo)出RSA公鑰。Command: exportPubKey -k 33 -out rsa_wrapping_key.pub
參數(shù)
說(shuō)明
-k
公鑰的標(biāo)識(shí)。
-out
導(dǎo)出后的公鑰文件名。
預(yù)期輸出:
PEM formatted public key is written to rsa_wrapping_key.pub Cfm3ExportPubKey returned: 0x00 : HSM Return: SUCCESS
在密碼機(jī)A中,使用密碼機(jī)B中導(dǎo)出的RSA公鑰,封裝要復(fù)制的對(duì)稱(chēng)密鑰。
執(zhí)行
genSymKey
命令,生成對(duì)稱(chēng)密鑰。如果您已有對(duì)稱(chēng)密鑰,請(qǐng)?zhí)^(guò)本步驟。Command: genSymKey -t 31 -s 32 -l mySymmetricKey
參數(shù)
說(shuō)明
-t
密鑰類(lèi)型。取值:
16:GENERIC_SECRET
21:3DES
31:AES
-s
密鑰長(zhǎng)度。單位為字節(jié)。
AES類(lèi)型的密鑰:取值為16、 24或32。
3DES類(lèi)型的密鑰:取值為24。
GENERIC_SECRET類(lèi)型的密鑰:取值<= 800。
-l
密鑰標(biāo)簽。
預(yù)期輸出:
Cfm3GenerateSymmetricKey returned: 0x00 : HSM Return: SUCCESS Symmetric Key Created. Key Handle: 29 Cluster Status: Node id 0 status: 0x00000000 : HSM Return: SUCCESS
執(zhí)行
importPubKey
命令,導(dǎo)入從密碼機(jī)B獲取的RSA公鑰。Command: importPubKey -sess -l rsa_pub_key -f rsa_wrapping_key.pub
參數(shù)
說(shuō)明
-sess
密鑰用于會(huì)話。表示它是臨時(shí)使用,而非長(zhǎng)期存儲(chǔ)。
-l
密鑰標(biāo)簽。
-f
公鑰的文件名。
預(yù)期輸出:
Cfm3CreatePublicKey returned: 0x00 : HSM Return: SUCCESS Public Key Handle: 28 Cluster Status: Node id 0 status: 0x00000000 : HSM Return: SUCCESS
執(zhí)行
wrapKey
命令,使用上述RSA公鑰進(jìn)行對(duì)稱(chēng)密鑰的封裝并保存到文件。Command: wrapKey -k 29 -w 28 -m 8 -t 3 -out symmetric_key_wrapped_with_rsa.wrap
參數(shù)
說(shuō)明
-k
待封裝的密鑰的標(biāo)識(shí)。
-w
封裝密鑰的標(biāo)識(shí)。
-m
封裝方法。取值:
0:AES_CBC_PAD (如果設(shè)置了-noheader,則必須提供 IV)
1:AES_CBC (如果設(shè)置了-noheader,則必須提供 IV)
4:CLOUDHSM_AES_KEY_WRAP
5:NIST_AES_WRAP_NO_PAD (密鑰長(zhǎng)度必須是 8 字節(jié)的倍數(shù))
6(默認(rèn)值):NIST_AES_WRAP_PAD
7:RSA_AES
8:RSA_OAEP (密鑰長(zhǎng)度必須 <= (Mod_len-2*Hash_len-2) 字節(jié))
9:NIST_TDEA_WRAP (密鑰長(zhǎng)度必須是 4 字節(jié)的倍數(shù))
10:AES_GCM
11:CLOUDHSM_AES_GCM
12:RSA_PKCS (密鑰長(zhǎng)度必須 <= (Mod_len-11) 字節(jié))
-t
哈希類(lèi)型。封裝方法為RSA_AES(7)、RSA_OAEP(8)時(shí),需要設(shè)置。取值:
2(默認(rèn)值):SHA1
3:SHA256
4:SHA384
5:SHA512
6:SHA224
-out
密鑰封裝后,保存的文件名稱(chēng)。
預(yù)期輸出:
Cfm2WrapKey5 returned: 0x00 : HSM Return: SUCCESS Key Wrapped. Wrapped Key written to file "symmetric_key_wrapped_with_rsa.wrap" length 525
在密碼機(jī)B中,執(zhí)行
unWrapKey
命令,使用RSA私鑰對(duì)已封裝的對(duì)稱(chēng)密鑰進(jìn)行解封裝并存入密碼機(jī)。Command: unWrapKey -f symmetric_key_wrapped_with_rsa.wrap -w 32 -m 8 -t 3
參數(shù)
說(shuō)明
-f
封裝后的密鑰文件名稱(chēng)。
-w
封裝密鑰的標(biāo)識(shí)。
-m
封裝方法。取值:
0:AES_CBC_PAD (如果設(shè)置了-noheader,則必須提供 IV)
1:AES_CBC (如果設(shè)置了-noheader,則必須提供 IV)
4:CLOUDHSM_AES_KEY_WRAP
5:NIST_AES_WRAP_NO_PAD
6(默認(rèn)值):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
哈希類(lèi)型。封裝方法為RSA_AES(7)、RSA_OAEP(8)時(shí),需要設(shè)置。取值:
2(默認(rèn)值):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
復(fù)制非對(duì)稱(chēng)密鑰
以將密碼機(jī)A中的非對(duì)稱(chēng)密鑰,復(fù)制到密碼機(jī)B中為例介紹。其中:
被復(fù)制的密鑰為EC secp256k1密鑰。
封裝密鑰采用RSA 2048位密鑰,公鑰指數(shù)使用65537。
導(dǎo)出復(fù)制的密鑰時(shí),使用RSA_OAEP(SHA256)封裝和解封裝方法。
在密碼機(jī)B中,生成并導(dǎo)出封裝密鑰。
執(zhí)行
genRSAKeyPair
命令,生成一個(gè)RSA密鑰作為封裝密鑰。Command: genRSAKeyPair -m 2048 -e 65537 -l rsa_wrapping_key
參數(shù)
說(shuō)明
-m
密鑰長(zhǎng)度。
-e
公鑰指數(shù)。取值在65537~2^31-1之間,且為奇數(shù)。
-l
密鑰標(biāo)簽。
預(yù)期輸出:
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
執(zhí)行
exportPubKey
命令,導(dǎo)出RSA公鑰。Command: exportPubKey -k 33 -out rsa_wrapping_key.pub
參數(shù)
說(shuō)明
-k
公鑰的標(biāo)識(shí)。
-out
導(dǎo)出后的公鑰文件名。
預(yù)期輸出:
PEM formatted public key is written to rsa_wrapping_key.pub Cfm3ExportPubKey returned: 0x00 : HSM Return: SUCCESS
在密碼機(jī)A中,使用密碼機(jī)B中導(dǎo)出的RSA公鑰,封裝要復(fù)制的非對(duì)稱(chēng)密鑰。
執(zhí)行
genECCKeyPair
命令,生成非對(duì)稱(chēng)密鑰。如果您已有非對(duì)稱(chēng)密鑰,請(qǐng)?zhí)^(guò)本步驟。Command: genECCKeyPair -i 16 -l secp256k1_key
參數(shù)
說(shuō)明
-i
ECC曲線。取值:1~16。
-l
密鑰標(biāo)簽。
預(yù)期輸出:
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
執(zhí)行
importPubKey
命令,導(dǎo)入從密碼機(jī)B獲取的RSA公鑰。Command: importPubKey -sess -l rsa_pub_key -f rsa_wrapping_key.pub
參數(shù)
說(shuō)明
-sess
密鑰用于會(huì)話。表示它是臨時(shí)使用,而非長(zhǎng)期存儲(chǔ)。
-l
密鑰標(biāo)簽。
-f
公鑰的文件名。
預(yù)期輸出:
Cfm3CreatePublicKey returned: 0x00 : HSM Return: SUCCESS Public Key Handle: 31 Cluster Status: Node id 0 status: 0x00000000 : HSM Return: SUCCESS
執(zhí)行
wrapKey
命令,使用導(dǎo)入的RSA公鑰,對(duì)非對(duì)稱(chēng)密鑰的私鑰進(jìn)行封裝。Command: wrapKey -k 28 -w 31 -m 8 -t 3 -out secp256k1_key_wrapped_with_rsa.wrap
參數(shù)
說(shuō)明
-k
待封裝的密鑰的標(biāo)識(shí)。
-w
封裝密鑰的標(biāo)識(shí)。
-m
封裝方法。取值:
0:AES_CBC_PAD (如果設(shè)置了-noheader,則必須提供 IV)
1:AES_CBC (如果設(shè)置了-noheader,則必須提供 IV)
4:CLOUDHSM_AES_KEY_WRAP
5:NIST_AES_WRAP_NO_PAD (密鑰長(zhǎng)度必須是 8 字節(jié)的倍數(shù))
6(默認(rèn)值):NIST_AES_WRAP_PAD
7:RSA_AES
8:RSA_OAEP (密鑰長(zhǎng)度必須 <= (Mod_len-2*Hash_len-2) 字節(jié))
9:NIST_TDEA_WRAP (密鑰長(zhǎng)度必須是 4 字節(jié)的倍數(shù))
10:AES_GCM
11:CLOUDHSM_AES_GCM
12:RSA_PKCS (密鑰長(zhǎng)度必須 <= (Mod_len-11) 字節(jié))
-t
哈希類(lèi)型。封裝方法為RSA_AES(7)、RSA_OAEP(8)時(shí),需要設(shè)置。取值:
2(默認(rèn)值):SHA1
3:SHA256
4:SHA384
5:SHA512
6:SHA224
-out
密鑰封裝后,保存的文件名稱(chēng)。
預(yù)期輸出:
Cfm2WrapKey5 returned: 0x00 : HSM Return: SUCCESS Key Wrapped. Wrapped Key written to file "secp256k1_key_wrapped_with_rsa.wrap" length 515
執(zhí)行
exportPubKey
命令,導(dǎo)出非對(duì)稱(chēng)密鑰的公鑰。Command: exportPubKey -k 29 -out secp256k1_key.pub
參數(shù)
說(shuō)明
-k
公鑰的標(biāo)識(shí)。
-out
導(dǎo)出后的公鑰文件名。
預(yù)期輸出:
PEM formatted public key is written to secp256k1_key.pub Cfm3ExportPubKey returned: 0x00 : HSM Return: SUCCESS
在密碼機(jī)B中,解封裝非對(duì)稱(chēng)密鑰的私鑰,并導(dǎo)入非對(duì)稱(chēng)密鑰的公鑰。
執(zhí)行
unWrapKey
命令,使用RSA私鑰,對(duì)已封裝的非對(duì)稱(chēng)密鑰的私鑰,進(jìn)行解封裝。Command: unWrapKey -f secp256k1_key_wrapped_with_rsa.wrap -w 32 -m 8 -t 3
參數(shù)
說(shuō)明
-f
封裝后的密鑰文件名稱(chēng)。
-w
封裝密鑰的標(biāo)識(shí)。
-m
封裝方法。取值:
0:AES_CBC_PAD (如果設(shè)置了-noheader,則必須提供 IV)
1:AES_CBC (如果設(shè)置了-noheader,則必須提供 IV)
4:CLOUDHSM_AES_KEY_WRAP
5:NIST_AES_WRAP_NO_PAD
6(默認(rèn)值):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
哈希類(lèi)型。封裝方法為RSA_AES(7)、RSA_OAEP(8)時(shí),需要設(shè)置。取值:
2(默認(rèn)值):SHA1
3:SHA256
4:SHA384
5:SHA512
6:SHA224
預(yù)期輸出:
Cfm2UnWrapKey5 returned: 0x00 : HSM Return: SUCCESS Key Unwrapped. Key Handle: 27 Cluster Status: Node id 0 status: 0x00000000 : HSM Return: SUCCESS
執(zhí)行
importPubKey
命令,導(dǎo)入非對(duì)稱(chēng)密鑰的公鑰。Command: importPubKey -l secp256k1_key_pub_imported -f secp256k1_key.pub
預(yù)期輸出:
參數(shù)
說(shuō)明
-sess
密鑰用于會(huì)話。表示它是臨時(shí)使用,而非長(zhǎng)期存儲(chǔ)。
-l
密鑰標(biāo)簽。
-f
公鑰的文件名。
Cfm3CreatePublicKey returned: 0x00 : HSM Return: SUCCESS Public Key Handle: 26 Cluster Status: Node id 0 status: 0x00000000 : HSM Return: SUCCESS