本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
适用于 JCE 开发工具包的已知问题 AWS CloudHSM
以下问题会影响适用的 JCE 开发工具包。 AWS CloudHSM
主题
问题:当使用非对称密钥对时,即使未显式创建或导入密钥,也会看到占用密钥容量
-
影响:此问题可能会 HSMs 导致您的密钥空间意外耗尽,当您的应用程序使用标准 JCE 密钥对象而不是对象进行加密操作时,就会发生此问题。
CaviumKey当您使用标准 JCE 密钥对象时,CaviumProvider会将该密钥作为会话密钥隐式导入 HSM 中,并且在应用程序退出之前不会删除此密钥。因此,密钥会在应用程序运行时积累,并可能 HSMs 导致您的可用密钥空间耗尽,从而冻结您的应用程序。 -
解决方法:当使用
CaviumSignature类、CaviumCipher类、CaviumMac类或CaviumKeyAgreement类时,您应提供CaviumKey密钥而不是标准 JCE 密钥作为对象。您可以使用
ImportKey类将普通密钥手动转换为 CaviumKey,并在之后可在操作完成后手动删除该密钥。 -
解决状态:我们正在更新
CaviumProvider以正确管理隐式导入。当该修复可用时,将在版本历史记录页面中公布。
问题:JCE KeyStore 是只读的
-
影响:您目前无法将 HSM 不支持的对象类型存储在 JCE 密钥库中。具体来说,您不能在密钥存储中存储证书。这会阻止与 jarsigner 之类的工具的互操作性,这些工具预期在密钥库中查找证书。
-
解决方法:您可以修改您的代码,以从本地文件或 S3 存储桶位置中加载证书,而不是从密钥存储中加载。
-
解析状态:您可以使用 AWS CloudHSM 密钥库来存储证书。
问题:要进行 AES-GCM 加密的缓冲区不能超过 16,000 字节
此外,多部分 AES-GCM 加密不受支持。
-
影响:您不能使用 AES-GCM 加密大于 16,000 字节的数据。
-
解决方法:您可以使用一个替代机制(如 AES-CBC),也可以将数据拆分为多个部分并为各个部分分别加密。如果您拆分了数据,则必须管理已拆分的密文及其解密内容。由于 FIPS 要求在 HSM 上生成 AES-GCM 的初始化向量 (IV),因此 AES-GCM-encrypted每条数据的 IV 会有所不同。
-
解决状态:我们正在修复开发工具包,以在数据缓冲区过大时显式失败。我们正在评估支持较大的缓冲区而不依靠多部分加密的替代方法。将在 AWS CloudHSM 论坛和版本历史记录页面中公布更新。
问题:在 HSM 内部分执行椭圆曲线迪菲-赫尔曼 (ECDH, Elliptic-curve Diffie-Hellman) 密钥派生
您的 EC 私有密钥始终保留在 HSM 中,但密钥派生过程分多步执行。因此,客户端上可以提供每个步骤的中间结果。Java 代码示例中提供了 ECDH 密钥派生示例。
-
影响:Client SDK 3 为 JCE 增加了 ECDH 功能。使用该
KeyAgreement类派生 a 时 SecretKey,它首先在客户端上可用,然后导入到 HSM 中。密钥句柄随后会返回到您的应用程序。 -
解决办法:如果您在中实现 SSL/TLS Offload AWS CloudHSM,则此限制可能不是问题。如果您的应用程序需要将您的密钥始终保持在 FIPS 边界内,请考虑使用不依赖 ECDH 密钥派生的替代协议。
-
解析状态:SDK 5.16 现在支持带密钥派生的 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 枚举生成密钥时正确预期以位为单位的密钥大小的修复程序。
问题:客户端软件开发工具包 5 抛出警告“发生了非法的反射访问操作”
在 Java 11 中使用客户端软件开发工具包 5 时,CloudHSM 会抛出以下 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
此问题已在客户端 SDK 版本 5.8 及更高版本中得到修复。
问题: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()
解决状态:我们已经在客户端软件开发工具包 5.9.0 及更高版本中解决了此问题。要修复此问题,请将您的客户端软件开发工具包升级到其中一个版本。
问题:Client SDK 5 因 getKey 操作而发生内存泄漏
-
影响:在 Client SDK 版本 5.10.0 及更早版本中,API
getKey操作在 JCE 中存在内存泄漏。如果您在应用程序中多次使用getKeyAPI,则会导致内存增长增加,从而增加应用程序中的内存占用量。随着时间推移,这可能会导致节流错误或需要重启应用程序。 -
解决办法:我们建议升级到 Client SDK 5.11.0。如果无法做到这一点,我们建议不要在应用程序中多次调用
getKeyAPI。相反,应尽可能重复使用先前getKey操作中返回的密钥。 -
解决状态:将您的 Client SDK 版本升级到 5.11.0 或更高版本,其中包括针对此问题的修复。