本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
下列問題會影響適用於 的 JCE 開發套件 AWS CloudHSM。
主題
問題:使用非對稱金鑰對時,即使未明確建立或匯入金鑰,仍會看到已佔用的金鑰容量
-
影響:此問題可能導致 HSM 意外用盡金鑰空間,並在您的應用程式使用標準 JCE 金鑰物件 (而非
CaviumKey
物件) 進行加密操作時發生。當您使用標準 JCE 金鑰物件時,CaviumProvider
會隱含地將該金鑰匯入 HSM 做為工作階段金鑰,且不會刪除此金鑰,直到應用程式結束為止。因此,金鑰會在應用程式執行時不斷累積,可能導致您的 HSM 用盡可用的金鑰空間,進而凍結您的應用程式。 -
因應措施:使用
CaviumSignature
類別、CaviumCipher
類別、CaviumMac
類別或CaviumKeyAgreement
類別時,您應提供金鑰做為CaviumKey
,而非標準 JCE 金鑰物件。您可以使用
ImportKey
類手動將普通金鑰轉換為 CaviumKey
,然後在操作完成後手動刪除該金鑰。 -
解決狀態:我們正在更新
CaviumProvider
以正確管理隱含匯入。修正可供使用時即會在版本歷史頁面中公告。
問題:JCE KeyStore 是唯讀的。
-
影響:無法將 HSM 不支援的物件類型存放在 JCE 金鑰存放區中。特別是您無法在金鑰存放區中存放憑證。這會防止與 jarsigner 之類之工具 (其會預期在金鑰存放區中尋找憑證) 之間的互通性。
-
因應措施:您可以重新處理程式碼,從本機檔案或從 S3 儲存貯體位置 (而不是從金鑰存放區) 載入憑證。
-
解決狀態:我們會新增在金鑰存放區中儲存憑證的支援。此功能可供使用時,即會在版本歷史頁面中公告。
問題:AES-GCM 加密的緩衝區不能超過 16,000 位元組。
此外,也不支援分段的 AES-GCM 加密。
-
影響:您無法使用 AES-GCM 來加密大於 16,000 位元組的資料。
-
因應措施:您可以使用替代機制 (例如 AES-CBC),或者可以將資料切分成數段,並個別加密每一個部分。如果切分資料,您必須管理切分後的加密文字及其解密。由於 FIPS 規定 AES-GCM 的初始化向量 (IV) 要在 HSM 上產生,AES-GCM 加密之每個資料片段的 IV 都不同。
-
解決狀態:我們正在進行修復,讓程式庫在資料緩衝區過大時明確失敗。我們正在評估支援較大緩衝區、而不需要仰賴分段加密的替代做法。更新會公告於 AWS CloudHSM 論壇和版本歷史頁面中。
問題:在 HSM 中橢圓曲線 Diffie-Hellman (ECDH) 金鑰衍生只會部分執行。
您的 EC 私有金鑰仍一律保留在 HSM 中,但金鑰衍生程序會分成多個步驟執行。因此,在用戶端會有每個步驟產生的中繼結果。您可在 Java 程式碼範例中查看 ECDH 金鑰衍生範例。
-
影響:用戶端 SDK 3 將 ECDH 功能新增至 JCE。當您使用
KeyAgreement
類別衍生 SecretKey 時,它首先可在用戶端上使用,然後匯入 HSM。然後將金鑰控制代碼傳回給到您的應用程式。 -
解決方法:如果您在 中實作 SSL/TLS 卸載 AWS CloudHSM,則此限制可能不是問題。如果您的應用程式要求金鑰需隨時符合 FIPS,請考慮使用其他不倚賴 ECDH 金鑰衍生的通訊協定。
-
解決狀態:我們正在開發可完全在 HSM 內執行 ECDH 金鑰衍生的選項。如果可用,我們將在版本歷史記錄頁面中公告更新的實作。
問題:KeyGenerator 和 KeyAttribute 錯誤地將金鑰大小參數解釋為位元組數而非位元數
當使用 KeyGenerator 類別init
函數或 AWS CloudHSM KeyAttribute 列舉的 SIZE
屬性產生金鑰時,API 錯誤地預期引數是金鑰位元組的數目,但實際是金鑰位元的數目。
-
影響:用戶端 SDK 版本 5.4.0 至 5.4.2 錯誤地預期金鑰大小會以位元組形式提供給指定的 API。
-
解決方法:使用 KeyGenerator 類別或 KeyAttribute 列舉之前,先將金鑰大小從位元轉換為位元組,如果使用用戶端 SDK 版本 5.4.0 到 5.4.2,則使用 AWS CloudHSM JCE 提供者產生金鑰。
-
解析狀態:升級您的用戶端 SDK 版本到 5.5.0 或更高版本,其中包括使用 KeyGenerator 類別或 KeyAttribute 列舉產生金鑰時正確期望金鑰大小的位元修正。
問題:用戶端 SDK 5 會發出警告「發生了非法的反射式存取作業」
當您將用戶端 SDK 5 與 Java 11 搭配使用時,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 ```
這些警告沒有任何影響。我們知道這個問題,並正在努力解決這個問題。不需要解決方案或因應措施。
問題: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 升級至其中一個版本。
問題:用戶端 SDK 5 記憶體流失搭配 getKey 操作
-
影響:API
getKey
操作在用戶端 SDK 5.10.0 版及更早版本中的 JCE 中存在記憶體流失。如果您在應用程式中多次使用getKey
API,這將導致記憶體增長增加,進而增加應用程式中的記憶體佔用空間。隨著時間的推移,這可能會導致調節錯誤或需要重新啟動應用程式。 -
解決方法:我們建議您升級至用戶端 SDK 5.11.0。如果無法完成此操作,建議您不要在應用程式中多次呼叫
getKey
API。反之,請盡可能重複使用先前getKey
操作中傳回的金鑰。 -
解決狀態:將您的用戶端 SDK 版本升級至 5.11.0 或更新版本,其中包含此問題的修正。