当用户使用KMS管理控制台创建自定义密钥时,KMS系统会自动为该自定义密钥生成密钥材料。
当用户希望使用自己的密钥材料时,可通过KMS管理控制台的“导入密钥”功能创建密钥材料为空的自定义密钥,并将自己的密钥材料导入该自定义密钥中。
注意事项
安全性
用户需要确保符合自己安全要求的随机源生成密钥材料。用户在使用导入密钥时,需要对自己密钥材料的安全性负责。请保存密钥材料的原始备份,以便在意外删除密钥材料时,能及时将备份的密钥材料重新导入KMS。
可用性与持久性
在将密钥材料导入KMS之前,用户需要确保密钥材料的可用性和持久性。
导入的密钥材料与通过KMS创建密钥时自动生成的密钥材料的区别,如下表所示。
密钥材料来源 | 区别 |
---|---|
导入的密钥 | 可以手动删除密钥材料,但不能删除该自定义密钥及其元数据。 在导入密钥材料时,可以设置密钥材料失效时间,密钥材料失效后,KMS将在24小时以内自动删除密钥材料,但不会删除该自定义密钥及其元数据。建议用户在本地密钥管理基础设施中安全地备份一份密钥材料,以便密钥材料失效或误删除时重新导入该密钥材料。 |
KMS创建的密钥 | 不能手动删除密钥材料。 不能设置密钥材料的失效时间。 |
关联性
当用户将密钥材料导入自定义密钥时,该自定义密钥与该密钥材料永久关联,不能将其他密钥材料导入该自定义密钥中。
唯一性
当用户使用导入的密钥加密数据时,加密后的数据必须使用加密时采用的自定义密钥(即自定义密钥的元数据及密钥材料与导入的密钥匹配)才能解密数据,否则解密会失败。
当用户希望使用自己的密钥材料,而不是KMS生成的密钥材料时,可通过密钥管理界面将自己的密钥材料导入到KMS,由KMS统一管理。
说明导入的密钥与通过密钥管理服务创建的自定义密钥一样支持启用、禁用、计划删除和取消删除等操作。
用户仅能导入256位对称密钥。
操作步骤
步骤 1 登录管理控制台。
步骤 2 单击管理控制台左上角,选择区域或项目。
步骤 3 单击“服务列表”,选择“安全> 数据加密服务”,默认进入“密钥管理”界面。
步骤 4 单击“导入密钥”,弹出“导入密钥”对话框。
步骤 5 在弹出的对话框中填写密钥参数。
- 别名:待创建密钥的别名。
说明输入字符支持数字、字母、“_”、“-”、“:”和“/”。
支持长度为1 ~ 255个字符。
- (可选)描述:可根据自己的需要为自定义密钥添加描述。
- 企业项目:该参数针对企业用户使用。
- 如果您是企业用户,且已创建企业项目,则请从下拉列表中为密钥选择需要绑定的企业项目,默认项目为“default”。
- 未开通企业管理的用户页面则没有“企业项目”参数项,无需进行配置。
步骤 6 (可选)用户可根据自己的需要为自定义密钥添加标签,输入“标签键”和“标签值”。
说明当用户在创建密钥时,没有为该自定义密钥添加标签。若用户需要为该自定义密钥添加标签,可单击该自定义密钥的别名,进入密钥详情页面,单击“标签”,为该自定义密钥添加标签。
同一个自定义密钥下,一个标签键只能对应一个标签值;不同的自定义密钥下可以使用相同的标签键。
用户最多可以给单个自定义密钥添加20个标签。
当同时添加多个标签,需要删除其中一个待添加的标签时,可单击该标签所在行的“删除”,删除标签。
步骤 7 单击“安全性与持久性”阅读并了解导入密钥的安全性和持久性。
步骤 8 勾选“我已经了解导入密钥的安全性和持久性”,创建密钥材料为空的自定义密钥。
步骤 9 单击“下一步”,进入“获取包装密钥和导入令牌”页面。
密钥包装算法说明
密钥包装算法 说明 设置 RSAES_OAEP_SHA_256 具有“SHA-256”哈希函数的OAEP的RSA加密算法。 请您根据自己的HSM功能选择加密算法。
如果您的HSM支持“RSAES_OAEP_SHA_256”加密算法,推荐使用“RSAES_OAEP_SHA_256”加密密钥材料。
如果您的HSM不支持“OAEP”选项,用户可以使用“RSAES_PKCS1_V1_5”加密密钥材料。
“RSAES_OAEP_SHA_1”加密算法已经不再安全,请谨慎选择。
RSAES_OAEP_SHA_1 具有“SHA-1”哈希函数的OAEP的RSA加密算法。 SM2_ENCRYPT 国密推荐的SM2椭圆曲线公钥密码算法。 请在支持国密的局点使用SM2加密算法。
说明当用户执行“导入密钥”操作,但未成功导入密钥材料便退出操作过程时,可在待导入密钥材料的自定义密钥所在行单击“导入密钥材料”,页面会弹出“导入密钥材料”对话框,用户可继续执行导入密钥材料的操作。
步骤 10 获取“包装密钥”和“导入令牌”,步骤详见本节下方内容“获取“包装密钥”和“导入令牌””,并加密密钥材料,详见本节下方内容“使用“包装密钥”加密密钥材料”。
步骤 11 单击“下一步”,进入“导入密钥材料”页面。
步骤 12 单击“下一步”,进入“导入密钥令牌”页面。根据以下图表设置参数。
导入密钥令牌参数说明
参数 | 操作说明 |
---|---|
密钥ID | 创建密钥时,随机生成的密钥ID。 |
密钥导入令牌 | 选择本章节中获取“包装密钥”和“导入令牌”的方法二调用API获取的导入令牌。 |
密钥材料失效模式 | 永不失效:导入的密钥材料永久不失效。 失效时间:用户可指定导入的密钥材料的失效时间,默认失效时间为24小时。密钥材料失效后,KMS会在24小时内自动删除密钥材料,删除后密钥将无法使用,且密钥状态变更为“等待导入”。 |
步骤 13 单击“确定”,页面右上角弹出“密钥导入成功”,则说明导入密钥成功。
注意密钥ID、导入的密钥材料和导入的令牌需要全部匹配,密钥材料才能导入成功,否则会导入失败。
用户可在密钥列表中查看到导入的密钥信息,导入密钥的默认状态为“启用”。
获取“包装密钥”和“导入令牌”
方法一:单击“下载”,下载的文件为包装密钥
- wrappingKey_ 密钥ID :即包装密钥,编码为二进制格式,用于加密密钥材料的包装密钥。
- 导入令牌:引导程序已自动传递导入令牌,无需下载,若中途退出引导程序,导入令牌将自动失效。
注意包装密钥将在24小时后失效,失效后将不能使用。如果包装密钥失效,请重新下载包装密钥。
引导程序将自动传递导入令牌,若创建密钥过程中,关闭或者退出设置则导入令牌失效。重新发起导入密钥材料操作时,导入令牌引导程序自动启动。
方法二:通过调用API接口的方式获取包装密钥和导入令牌
步骤 1 调用“get-parameters-for-import”接口,获取包装密钥和导入令牌。
- public_key:调用API接口返回的base64编码的包装密钥内容。
- import_token:调用API接口返回的base64编码的导入令牌内容。
- 以获取密钥ID为“43f1ffd7-18fb-4568-9575-602e009b7ee8”,加密算法为“RSAES_OAEP_SHA_256”的包装密钥和导入令牌为例。
- 请求样例
{
"key_id": "43f1ffd7-18fb-4568-9575-602e009b7ee8",
"wrapping_algorithm":"RSAES_OAEP_SHA_256"
}
- 响应样例
{
"key_id": "43f1ffd7-18fb-4568-9575-602e009b7ee8",
"public_key":" public key base64 encoded data ",
"import_token":" import token base64 encoded data ",
"expiration_time":1501578672
}
步骤 2 保存包装密钥,包装密钥需要按照以下步骤转换格式。使用转换格式后的包装密钥加密的密钥材料才能成功导入管理控制台。
- 复制包装密钥“public_key”的内容,粘贴到“.txt”文件中,并保存为“PublicKey.b64”。
- 使用OpenSSL,执行以下命令,对“PublicKey.b64”文件内容进行base64转码,生成二进制数据,并将转码后的文件保存为“PublicKey.bin”。
openssl enc -d -base64 -A -in PublicKey.b64 -out PublicKey.bin
步骤 3 保存导入令牌,复制导入令牌“import_token”的内容,粘贴到“.txt”文件中,并保存为“ImportToken.b64”。
使用“包装密钥”加密密钥材料
说明执行完此步骤后可获得以下文件:
对称密钥场景:EncryptedKeyMaterial.bin密钥材料
非对称密钥场景:EncryptedKeyMaterial.bin临时密钥材料和out_rsa_private_key.der私钥密文
方法一:使用下载的包装密钥在自己的HSM中加密密钥材料。
方法二:使用OpenSSL生成密钥材料,并用下载的“包装密钥”对密钥材料进行加密。
说明若用户需要使用openssl pkeyutl命令,OpenSSL需要是1.0.2及以上版本。
步骤 1 生成密钥材料(256位对称密钥),并将生成的密钥材料以“PlaintextKeyMaterial.bin”命名保存。
配套算法为AES256对称密钥时,在已安装OpenSSL工具的客户端上,执行以下命令。
openssl rand -out PlaintextKeyMaterial.bin 32
配套算法为RSA、ECC非对称密钥时,在已安装OpenSSL工具的客户端上,执行以下命令。
- 生成16进制AES256密钥:
openssl rand -out 0xPlaintextKeyMaterial.bin -hex 32
- 将16进制AES256密钥转换成二进制格式:
cat 0xPlaintextKeyMaterial.bin | xxd -r -ps > PlaintextKeyMaterial.bin
步骤 2 使用下载的“包装密钥”加密密钥材料,并将加密后的密钥材料按“EncryptedKeyMaterial.bin”命名保存。
若“包装密钥”由控制台下载,以下命令中的PublicKey.bin参数请以下载的包装密钥名称wrappingKey_密钥ID进行替换。
使用下载的包装密钥加密生成的密钥材料
包装密钥算法 | 加密生成的密钥材料 |
---|---|
RSAES_OAEP_SHA_256 | openssl pkeyutl -inPlaintextKeyMaterial.bin -inkeyPublicKey.bin -outEncryptedKeyMaterial.bin -keyform der -pubin -encrypt -pkeyopt rsa_padding_mode:oaep -pkeyopt rsa_oaep_md:sha256 |
RSAES_OAEP_SHA_1 | openssl pkeyutl -inPlaintextKeyMaterial.bin -inkeyPublicKey.bin -outEncryptedKeyMaterial.bin -keyform der -pubin -encrypt -pkeyopt rsa_padding_mode:oaep -pkeyopt rsa_oaep_md:sha1 |
SM2_ENCRYPT | gmssl pkeyutl -encrypt -pkeyopt ec_scheme:sm2 -pkeyopt ec_encrypt_param:sm3 -inPlaintextKeyMaterial.bin -pubin -inkeyPublicKey.bin -keyform der-out EncryptedKeyMaterial.bin |
步骤 3 (可选)对于导入非对称密钥的场景,需要生成非对称私钥,并使用临时密钥材料(“ EncryptedKeyMaterial.bin”)对私钥进行加密,加密后的文件作为“私钥密文”导入。
执行以下命令(以配套算法为“RSA4096算法”为例):
- 生成私钥
openssl genrsa -out rsa_private_key.pem 4096
- 转换成der格式
openssl pkcs8 -topk8 -inform PEM -outform DER -in rsa_private_key.pem -out rsa_private_key.der -nocrypt
- 使用临时密钥材料对私钥进行加密
openssl enc -id-aes256-wrap-pad -K $(cat 0xPlaintextKeyMaterial.bin) -iv A65959A6 -in rsa_private_key.der -out out_rsa_private_key.der
说明默认情况下,OpenSSL命令行工具中未启用包装密码算法-id-aes256-wrap-pad。您可以下载并安装最新版本的OpenSSL,然后对其进行修补,以完成导入非对称密钥所需的信封包装。