

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 中的 AES 金鑰包裝具有不合規長度的自訂 IVs AWS CloudHSM
<a name="troubleshooting-aes-keys"></a>

此故障診斷主題可協助您判斷應用程式是否產生無法復原的包裝金鑰。如果您受到此問題的影響，請使用本主題來解決問題。

**Topics**
+ [確定代碼是否生成不可復原的包裝金鑰。](#troubleshooting-problem1)
+ [如果代碼生成不可復原的包裝金鑰，則必須採取的動作](#troubleshooting-problem2)

## 確定代碼是否生成不可復原的包裝金鑰。
<a name="troubleshooting-problem1"></a>

只有當您符合以下*所有*條件時，您才會受到影響：


****  

| 條件 | 如何知道？ | 
| --- | --- | 
| 應用程式使用 PKCS \#11 程式庫  | PKCS \#11 程式庫會以 `libpkcs11.so` 檔案的形式安裝在 `/opt/cloudhsm/lib` 資料夾中。用 C 語言編寫的應用程序通常直接使用 PKCS \#11 程式庫，而用 Java 編寫的應用程序可能通過 Java 抽象層間接使用程式庫。如果您使用的是 Windows，您不會受到影響，因為 PKCS \#11 程式庫目前不適用於 Windows。 | 
| 您的應用程式專門使用 3.0.0 版的 PKCS \#11 程式庫  | 如果您收到來自 AWS CloudHSM 團隊的電子郵件，您可能會使用 PKCS \#11 程式庫的 3.0.0 版。<br />若要檢查應用程式執行個體上的軟體版本，請使用以下指令：<pre>rpm -qa | grep ^cloudhsm</pre> | 
| 您可以使用 AES 金鑰包裝來包裝金鑰 | AES 金鑰包裝意味著您使用 AES 金鑰來包裝一些其他金鑰。對應的機制名稱為 `CKM_AES_KEY_WRAP`。它與函數 `C_WrapKey` 一起使用。其他使用初始化向量 (IV) 的 AES 包裝機制 (例如 `CKM_AES_GCM` 和 ` CKM_CLOUDHSM_AES_GCM`) 不受此問題影響。[進一步瞭解函數和機制](pkcs11-mechanisms.md)。 | 
| 調用 AES 金鑰包裝時指定自定義 IV，並且此 IV 的長度小於 8 | AES 金鑰包裝通常使用如下 `CK_MECHANISM` 結構初始化：<br />`CK_MECHANISM mech = {CKM_AES_KEY_WRAP, IV_POINTER, IV_LENGTH};`<br />只有在以下情況下此問題才適用於您：[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_tw/cloudhsm/latest/userguide/troubleshooting-aes-keys.html) | 

如果您不符合上述所有條件，則可以立即停止閱讀。您包裝的金鑰可以正確解開包裝，並且此問題不會影響您。否則，請參閱 [如果代碼生成不可復原的包裝金鑰，則必須採取的動作](#troubleshooting-problem2)。

## 如果代碼生成不可復原的包裝金鑰，則必須採取的動作
<a name="troubleshooting-problem2"></a>

您應該採取以下三個步驟：

1.  **立即將 PKCS \#11 程式庫升級到較新的版本**
   + [適用於 Amazon Linux、CentOS 6 及 RHEL 6 的最新 PKCS \#11 程式庫](client-upgrade.md)
   + [適用於 Amazon Linux 2、CentOS 7 及 RHEL 7 的最新 PKCS \#11 程式庫](client-upgrade.md)
   + [適用於 Ubuntu 16.04 LTS 的最新 PKCS \#11 程式庫](client-upgrade.md)

1. **更新您的軟體以使用符合標準的 IV**

   強烈建議您遵循我們的範例程式碼，並直接指定 NULL IV，這會導致 HSM 使用符合標準的預設 IV。或者，您也可以明確指定 IV 與 `0xA6A6A6A6A6A6A6A6` 對應的 `8` IV 長度。不建議使用任何其他 IV 進行 AES 金鑰包裝，並且會在未來版本的 PKCS \#11 程式庫中明確禁用用於 AES 金鑰包裝的自定義 IV。

   正確指定 IV 的範例程式碼會出現在 GitHub 上的 [aes\_wrapping.c](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/blob/master/src/wrapping/aes_wrapping.c#L72) 中。

1. **識別和恢復現有包裝的金鑰**

   您應該識別使用 3.0.0 版的 PKCS \#11 程式庫包裝的任何金鑰，然後聯絡支援人員以尋求協助 ([https://aws.amazon.com/support](https://aws.amazon.com/support)) 以復原這些金鑰。

**重要**  
此問題只會影響以 3.0.0 版的 PKCS \#11 程式庫包裝的金鑰。您可以使用舊版 PKCS \#11 程式庫 (2.0.4 和較低編號的套件) 或更新版本 (3.0.1 和更高編號的套件) 來包裝金鑰。