使用 JCE 提取密钥 - AWS CloudHSM

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

使用 JCE 提取密钥

Java 密码学扩展 (JCE) 使用的架构允许插入不同的加密实现。 AWS CloudHSM 发布了一个这样的 JCE 提供商,它可以将加密操作卸载到 HSM。为了让大多数其他 JCE 提供程序使用存储在 AWS CloudHSM 中的密钥,他们必须将您在 HSM 中的密钥字节以明文形式提取到您的计算机内存中以供他们使用。HSM 通常只允许将密钥提取为包装对象,而不允许以明文形式提取。但是,为了支持提供商间集成用例, AWS CloudHSM 允许使用选择加入配置选项来启用密钥字节的提取。

重要

AWS CloudHSM 无论何时指定 AWS CloudHSM 提供程序或 AWS CloudHSM 使用密钥对象,JCE 都会将操作卸载到任何时候。如果您希望在 HSM 内部进行操作,则无需以明文方式提取密钥。只有当您的应用程序由于第三方库或 JCE 提供程序的限制而无法使用安全机制(例如包装和解包密钥)时,才需要以明文提取密钥。

默认情况下, AWS CloudHSM JCE 提供程序允许提取公钥,以便与外部 JCE 提供程序配合使用。始终允许使用以下方法:

方法 格式 (getEncoded)
EcPublicKey getEncoded() X.509
getW() 不适用
RSA PublicKey getEncoded() X.509
getPublicExponent() 不适用
CloudHsmRsaPrivateCrtKey getPublicExponent() 不适用

默认情况下, AWS CloudHSM JCE Provider 不允许提取私钥或钥的钥字节。如果您的用例需要,则可以在以下条件下启用私有密钥或机密密钥的明文密钥字节提取功能:

  1. 私有密钥和机密密钥的 EXTRACTABLE 属性设置为 true

    • 默认情况下,私有密钥和机密密钥的 EXTRACTABLE 属性设置为 trueEXTRACTABLE 密钥是允许从 HSM 中导出的密钥。有关更多信息,请参阅《客户端软件开发工具包 5 支持的 Java 属性》。

  2. 私有密钥和机密密钥的 WRAP_WITH_TRUSTED 属性设置为 false

    • getEncodedgetPrivateExponentgetS 不能与无法以明文导出的私有密钥一起使用。WRAP_WITH_TRUSTED 不允许您的私有密钥以明文从 HSM 中导出。有关更多信息,请参阅使用可信密钥控制密钥解包

允许 AWS CloudHSM JCE 提供者从中提取私钥机密 AWS CloudHSM

重要

此配置更改允许从 HSM 集群中以明文提取所有 EXTRACTABLE 密钥字节。为了提高安全性,您应该考虑使用密钥包装方法将密钥安全地从 HSM 中提取出来。这样可以防止无意中从 HSM 中提取密钥字节。

  1. 使用以下命令从 JCE 中提取您的私有密钥或机密密钥:

    Linux
    $ /opt/cloudhsm/bin/configure-jce --enable-clear-key-extraction-in-software
    Windows
    C:\Program Files\Amazon\CloudHSM\> .\configure-jce.exe --enable-clear-key-extraction-in-software
  2. 一旦启用了明文密钥提取功能,就会启用以下方法将私有密钥提取到内存中。

    方法 格式 (getEncoded)
    getEncoded() RAW
    欧共体 PrivateKey getEncoded() PKCS#8
    getS() 不适用
    RSA PrivateCrtKey getEncoded() X.509
    getPrivateExponent() 不适用
    getPrimeP() 不适用
    getPrimeQ() 不适用
    getPrimeExponentP () 不适用
    getPrimeExponentQ () 不适用
    getCrtCoefficient() 不适用

如果要恢复默认行为并且不允许 JCE 以明文导出密钥,请运行以下命令:

Linux
$ /opt/cloudhsm/bin/configure-jce --disable-clear-key-extraction-in-software
Windows
C:\Program Files\Amazon\CloudHSM\> .\configure-jce.exe --disable-clear-key-extraction-in-software