的已知问题 JCE SDK AWS CloudHSM - AWS CloudHSM

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

的已知问题 JCE SDK AWS CloudHSM

以下问题会影响 fo JCE SDK r AWS CloudHSM。

问题:当使用非对称密钥对时,即使未显式创建或导入密钥,也会看到占用密钥容量

  • 影响:此问题可能会HSMs导致您的密钥空间意外耗尽,当您的应用程序使用标准JCE密钥对象而不是对象进行加密操作时,就会发生此问题。CaviumKey使用标准JCE密钥对象时,会将该密钥HSM作为会话密钥CaviumProvider隐式导入到,并且在应用程序退出之前不会删除此密钥。因此,密钥会在应用程序运行时积累,并可能HSMs导致您的可用密钥空间耗尽,从而冻结您的应用程序。

  • 解决办法:使用CaviumSignature类、CaviumCipher类、CaviumMac类或CaviumKeyAgreement类时,应将密钥作为CaviumKey而不是标准JCE密钥对象提供。

    您可以使用 ImportKey 类将普通密钥手动转换为 CaviumKey,并在之后可在操作完成后手动删除该密钥。

  • 解决状态:我们正在更新 CaviumProvider 以正确管理隐式导入。当该修复可用时,将在版本历史记录页面中公布。

问题:JCE KeyStore 是只读的

  • 影响:您现在无法在JCE密钥库HSM中存储不支持的对象类型。具体来说,您不能在密钥存储中存储证书。这会阻止与 jarsigner 之类的工具的互操作性,这些工具预期在密钥库中查找证书。

  • 解决方法:您可以修改您的代码,以从本地文件或 S3 存储桶位置中加载证书,而不是从密钥存储中加载。

  • 解决状态:我们正在增加在密钥存储中存储证书的支持。当该功能可用时,将在版本历史记录页面中公布。

问题:AES-GCM 加密的缓冲区不能超过 16,000 字节

多部分 AES-不支持GCM加密。

  • 影响:您不能使用 AES-GCM 来加密大于 16,000 字节的数据。

  • 解决办法:您可以使用其他机制,例如 AES-CBC,也可以将数据分成几部分并单独加密每个部分。如果您拆分了数据,则必须管理已拆分的密文及其解密内容。由于FIPS要求在上生成 AES-的初始化向量 (IV)HSM,GCM因此 AES-GCM-encrypted每条数据的 IV 将有所不同。

  • 解析状态:如果数据缓冲区太大,我们将修复为显式失败。SDK我们正在评估支持较大的缓冲区而不依靠多部分加密的替代方法。将在 AWS CloudHSM 论坛和版本历史记录页面中公布更新。

问题:椭圆曲线 Diffie-Hellman () ECDH 密钥派生部分在 HSM

您的 EC 私钥始终保持HSM在内,但密钥派生过程是分多个步骤执行的。因此,客户端上可以提供每个步骤的中间结果。Java 代码示例中提供了ECDH密钥派生示例

  • 影响:客户端 SDK 3 为添加了ECDH功能JCE。当你使用KeyAgreement类派生 a 时 SecretKey,它首先在客户端上可用,然后被导入到HSM。密钥句柄随后会返回到您的应用程序。

  • 解决办法:如果您在中实现SSL/TLSOffload AWS CloudHSM,则此限制可能不是问题。如果您的应用程序要求密钥始终保持在FIPS边界内,请考虑使用不依赖ECDH密钥派生的替代协议。

  • 解析状态:我们正在开发完全在内执行ECDH密钥派生的HSM选项。如果可用,我们将在版本历史记录页面上公布更新的实现。

问题: KeyGenerator 并且 KeyAttribute 错误地将密钥大小参数解释为字节数而不是位

使用KeyGenerator 类init函数或AWS CloudHSM KeyAttribute 枚举SIZE属性生成密钥时,API错误地期望参数为密钥字节数,而应改为密钥位数。

  • 影响:客户端SDK版本 5.4.0 到 5.4.2 错误地期望将密钥大小提供给指定的字节APIs。

  • 解决办法:如果使用客户端SDK版本 5.4.0 到 5.4.2,则在使用 KeyGenerator 类或 KeyAttribute 枚举使用 AWS CloudHSM JCE提供程序生成密钥之前,请将密钥大小从位转换为字节。

  • 解析状态:将您的客户端SDK版本升级到 5.5.0 或更高版本,其中包括在使用 KeyGenerator 类或 KeyAttribute 枚举生成密钥时正确预期以位为单位的密钥大小的修复程序。

问题:客户端 SDK 5 发出警告 “发生了非法的反射访问操作”

在 Java 11 中使用客户端 SDK 5 时,Cloud HSM 会抛出以下 Java 警告:

``` WARNING: An illegal reflective access operation has occurred WARNING: Illegal reflective access by com.amazonaws.cloudhsm.jce.provider.CloudHsmKeyStore (file:/opt/cloudhsm/java/cloudhsm-jce-5.6.0.jar) to field java.security .KeyStore.keyStoreSpi WARNING: Please consider reporting this to the maintainers of com.amazonaws.cloudhsm.jce.provider.CloudHsmKeyStore WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations WARNING: All illegal access operations will be denied in a future release ```

这些警告没有任何影响。我们已经意识到这个问题,并正在努力解决它。无需任何解决方案或变通办法。

问题:JCE会话池已用尽

影响:看到以下消息JCE后,您可能无法在中执行操作:

com.amazonaws.cloudhsm.jce.jni.exception.InternalException: There are too many operations happening at the same time: Reached max number of sessions in session pool: 1000

解决方法:

  • 如果您受到影响,请重新启动JCE应用程序。

  • 执行操作时,可能需要先完成该JCE操作,然后才能丢失对该操作的引用。

    注意

    根据操作的不同,可能需要一种完成方法。

    操作 完成方法
    密码

    在加密或解密模式下的 doFinal()

    在包装模式下的 wrap()

    在解包模式下的 unwrap()

    KeyAgreement

    generateSecret()generateSecret(String)

    KeyPairGenerator

    generateKeyPair()genKeyPair()reset()

    KeyStore 无需任何方法
    MAC

    doFinal()reset()

    MessageDigest

    digest()reset()

    SecretKeyFactory 无需任何方法
    SecureRandom 无需任何方法
    签名

    在签名模式下的 sign()

    在验证模式下的 verify()

解决状态:我们已经在客户端 SDK 5.9.0 及更高版本中解决了此问题。要修复此问题,请将您的客户端升级SDK到这些版本之一。

问题: getKey 操作导致客户端 SDK 5 内存泄漏

  • 影响:在客户端SDK版本 5.10.0 及更早版本JCE中,该APIgetKey操作存在内存泄漏。如果您在应用程序中getKeyAPI多次使用它们,则会导致内存增长增加,从而增加应用程序中的内存占用量。随着时间的推移,这可能会导致限制错误或需要重新启动应用程序。

  • 解决办法:我们建议升级到客户端 SDK 5.11.0。如果无法做到这一点,我们建议不要在应用程序中getKeyAPI多次调用。相反,应尽可能重复使用先前getKey操作中返回的密钥。

  • 解决状态:将您的客户端SDK版本升级到 5.11.0 或更高版本,其中包括此问题的修复程序。