将密钥材料导入密码机HSM

加密服务支持您将自带的密钥材料导入密码机中。本文介绍如何将对称密钥材料和非对称密钥材料导入密码机。

适用的密码机类型

通用密码机(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>

导入对称密钥材料

以导入AES-256对称密钥材料为例介绍。

  1. 创建对称密钥材料。

    说明

    如果您已有密钥材料,请跳过本步骤。但需要注意文件中只能包含密钥材料,不能有额外的内容,例如换行符。

    在本示例中,使用OpenSSL工具,生成一个32字节的对称密钥材料。

    openssl rand 32 >aes256key_to_import.key
  2. 执行genSymKey命令,生成封装密钥。

    Command:  genSymKey -t 31 -s 32 -sess -l import-wrapping-key

    参数

    说明

    -t

    密钥类型。取值:

    • 21:3DES

    • 31:AES

    -s

    密钥长度。单位为字节。

    • AES类型的密钥:取值为16、 24或32。

    • 3DES类型的密钥:取值为24。

    -sess

    密钥用于会话。表示它是临时使用,而非长期存储。

    -l

    密钥标签。

    预期输出:

      Cfm3GenerateSymmetricKey returned: 0x00 : HSM Return: SUCCESS
      Symmetric Key Created.  Key Handle: 37
      Cluster Status:
      Node id 0 status: 0x00000000 : HSM Return: SUCCESS
  3. 执行imSymKey命令,导入对称密钥材料。

    Command:  imSymKey -f aes256key_to_import.key -t 31 -l aes256-key-imported -w 37

    参数

    说明

    -f

    密钥材料的文件名。

    -t

    密钥材料的密钥类型。取值:

    • 16:GENERIC_SECRET

    • 21:3DES或DES

    • 31:AES

    -l

    密钥标签。

    -w

    封装密钥的标识。即您执行genSymKey命令生成封装密钥时,输出结果中的Key Handle值。

    说明

    Key Handle值由密码机随机分配,您需要根据实际情况修改。

    预期输出:

      Cfm3ImportWrapKey returned: 0x00 : HSM Return: SUCCESS
      Cfm3CreateUnwrapTemplate2 returned: 0x00 : HSM Return: SUCCESS
      Cfm3ImportUnWrapKey returned: 0x00 : HSM Return: SUCCESS
      Symmetric Key Imported.  Key Handle: 35 
      Cluster Status:
      Node id 0 status: 0x00000000 : HSM Return: SUCCESS

导入非对称密钥材料

以导入一个ECC secp256k1私钥和公钥为例介绍。

  1. 创建非对称密钥材料。如果您已有密钥材料,请跳过本步骤。

    例如,使用OpenSSL工具,生成一个ECC secp256k1的非对称密钥材料。

    openssl ecparam -name secp256k1 -genkey -noout -out secp256k1_key.pem
    openssl ec -in secp256k1_key.pem -pubout -out secp256k1_key_pub.pem

    私钥文件示例(secp256k1_key.pem):image.png

    公钥文件示例(secp256k1_key_pub.pem):image.png

  2. 执行genSymKey命令,创建封装密钥。

    说明

    您可根据需要导入非对称密钥材料的公钥或私钥。如果仅导入公钥,不需要创建封装密钥。

    Command:  genSymKey -t 31 -s 32 -sess -l import-wrapping-key

    参数

    说明

    -t

    密钥类型。取值:

    • 21:3DES

    • 31:AES

    -s

    密钥长度。单位为字节。

    • AES类型的密钥:取值为16、 24或32。

    • 3DES类型的密钥:取值为24。

    -sess

    密钥用于会话。表示它是临时使用,而非长期存储。

    -l

    密钥标签。

    预期输出:

      Cfm3GenerateSymmetricKey returned: 0x00 : HSM Return: SUCCESS
      Symmetric Key Created.  Key Handle: 37
      Cluster Status:
      Node id 0 status: 0x00000000 : HSM Return: SUCCESS
  3. 执行importPrivateKey命令,导入非对称密钥材料的私钥。

    Command:  importPrivateKey -f secp256k1_key.pem -l secp256k1_key-imported -w 37

    参数

    说明

    -f

    私钥的文件名。

    -l

    密钥标签。

    -w

    封装密钥的标识。即您执行genSymKey命令生成封装密钥时,输出结果中的Key Handle值。

    说明

    Key Handle值由密码机随机分配,您需要根据实际情况修改。

    预期输出:

    	BER encoded key length is 135
      Cfm3ImportWrapKey returned: 0x00 : HSM Return: SUCCESS
      Cfm3CreateUnwrapTemplate2 returned: 0x00 : HSM Return: SUCCESS
      Cfm3ImportUnWrapKey: 0x00 : HSM Return: SUCCESS
      Private Key Imported.  Key Handle: 36 
      Cluster Status:
      Node id 0 status: 0x00000000 : HSM Return: SUCCESS
  4. 执行importPubKey命令,导入非对称密钥材料的公钥。

    Command:  importPubKey -f secp256k1_key_pub.pem -l secp256k1_key_pub

    参数

    说明

    -f

    公钥的文件名。

    -l

    密钥标签。

    预期输出:

    	Cfm3CreatePublicKey returned: 0x00 : HSM Return: SUCCESS