

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

# AWS Encryption SDK 演算法參考
<a name="algorithms-reference"></a>


|  | 
| --- |
|  本頁面上提供的參考可讓您建置自己的並與 AWS Encryption SDK相容的加密儲存庫。如果您不是自己建置相容的加密儲存庫，可能不需要此資訊。 若要在其中一個支援的程式設計語言 AWS Encryption SDK 中使用 ，請參閱 [程式設計語言](programming-languages.md)。 如需定義適當 AWS Encryption SDK 實作元素的規格，請參閱 GitHub 中的[AWS Encryption SDK 規格](https://github.com/awslabs/aws-encryption-sdk-specification/)。  | 

如果您要建置自己的程式庫，以讀取和寫入與 相容的加密文字 AWS Encryption SDK，您將需要了解 如何 AWS Encryption SDK 實作支援的演算法套件來加密原始資料。

 AWS Encryption SDK 支援下列演算法套件。所有 AES-GCM 演算法套件都有 12 位元組[初始化向量](IV-reference.md)和 16 位元組 AES-GCM 身分驗證標籤。預設演算法套件會隨 AWS Encryption SDK 版本和選取的金鑰承諾政策而有所不同。如需詳細資訊，請參閱[承諾政策和演算法套件](troubleshooting-migration.md#configuration-conflict_1)。


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

| 演算法 ID | 訊息格式版本 | 加密演算法 | 資料金鑰長度 （位元） | 金鑰衍生演算法 | 簽章演算法 | 金鑰承諾演算法 | 演算法套件資料長度 （位元組） | 
| --- | --- | --- | --- | --- | --- | --- | --- | 
| 05 78 | 0x02 | AES-GCM | 256 | HKDF 搭配 SHA-512 | ECDSA，P-384 和 SHA-384 式 | HKDF 搭配 SHA-512 | 32 （金鑰承諾） | 
| 04 78 | 0x02 | AES-GCM | 256 | HKDF 搭配 SHA-512 | 無 | HKDF 搭配 SHA-512 | 32 （金鑰承諾） | 
| 03 78 | 0x01 | AES-GCM | 256 | HKDF，SHA-384 式 | ECDSA，P-384 和 SHA-384 式 | 無 | N/A | 
| 03 46 | 0x01 | AES-GCM | 192 | HKDF，SHA-384 式 | ECDSA，P-384 和 SHA-384 式 | 無 | N/A | 
| 02 14 | 0x01 | AES-GCM | 128 | HKDF，搭配 SHA-256 | ECDSA，搭配 P-256 和 SHA-256 | 無 | N/A | 
| 01 78 | 0x01 | AES-GCM | 256 | HKDF，搭配 SHA-256 | 無 | 無 | N/A | 
| 01 46 | 0x01 | AES-GCM | 192 | HKDF，搭配 SHA-256 | 無 | 無 | N/A | 
| 01 14 | 0x01 | AES-GCM | 128 | HKDF，搭配 SHA-256 | 無 | 無 | N/A | 
| 00 78 | 0x01 | AES-GCM | 256 | 無 | 無 | 無 | N/A | 
| 00 46 | 0x01 | AES-GCM | 192 | 無 | 無 | 無 | N/A | 
| 00 14 | 0x01 | AES-GCM | 128 | 無 | 無 | 無 | N/A | 

**演算法 ID**  
可唯一識別演算法實作的 2 位元組十六進位值。此值會存放在加密文字[的訊息標頭](message-format.md#header-structure)中。

**訊息格式版本**  
訊息格式的版本。具有金鑰承諾的演算法套件使用訊息格式第 2 版 (0x02)。沒有金鑰承諾的演算法套件使用訊息格式版本 1 (0x01)。

**演算法套件資料長度**  
演算法套件特定資料位元組的長度。此欄位僅支援訊息格式版本 2 (0x02)。在訊息格式第 2 版 (0x02) 中，此資料會出現在訊息標頭的 `Algorithm suite data`欄位中。支援[金鑰承諾](concepts.md#key-commitment)的演算法套件會使用 32 個位元組做為金鑰承諾字串。如需詳細資訊，請參閱此清單中**的關鍵承諾演算法**。

**資料金鑰長度**  
[資料金鑰](concepts.md#DEK)的長度，以位元為單位。 AWS Encryption SDK 支援 256 位元、192 位元和 128 位元金鑰。資料金鑰是由 [keyring](concepts.md#keyring) 或主金鑰產生。  
在某些實作中，此資料金鑰會用作 HMAC extract-and-expand金鑰衍生函數 (HKDF) 的輸入。HKDF 的輸出做為加密演算法中的資料加密金鑰。如需詳細資訊，請參閱此清單中的**金鑰衍生演算法**。

**加密演算法**  
使用的加密演算法的名稱和模式。中的演算法套件 AWS Encryption SDK 使用進階加密標準 (AES) 加密演算法搭配 Galois/計數器模式 (GCM)。

**金鑰承諾演算法**  
用來計算金鑰承諾字串的演算法。輸出會存放在訊息標頭的 `Algorithm suite data`欄位中，並用來驗證金鑰承諾的資料金鑰。  
如需將金鑰承諾新增至演算法套件的技術說明，請參閱 Cryptology ePrint Archive 中的[金鑰承諾 AEADs](https://eprint.iacr.org/2020/1153)。

**金鑰衍生演算法**  
用於衍生資料加密金鑰的 HMAC 式擷取和擴展金鑰衍生函數 (HKDF)。 AWS Encryption SDK 使用 [RFC 5869 ](https://tools.ietf.org/html/rfc5869)中定義的 HKDF。  
**沒有金鑰承諾的演算法套件** （演算法 ID `01xx` – `03xx`)  
+ 使用的雜湊函數是 SHA-384 或 SHA-256，取決於演算法套件。
+ 對於擷取步驟：
  + 不使用 salt。根據 RFC， salt 設定為字串零。字串長度等於雜湊函數輸出的長度，即 SHA-384 為 48 位元組，SHA-256 為 32 位元組。
  + 輸入金鑰材料是來自 keyring 或主金鑰提供者的資料金鑰。
+ 對於擴展步驟：
  + 輸入虛擬亂數金鑰是來自擷取步驟的輸出。
  + 輸入資訊是演算法 ID 和訊息 ID （依該順序） 的串連。
  + 輸出鍵控材料的長度是**資料鍵的長度**。此輸出將當做加密演算法中的資料加密金鑰。
**具有金鑰承諾的演算法套件** （演算法 ID `04xx`和 `05xx`)  
+ 使用的雜湊函數是 SHA-512。
+ 對於擷取步驟：
  + salt 是 256 位元的密碼編譯隨機值。在[訊息格式版本 2](message-format.md) (0x02) 中，此值會存放在 `MessageID` 欄位中。
  + 初始金鑰材料是來自 keyring 或主金鑰提供者的資料金鑰。
+ 對於擴展步驟：
  + 輸入虛擬亂數金鑰是來自擷取步驟的輸出。
  + 金鑰標籤是以大端位元組順序UTF-8-encoded位元組。 `DERIVEKEY`
  + 輸入資訊是演算法 ID 和金鑰標籤 （依該順序） 的串連。
  + 輸出鍵控材料的長度是**資料鍵長度**。此輸出將當做加密演算法中的資料加密金鑰。

**訊息格式版本**  
與演算法套件搭配使用的訊息格式版本。如需詳細資訊，請參閱[訊息格式參考](message-format.md)。

**簽章演算法**  
用來透過加密文字標頭和內文產生[數位簽章](concepts.md#digital-sigs)的簽章演算法。 AWS Encryption SDK 使用橢圓曲線數位簽章演算法 (ECDSA) 搭配下列詳細資訊：  
+ 使用的橢圓曲線為 P-384 或 P-256 曲線 (如演算法 ID 所指定)。這些曲線定義於[數位簽章標準 (DSS) (FIPS PUB 186-4)](http://doi.org/10.6028/NIST.FIPS.186-4) 中。
+ 使用的雜湊函數是 SHA-384 (搭配 P-384 曲線) 或 SHA-256 (搭配 P-256 曲線)。