

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

# AES 密钥封装进去 AWS CloudHSM
<a name="manage-aes-key-wrapping"></a>

本主题介绍了 AES 密钥封装的选项 AWS CloudHSM。AES 密钥包装使用 AES 密钥（包装密钥）来包装任何类型的其他密钥（目标密钥）。您可以使用密钥包装来保护存储的密钥或通过不安全的网络传输密钥。

**Topics**
+ [支持的算法](#supported-types)
+ [使用 AES 密钥包装 AWS CloudHSM](#use-aes-key-wrap)

## 支持的算法
<a name="supported-types"></a>

AWS CloudHSM 为 AES 密钥包装提供了三种选项，每个选项都基于目标密钥在封装之前的填充方式。在调用密钥包装时，将根据您使用的算法自动完成填充。下表列出了支持的算法和相关的详细信息，以帮助您为应用程序选择适当的包装机制。


| AES 密钥包装算法 |  规范 | 支持的目标密钥类型 | 填充方案 | AWS CloudHSM 客户机可用性  | 
| --- | --- | --- | --- | --- | 
| 零填充的 AES 密钥包装  | [RFC 5649](https://tools.ietf.org/html/rfc5649) 和 [SP 800–38F](https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-38F.pdf) | 全部 | 如有必要，可在密钥位后添加零来阻止对齐 | SDK 3.1 及更高版本 | 
| 无填充的 AES 密钥包装 | [RFC 3394](https://tools.ietf.org/html/rfc3394) 和 [SP 800–38F](https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-38F.pdf) | 块对齐的密钥，例如 AES 和 3DES  | 无 | SDK 3.1 及更高版本 | 
| 带 PKCS \$15 填充的 AES 密钥包装 | 无 | 全部 |  根据 PKCS \$15 填充方案添加至少 8 个字节来阻止对齐   | 全部 | 

要了解如何在应用程序中使用上表中的 AES 密钥包装算法，请参阅 [在 AWS CloudHSM中使用 AES 密钥包装](#use-aes-key-wrap)。

### 了解 AES 密钥包装中的初始化向量
<a name="understand-padding-iv"></a>

在包装之前，CloudHSM 会将初始化向量 (IV) 附加到目标密钥来确保数据完整。每种密钥包装算法对允许的 IV 类型都施加了特定的限制。要设置 IV AWS CloudHSM，有两个选项：
+ 隐式：将 IV 设置为 NULL，CloudHSM 使用该算法的默认值进行包装和解开包装操作（推荐）
+ 显式：通过将默认的 IV 值传递给密钥包装函数来设置 IV 

**重要**  
您必须了解应用程序中使用的 IV。要对密钥解开包装，您必须提供用于包装密钥的同一 IV。如果您使用隐式 IV 来包装，请使用隐式 IV 来解开包装。对于隐式 IV，CloudHSM 将使用默认值来解开包装。

下表描述了包装算法指定的允许值。 IVs


****  

| AES 密钥包装算法 | 隐式 IV | 显式 IV | 
| --- | --- | --- | 
| 零填充的 AES 密钥包装  | 必需 默认值：（按规格在内部计算的 IV） | 不允许 | 
| 无填充的 AES 密钥包装 | 允许（推荐） 默认值：`0xA6A6A6A6A6A6A6A6` | 允许 仅接受此值：`0xA6A6A6A6A6A6A6A6` | 
| 带 PKCS \$15 填充的 AES 密钥包装 | 允许（推荐） 默认值：`0xA6A6A6A6A6A6A6A6` | 允许 仅接受此值：`0xA6A6A6A6A6A6A6A6` | 

## 使用 AES 密钥包装 AWS CloudHSM
<a name="use-aes-key-wrap"></a>

 对密钥进行包装和解开包装，如下所示：
+ 在 [PCKS \$111 库](pkcs11-library.md)中，为 `C_WrapKey` 和 `C_UnWrapKey` 函数选择适当的机制，如下表所示。
+ 在 [JCE 提供程序](java-library.md)中，选择适当的算法、模式和填充组合，实施密码方法 `Cipher.WRAP_MODE` 和 `Cipher.UNWRAP_MODE`，如下表所示。
+ 在 [CloudHSM CLI](cloudhsm_cli.md) 中，从支持的 [CloudHSM CLI 中的 key wrap 命令](cloudhsm_cli-key-wrap.md) 和 [CloudHSM CLI 中的 key unwrap 命令](cloudhsm_cli-key-unwrap.md) 算法列表中选择适当的算法，如下表所示。
+ 在 [key\$1mgmt\$1util (KMU)](key_mgmt_util.md) 中，将命令 [使用 KMU 导出 AWS CloudHSM 密钥](key_mgmt_util-wrapKey.md) 和 [使用 AWS CloudHSM KMU 解开密钥](key_mgmt_util-unwrapKey.md) 与适当的 m 值结合使用，如下表所示。


****  

| AES 密钥包装算法 | PKCS \$111 机制 | Java 方法 | CloudHSM CLI 子命令 | 密钥管理实用程序（KMU）参数 | 
| --- | --- | --- | --- | --- | 
| 零填充的 AES 密钥包装  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/manage-aes-key-wrapping.html)  | AESWrap/ECB/ZeroPadding | aes-zero-pad | m = 6 | 
| 无填充的 AES 密钥包装 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/manage-aes-key-wrapping.html)  | AESWrap/ECB/NoPadding | aes-no-pad | m = 5 | 
| 带 PKCS \$15 填充的 AES 密钥包装  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/cloudhsm/latest/userguide/manage-aes-key-wrapping.html)  | AESWrap/ECB/PKCS5Padding | aes-pkcs5-pad | m = 4 | 