

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

# 中支援的演算法套件 AWS Encryption SDK
<a name="supported-algorithms"></a>

*演算法套件*是加密演算法與相關數值的集合。密碼編譯系統使用演算法實作來產生加密文字訊息。

 AWS Encryption SDK 演算法套件使用 Galois/計數器模式 (GCM) 中的進階加密標準 (AES) 演算法，稱為 AES-GCM，來加密原始資料。 AWS Encryption SDK 支援 256 位元、192 位元和 128 位元加密金鑰。初始向量 (IV) 的長度一律是 12 個位元組。驗證標籤的長度一律是 16 個位元組。

根據預設， AWS Encryption SDK 使用具有 AES-GCM 的演算法套件搭配 HMAC extract-and-expand金鑰衍生函數 ([HKDF](https://en.wikipedia.org/wiki/HKDF))、簽署和 256 位元加密金鑰。如果[承諾政策](concepts.md#commitment-policy)需要[金鑰承諾](concepts.md#key-commitment)， 會 AWS Encryption SDK 選取也支援金鑰承諾的演算法套件；否則，它會選取具有金鑰衍生和簽署的演算法套件，但不會選取金鑰承諾。

## 建議：具有金鑰衍生、簽署和金鑰承諾的 AES-GCM
<a name="recommended-algorithms"></a>

 AWS Encryption SDK 建議使用演算法套件，透過將 256 位元資料加密金鑰提供給 HMAC extract-and-expand金鑰衍生函數 (HKDF) 來衍生 AES-GCM 加密金鑰。 AWS Encryption SDK 會新增橢圓曲線數位簽章演算法 (ECDSA) 簽章。為了支援[金鑰承諾](concepts.md#key-commitment)，此演算法套件也會衍生*金鑰承諾字串* – 非秘密資料金鑰識別符 – 存放在加密訊息的中繼資料中。此金鑰承諾字串也會使用類似衍生資料加密金鑰的程序，透過 HKDF 衍生。


**AWS Encryption SDK 演算法套件**  

| 加密演算法 | 資料加密金鑰長度 (以位元為單位) | 金鑰衍生演算法 | 簽章演算法 | 金鑰承諾 | 
| --- | --- | --- | --- | --- | 
| AES-GCM | 256 | HKDF，SHA-384 式 | ECDSA，P-384 和 SHA-384 式 | HKDF 搭配 SHA-512 | 

HKDF 可協助您避免意外重複使用資料加密金鑰，並降低過度使用資料金鑰的風險。

對於簽署，此演算法套件使用 ECDSA 搭配密碼編譯雜湊函數演算法 (SHA-384)。預設會使用 ECDSA，即使基礎主金鑰政策未指定使用。[訊息簽署](concepts.md#digital-sigs)會驗證訊息寄件者是否獲授權加密訊息，並提供不可否認性。當主金鑰的授權政策允許一組使用者進行資料加密，並允許另外一組使用者進行資料解密時，這種做法特別有用。

具有金鑰承諾的演算法套件可確保每個加密文字只解密為一個純文字。它們透過驗證用作加密演算法輸入的資料金鑰的身分來執行此操作。加密時，這些演算法套件會衍生金鑰承諾字串。在解密之前，他們會驗證資料金鑰是否符合金鑰承諾字串。如果沒有，解密呼叫會失敗。

## 其他支援的演算法套件
<a name="other-algorithms"></a>

為了回溯相容性， AWS Encryption SDK 支援下列替代演算法套件。一般而言，我們不建議這些演算法套件。不過，我們了解簽署可能會嚴重阻礙效能，因此我們為這些案例提供具有金鑰衍生的金鑰遞交套件。對於必須做出更重大效能權衡的應用程式，我們會繼續提供缺少簽署、金鑰承諾和金鑰衍生的套件。

**沒有金鑰承諾的 AES-GCM**  
沒有金鑰承諾的演算法套件在解密之前不會驗證資料金鑰。因此，這些演算法套件可能會將單一加密文字解密為不同的純文字訊息。不過，由於具有金鑰承諾的演算法套件會產生[稍大 (\$130 位元組） 的加密訊息](message-format.md)，且需要更長的時間來處理，因此可能不是每個應用程式的最佳選擇。  
 AWS Encryption SDK 支援具有金鑰衍生、金鑰承諾、簽署的演算法套件，以及具有金鑰衍生和金鑰承諾但不簽署的演算法套件。我們不建議在沒有金鑰承諾的情況下使用演算法套件。如果您必須這麼做，建議您使用具有金鑰衍生和金鑰承諾的演算法套件，但不要簽署。不過，如果您的應用程式效能描述檔支援使用演算法套件，則使用具有金鑰承諾、金鑰衍生和簽署的演算法套件是最佳實務。

**無需簽署的 AES-GCM**  
沒有簽署的演算法套件缺少提供真實性和不可否認性的 ECDSA 簽章。只有當加密資料的使用者和解密資料的使用者同樣受信任時，才使用這些套件。  
使用演算法套件而不簽署時，建議您選擇具有金鑰衍生和金鑰承諾的演算法套件。

**不含金鑰衍生的 AES-GCM**  
沒有金鑰衍生的演算法套件會使用資料加密金鑰做為 AES-GCM 加密金鑰，而不是使用金鑰衍生函數來衍生唯一金鑰。我們不鼓勵使用此套件來產生加密文字，但基於相容性原因， AWS Encryption SDK 支援此套件。

如需這些套件在程式庫中如何表示與使用的詳細資訊，請參閱[AWS Encryption SDK 演算法參考](algorithms-reference.md)。