本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在中使用可信密钥 AWS CloudHSM
AWS CloudHSM 支持可信密钥封装,以保护数据密钥免受内部威胁。本主题介绍如何创建可信密钥以确保数据安全。
了解可信密钥
可信密钥是用于包装其他密钥的密钥,管理员和加密员(CO, cryptographic officer)使用属性 CKA_TRUSTED
特意将其标识为可信。此外,管理员和加密员(CO, cryptographic officer)使用 CKA_UNWRAP_TEMPLATE
和相关属性来指定数据密钥在被可信密钥解包后可以执行的操作。由可信密钥解包的数据密钥还必须包含这些属性,解包操作才能成功,这有助于确保解包的数据密钥仅允许用于您想要的用途。
使用该 CKA_WRAP_WITH_TRUSTED
属性来标识要用可信密钥包装的所有数据密钥。这样做可以限制数据密钥,这样一来应用程序只能使用可信密钥来解包它们。一旦在数据密钥上设置了该属性,该属性就会变成只读,无法更改。有了这些属性后,应用程序只能使用您信任的密钥来解包您的数据密钥,而解包总是会产生带有限制这些密钥使用方式的属性的数据密钥。
可信密钥属性
以下属性允许您将密钥标记为可信,指定数据密钥只能使用可信密钥进行包装和解包以及控制数据密钥解包后可以执行的操作:
-
CKA_TRUSTED
:将此属性(除CKA_UNWRAP_TEMPLATE
外)应用于将包装数据密钥的密钥,以指定已完成必要调查的管理员或加密员(CO, crypto officer)并信任此密钥。只有管理员或 CO 可以设置CKA_TRUSTED
。加密用户(CU)拥有密钥,但只有 CO 可以设置其CKA_TRUSTED
属性。 -
CKA_WRAP_WITH_TRUSTED
:将此属性应用于可导出数据密钥,以指定只能用标记为CKA_TRUSTED
的密钥来包装此密钥。将CKA_WRAP_WITH_TRUSTED
设置为 true 后,该属性将变为只读,并且您无法更改或移除该属性。 -
CKA_UNWRAP_TEMPLATE
:将此属性应用于包装密钥(除CKA_TRUSTED
外),以指定服务必须自动将哪些属性名称和值应用于服务解包的数据密钥。应用程序提交密钥供解包时,也可以提供自己的解包模板。如果您指定了解包模板并且应用程序提供了自己的解包模板,则 HSM 会使用这两个模板将属性名称和值应用于密钥。但是,如果包装密钥的CKA_UNWRAP_TEMPLATE
中的值与应用程序在解包请求时提供的属性相冲突,则解包请求会失败。
了解有关属性的更多信息,请参阅以下主题:
如何使用可信密钥来包装数据密钥
要使用可信密钥包装数据密钥,必须完成三个基本步骤:
对于计划使用可信密钥包装的数据密钥,请将其
CKA_WRAP_WITH_TRUSTED
属性设置为“true”。对于计划用其包装数据密钥的可信密钥,请将其
CKA_TRUSTED
属性设置为“true”。使用可信密钥包装数据密钥。
步骤 1:将数据密钥的 CKA_WRAP_WITH_TRUSTED
设置为“true”
对于要包装的数据密钥,请选择以下选项之一,将密钥的 CKA_WRAP_WITH_TRUSTED
属性设置为“true”。这样做可以限制数据密钥,因此应用程序只能使用可信密钥来解包它数据密钥。
选项 1:如果生成新密钥,则设置 CKA_WRAP_WITH_TRUSTED
为“true”
使用 PKCS #11、JCE 或 CloudHSM CLI 生成密钥。了解更多详细信息,请参阅以下内容。
选项 2:如果使用现有密钥,请使用 CloudHSM CLI 将它的 CKA_WRAP_WITH_TRUSTED
设置为“true”
要将现有密钥的 CKA_WRAP_WITH_TRUSTED
属性设置为“true”,请执行以下步骤:
使用 login 命令以加密用户(CU)身份登录。
使用 key set-attribute 命令将密钥的
wrap-with-trusted
属性设置为“true”。aws-cloudhsm >
key set-attribute --filter attr.label=test_key --name wrap-with-trusted --value true
{ "error_code": 0, "data": { "message": "Attribute set successfully" } }
步骤 2:将可信密钥的 CKA_TRUSTED
设置为“true”
要使密钥成为可信密钥,必须将其 CKA_TRUSTED
属性设置为“true”。您可以使用 CloudHSM CLI 或 CloudHSM 管理实用程序 (CMU, CloudHSM Management Utility) 来执行此操作。
如果使用 CloudHSM CLI 来设置密钥的
CKA_TRUSTED
属性,请参阅 如何用 CloudHSM CLI 将密钥标记为可信。如果使用 CMU 来设置密钥的
CKA_TRUSTED
属性,请参阅 如何使用 CMU 将密钥标记为可信。
第 3 步。使用可信密钥包装数据密钥
要对步骤 1 中引用的数据密钥与您在步骤 2 中设置的可信密钥进行包装,请参阅以下链接以获取代码示例。每个都演示了如何包装密钥。
如何使用可信密钥解包数据密钥
要解包数据密钥,您需要一个已将 CKA_UNWRAP
设置为“true”的可信密钥。要成为这样的密钥,还必须满足以下标准:
密钥的
CKA_TRUSTED
属性必须设置为“true”。密钥必须使用
CKA_UNWRAP_TEMPLATE
和相关属性来指定数据密钥解包后可以执行的操作。例如,如果您希望未解包的密钥不可导出,则可以将CKA_EXPORTABLE = FALSE
设置为CKA_UNWRAP_TEMPLATE
的一部分。
注意
CKA_UNWRAP_TEMPLATE
仅在 PKCS #11 中可用。
当应用程序提交要解包的密钥时,该应用程序还可提供自己的解包模板。如果您指定了解包模板并且应用程序提供了自己的解包模板,则 HSM 会使用这两个模板将属性名称和值应用于密钥。但是,如果在解包请求期间,可信密钥的 CKA_UNWRAP_TEMPLATE
中的值与应用程序提供的属性冲突,则解包请求将失败。
要查看使用可信密钥解包数据密钥的示例,请参阅此 PKCS #11 示例