AWS CloudHSM 中的 AES 密钥包装
本主题介绍了 AWS CloudHSM 中的 AES 密钥包装的选项。AES 密钥包装使用 AES 密钥(包装密钥)来包装任何类型的其他密钥(目标密钥)。您可以使用密钥包装来保护存储的密钥或通过不安全的网络传输密钥。
支持的算法
AWS CloudHSM 提供了适用于 AES 密钥包装的三个选项,每个选项都取决于目标密钥在被包装前的填充方式。在调用密钥包装时,将根据您使用的算法自动完成填充。下表列出了支持的算法和相关的详细信息,以帮助您为应用程序选择适当的包装机制。
AES 密钥包装算法 | 规范 | 支持的目标密钥类型 | 填充方案 | AWS CloudHSM 客户端可用性 |
---|---|---|---|---|
零填充的 AES 密钥包装 | RFC 5649 |
全部 | 如有必要,可在密钥位后添加零来阻止对齐 | SDK 3.1 及更高版本 |
无填充的 AES 密钥包装 | RFC 3394 |
块对齐的密钥,例如 AES 和 3DES | 无 | SDK 3.1 及更高版本 |
带 PKCS #5 填充的 AES 密钥包装 | 无 | 全部 |
根据 PKCS #5 填充方案添加至少 8 个字节来阻止对齐 |
全部 |
要了解如何在应用程序中使用上表中的 AES 密钥包装算法,请参阅 在 AWS CloudHSM 中使用 AES 密钥包装。
了解 AES 密钥包装中的初始化向量
在包装之前,CloudHSM 会将初始化向量 (IV) 附加到目标密钥来确保数据完整。每种密钥包装算法对允许的 IV 类型都施加了特定的限制。要在 AWS CloudHSM 中设置 IV,您有两种选择:
-
隐式:将 IV 设置为 NULL,CloudHSM 使用该算法的默认值进行包装和解开包装操作(推荐)
-
显式:通过将默认的 IV 值传递给密钥包装函数来设置 IV
重要
您必须了解应用程序中使用的 IV。要对密钥解开包装,您必须提供用于包装密钥的同一 IV。如果您使用隐式 IV 来包装,请使用隐式 IV 来解开包装。对于隐式 IV,CloudHSM 将使用默认值来解开包装。
下表介绍了包装算法指定的 IV 所允许的值。
AES 密钥包装算法 | 隐式 IV | 显式 IV |
---|---|---|
零填充的 AES 密钥包装 | 必需 默认值:(按规格在内部计算的 IV) |
不允许 |
无填充的 AES 密钥包装 | 允许(推荐) 默认值: |
已允许 仅接受此值: |
带 PKCS #5 填充的 AES 密钥包装 | 允许(推荐) 默认值: |
已允许 仅接受此值: |
在 AWS CloudHSM 中使用 AES 密钥包装
对密钥进行包装和解开包装,如下所示:
-
在 PCKS #11 库中,为
C_WrapKey
和C_UnWrapKey
函数选择适当的机制,如下表所示。 -
在 JCE 提供程序中,选择适当的算法、模式和填充组合,实施密码方法
Cipher.WRAP_MODE
和Cipher.UNWRAP_MODE
,如下表所示。 -
在 CloudHSM CLI 中,从支持的 CloudHSM CLI 中的 key wrap 命令 和 CloudHSM CLI 中的 key unwrap 命令 算法列表中选择适当的算法,如下表所示。
-
在 key_mgmt_util (KMU) 中,将命令 使用 KMU 导出 AWS CloudHSM 密钥 和 使用 KMU 解包 AWS CloudHSM 密钥 与适当的 m 值结合使用,如下表所示。
AES 密钥包装算法 | PKCS #11 机制 | Java 方法 | CloudHSM CLI 子命令 | 密钥管理实用程序(KMU)参数 |
---|---|---|---|---|
零填充的 AES 密钥包装 |
|
AESWrap/ECB/ZeroPadding |
aes-zero-pad | m = 6 |
无填充的 AES 密钥包装 |
|
AESWrap/ECB/NoPadding |
aes-no-pad | m = 5 |
带 PKCS #5 填充的 AES 密钥包装 |
|
AESWrap/ECB/PKCS5Padding |
aes-pkcs5-pad | m = 4 |