全部產品
Search
文件中心

Key Management Service:在密碼機HSM之間複製密鑰

更新時間:Jun 27, 2025

當您需要將一個密碼機中的密鑰複製到另一個密碼機時,可以在原密碼機中將密鑰匯出,然後匯入到另外一個密碼機中。本文介紹如何在兩台密碼機之間複製密鑰。

適用的密碼機類型

通用密碼機(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)封裝和解鎖裝方法。

  1. 在密碼機B中,產生並匯出封裝密鑰。

    1. 執行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
    2. 執行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
  2. 在密碼機A中,使用密碼機B中匯出的RSA公開金鑰,封裝要複製的對稱金鑰。

    1. 執行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
    2. 執行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
    3. 執行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
  3. 在密碼機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)封裝和解鎖裝方法。

  1. 在密碼機B中,產生並匯出封裝密鑰。

    1. 執行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
    2. 執行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
  2. 在密碼機A中,使用密碼機B中匯出的RSA公開金鑰,封裝要複製的非對稱金鑰。

    1. 執行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
    2. 執行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
    3. 執行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
    4. 執行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
  3. 在密碼機B中,解鎖裝非對稱金鑰的私密金鑰,並匯入非對稱金鑰的公開金鑰。

    1. 執行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
    2. 執行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