本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
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()
填充公有密钥和私有密钥对的多个密钥属性的值,并将密钥对属性映射作为其参数。