受支持的 Java 密钥属性 - AWS CloudHSM

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

受支持的 Java 密钥属性

本主题提供有关客户端 SDK 5 支持的 Java 密钥属性的信息。本主题介绍了如何使用 JCE 提供程序的专有扩展来设置密钥属性。使用此扩展可在以下操作期间设置受支持的密钥属性及其值:

  • 密钥生成

  • 密钥导入

有关如何使用密钥属性的示例,请参阅 适用于 Java 的 AWS CloudHSM 软件库的代码示例

了解属性

可以使用密钥属性指定允许对密钥对象(包括公有密钥或私有密钥)执行哪些操作。可以在创建密钥对象的过程中定义密钥属性和值。

Java Cryptography Extension (JCE) 不指定如何设置密钥属性值,因此,默认情况下允许执行大多数操作。相比之下,PKCS #11 标准定义了一组具有更受限的默认值的综合属性。从 JCE 提供程序 3.1 开始, AWS CloudHSM 提供了一个专有扩展,允许您为常用属性设置更严格的值。

支持的属性

可以为下表中列出的属性设置值。作为最佳实践,仅为应受限的属性设置值。如果未指定值,则 AWS CloudHSM 使用下表中指定的默认值。默认值列中的空单元格表示未向该属性分配特定的默认值。

属性 默认值 注意
对称密钥 密钥对中的公有密钥 密钥对中的私有密钥
DECRYPT TRUE TRUE True 表示可使用密钥对任何缓冲区进行解密。对于其 WRAP 设置为 true 的密钥,通常将此项设置为 FALSE。
DERIVE 允许使用密钥派生其他密钥。
ENCRYPT TRUE TRUE True 表示可使用密钥对任何缓冲区进行加密。
EXTRACTABLE TRUE TRUE True 表示可从 HSM 中导出此密钥。
ID 用于标识密钥的用户定义值。
KEY_TYPE 用于识别密钥的类型(AES 密钥、DESede 密钥、通用机密密钥、EC 密钥 或 RSA 密钥)。
LABEL 便于您识别 HSM 上的密钥的用户定义字符串。要遵循最佳实践,请为每个密钥使用唯一的标签,以便日后查找。
LOCAL 表示 HSM 生成的密钥。
OBJECT_CLASS 用于标识密钥的对象类(SecretKey、 PublicKey 或 PrivateKey)。
PRIVATE TRUE TRUE TRUE True 表示用户在通过身份验证之前将无法访问密钥。为清楚起见,即使此属性设置为 FALSE,用户在通过身份验证 AWS CloudHSM 之前也无法访问任何密钥。
SIGN TRUE TRUE True 表示可使用密钥对消息摘要进行签名。对于已存档的公有密钥和私有密钥,此项通常设置为 FALSE。
SIZE 定义密钥大小的属性。有关支持的密钥大小的更多详细信息,请参阅客户端开发工具包 5 支持的机制
TOKEN FALSE FALSE FALSE

跨集群中的所有 HSM 复制并包含在备份中的永久密钥。TOKEN = FALSE 表示一个临时密钥,当与 HSM 的连接中断或注销时会自动清除。

UNWRAP TRUE TRUE True 表示可使用密钥解开包装(导入)另一个密钥。
VERIFY TRUE TRUE True 表示可使用密钥验证签名。对于私有密钥,此项通常设置为 FALSE。
WRAP TRUE TRUE True 表示可使用密钥包装另一个密钥。对于私有密钥,通常将此项设置为 FALSE。
WRAP_WITH_TRUSTED FALSE FALSE True 表示只有将 TRUSTED 属性设置为 true 的密钥才能包装和解包的密钥。将密钥 WRAP_WITH_TRUSTED 设置为 true 后,该属性即为只读且不能设置为 false。要了解信任包装,请参阅使用信任的密钥控制密钥解包
注意

您将获得对 PKCS #11 库中属性的更广泛支持。有关更多信息,请参阅支持的 PKCS #11 属性

设置密钥的属性

KeyAttributesMap 是一个类似于 Java Map 的对象,可以使用它设置密钥对象的属性值。KeyAttributesMap 函数的方法与用于 Java 映射操作的方法类似。

可以通过下面两种方式为属性设置自定义值:

  • 使用下表中列出的方法

  • 使用本文档后面演示的生成器模式

属性映射对象支持通过以下方法来设置属性:

操作 返回值 KeyAttributesMap 方法
获取现有密钥的密钥属性值 对象(包含值)或 null

get(keyAttribute)

填充一个密钥属性的值 与密钥属性关联的上一个值,或 null(如果没有密钥属性的映射)

put(keyAttribute, value)

填充多个密钥属性的值 不适用

putall () keyAttributesMap

从属性映射中删除密钥/值对

与密钥属性关联的上一个值,或 null(如果没有密钥属性的映射)

remove(keyAttribute)

注意

未明确指定的任何属性都将设置为 支持的属性 中前面的表中列出的默认值。

设置密钥对的属性

使用 Java 类 KeyPairAttributesMap 处理密钥对的密钥属性。KeyPairAttributesMap 封装了两个 KeyAttributesMap 对象;一个用于公有密钥,另一个用于私有密钥。

要分别为公有密钥和私有密钥设置单个属性,您可以对该密钥的相应 KeyAttributes 映射对象使用 put() 方法。使用 getPublic() 方法可检索公有密钥的属性映射,使用 getPrivate() 可检索私有密钥的属性映射。使用 putAll() 填充公有密钥和私有密钥对的多个密钥属性的值,并将密钥对属性映射作为其参数。