本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
的已知问题 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中,该API
getKey
操作存在内存泄漏。如果您在应用程序中getKey
API多次使用它们,则会导致内存增长增加,从而增加应用程序中的内存占用量。随着时间的推移,这可能会导致限制错误或需要重新启动应用程序。 -
解决办法:我们建议升级到客户端 SDK 5.11.0。如果无法做到这一点,我们建议不要在应用程序中
getKey
API多次调用。相反,应尽可能重复使用先前getKey
操作中返回的密钥。 -
解决状态:将您的客户端SDK版本升级到 5.11.0 或更高版本,其中包括此问题的修复程序。