AWS CloudHSM Client SDK 5 支持的 Java 密钥属性
本主题提供有关 AWS CloudHSM Client SDK 5 支持的 Java 密钥属性的信息。本主题介绍了如何使用 JCE 提供程序的专有扩展来设置密钥属性。使用此扩展可在以下操作期间设置受支持的密钥属性及其值:
密钥生成
密钥导入
有关如何使用密钥属性的示例,请参阅 Client SDK 5 的适用于 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 表示用户在通过身份验证之前将无法访问密钥。为了清楚起见,用户在通过身份验证之前将无法访问 AWS CloudHSM 上的任何密钥,即使此属性设置为 FALSE 也是如此。 |
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()
填充公有密钥和私有密钥对的多个密钥属性的值,并将密钥对属性映射作为其参数。