AWS CloudHSM 客户端 SDK 5 支持的 Java 密钥属性 - AWS CloudHSM

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

AWS CloudHSM 客户端 SDK 5 支持的 Java 密钥属性

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

  • 密钥生成

  • 密钥导入

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

了解属性

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

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

支持的属性

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

属性 默认值 注意
对称密钥 密钥对中的公有密钥 密钥对中的私有密钥
DECRYPT TRUE TRUE True 表示可使用密钥对任何缓冲区进行解密。FALSE对于设置为 true 的密钥,通常将其设置WRAP为。
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 表示用户在通过身份验证之前将无法访问密钥。为清楚起见,即使此属性设置为,用户在通过身份验证 AWS CloudHSM 之前也无法访问任何密钥FALSE。
SIGN TRUE TRUE True 表示可使用密钥对消息摘要进行签名。FALSE对于公钥和您已存档的私钥,通常将其设置为。
SIZE 定义密钥大小的属性。有关支持的密钥大小的更多详细信息,请参阅客户端 SDK 5 支持的机制
TOKEN FALSE FALSE FALSE

永久密钥,可在集群HSMs中的所有密钥中复制并包含在备份中。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

得到 (keyAttribute)

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

pu@@ t (keyAttribute, value)

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

putAll(keyAttributesMap)

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

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

移除 (keyAttribute)

注意

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

设置密钥对的属性

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

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