

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 如何使用可信密钥来封装数据密钥 AWS CloudHSM
<a name="wrap_keys_using_trusted"></a>

要使用可信密钥封装数据密钥 AWS CloudHSM，必须完成三个基本步骤：

1. 对于计划使用可信密钥包装的数据密钥，请将其 `CKA_WRAP_WITH_TRUSTED` 属性设置为“true”。

1. 对于计划用其包装数据密钥的可信密钥，请将其 `CKA_TRUSTED` 属性设置为“true”。

1. 使用可信密钥包装数据密钥。

## 步骤 1：将数据密钥的 `CKA_WRAP_WITH_TRUSTED` 设置为“true”
<a name="w2aac15c19c11b7"></a>

对于要包装的数据密钥，请选择以下选项之一，将密钥的 `CKA_WRAP_WITH_TRUSTED` 属性设置为“true”。这样做可以限制数据密钥，因此应用程序只能使用可信密钥来解包它数据密钥。

### 选项 1：如果生成新密钥，则设置 `CKA_WRAP_WITH_TRUSTED` 为“true”
<a name="w2aac15c19c11b7b5"></a>

使用 [PKCS \$111](pkcs11-library.md)、[JCE](java-library.md) 或 [CloudHSM CLI](cloudhsm_cli.md) 生成密钥。了解更多详细信息，请参阅以下内容。

------
#### [ PKCS \$111 ]

要使用 PKCS \$111 生成密钥，您需要将密钥的 `CKA_WRAP_WITH_TRUSTED` 属性设置为“true”。如以下示例所示，通过在密钥的 `CK_ATTRIBUTE template` 中包含此属性，然后将该属性设置为“true”来执行此操作：

```
CK_BYTE_PTR label = "test_key";
CK_ATTRIBUTE template[] = {
        {CKA_WRAP_WITH_TRUSTED, &true_val,         sizeof(CK_BBOOL)},
        {CKA_LABEL,             label,             strlen(label)},
        ...
};
```

有关更多信息，请参阅[我们演示使用 PKCS \$111 生成密钥的公开示例](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/tree/master/src/generate)。

------
#### [ JCE ]

要使用 JCE 生成密钥，您需要将密钥的 `WRAP_WITH_TRUSTED` 属性设置为“true”。如以下示例所示，通过在密钥的 `KeyAttributesMap` 中包含此属性，然后将该属性设置为“true”来执行此操作：

```
final String label = "test_key";
final KeyAttributesMap keySpec = new KeyAttributesMap();
keySpec.put(KeyAttribute.WRAP_WITH_TRUSTED, true);
keySpec.put(KeyAttribute.LABEL, label);
...
```

有关更多信息，请参阅[我们演示使用 JCE 生成密钥的公开示例](https://docs.aws.amazon.com/cloudhsm/latest/userguide/java-samples.html#java-samples-code_5)。

------
#### [ CloudHSM CLI ]

要使用 CloudHSM CLI 生成密钥，您需要将密钥的 `wrap-with-trusted` 属性设置为“true”。方法是在密钥生成命令的相应参数中加入 `wrap-with-trusted=true`：
+ 对于对称密钥，请在 `attributes` 参数中添加 `wrap-with-trusted`。
+ 对于公有密钥，请在 `public-attributes` 参数中添加 `wrap-with-trusted`。
+ 对于私有密钥，请在 `private-attributes` 参数中添加 `wrap-with-trusted`。

有关密钥对生成的更多信息，请参阅 [CloudHSM CLI 中的 generate-asymmetric-pair类别](cloudhsm_cli-key-generate-asymmetric-pair.md)。

有关生成对称密钥的更多信息，请参阅 [CloudHSM CLI 中的 generate-symmetric 类别](cloudhsm_cli-key-generate-symmetric.md)。

------

### 选项 2：如果使用现有密钥，请使用 CloudHSM CLI 将它的 `CKA_WRAP_WITH_TRUSTED` 设置为“true”
<a name="w2aac15c19c11b7b7"></a>

要将现有密钥的 `CKA_WRAP_WITH_TRUSTED` 属性设置为“true”，请执行以下步骤：

1. 使用 [使用 CloudHSM CLI 登录 HSM](cloudhsm_cli-login.md) 命令以加密用户（CU）身份登录。

1. 使用 [使用 CloudHSM CLI 设置密钥的属性](cloudhsm_cli-key-set-attribute.md) 命令将密钥的 `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”
<a name="w2aac15c19c11b9"></a>

要使密钥成为可信密钥，必须将其 `CKA_TRUSTED` 属性设置为“true”。您可以使用 CloudHSM CLI 或 CloudHSM 管理实用程序 (CMU, CloudHSM Management Utility) 来执行此操作。
+ 如果使用 CloudHSM CLI 来设置密钥的 `CKA_TRUSTED` 属性，请参阅 [使用 CloudHSM CLI 将密钥标记为可信](manage-keys-cloudhsm-cli-trusted.md)。
+ 如果使用 CMU 来设置密钥的 `CKA_TRUSTED` 属性，请参阅 [如何使用 AWS CloudHSM 管理实用程序将密钥标记为可信](cloudhsm_using_trusted_keys_control_key_wrap.md)。

## 步骤 3：使用可信密钥包装数据密钥
<a name="w2aac15c19c11c11"></a>

要对步骤 1 中引用的数据密钥与您在步骤 2 中设置的可信密钥进行包装，请参阅以下链接以获取代码示例。每个都演示了如何包装密钥。
+ [AWS CloudHSM PKCS \$111 示例](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/tree/master/src/wrapping)
+ [AWS CloudHSM JCE 示例](https://github.com/aws-samples/aws-cloudhsm-jce-examples/tree/sdk5/src/main/java/com/amazonaws/cloudhsm/examples)