

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

# AWS 資料庫加密 SDK 中支援的演算法套件
<a name="supported-algorithms"></a>


****  

|  | 
| --- |
| 我們的用戶端加密程式庫已重新命名為 AWS 資料庫加密 SDK。此開發人員指南仍提供有關 [DynamoDB 加密用戶端](legacy-dynamodb-encryption-client.md)的資訊。 | 

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

 AWS Database Encryption SDK 使用演算法套件來加密和簽署資料庫中的欄位。所有支援的演算法套件都使用進階加密標準 (AES) 演算法搭配稱為 AES-GCM 的 Galois/計數器模式 (GCM) 來加密原始資料。 AWS Database Encryption SDK 支援 256 位元加密金鑰。驗證標籤的長度一律是 16 個位元組。


**AWS 資料庫加密 SDK 演算法套件**  

| 演算法 | 加密演算法 | 資料金鑰長度 (以位元為單位) | 金鑰衍生演算法 | 對稱簽章演算法 | 非對稱簽章演算法 | 金鑰承諾 | 
| --- | --- | --- | --- | --- | --- | --- | 
| 預設 | AES-GCM | 256 | HKDF 搭配 SHA-512 | HMAC-SHA-384 | ECDSA，P-384 和 SHA-384 式 | HKDF 搭配 SHA-512 | 
| 不含 ECDSA 數位簽章的 AES-GCM | AES-GCM | 256 | HKDF 搭配 SHA-512 | HMAC-SHA-384 | 無 | HKDF 搭配 SHA-512 | 

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


**資料金鑰長度**  
位元[的資料金鑰](concepts.md#data-key)長度。 AWS Database Encryption SDK 支援 256 位元資料金鑰。資料金鑰會用作 HMAC extract-and-expand金鑰衍生函數 (HKDF) 的輸入。HKDF 的輸出做為加密演算法中的資料加密金鑰。

**金鑰衍生演算法**  
用於衍生資料加密金鑰的 HMAC 式擷取和擴展金鑰衍生函數 (HKDF)。 AWS 資料庫加密 SDK 使用 [RFC 5869 ](https://tools.ietf.org/html/rfc5869)中定義的 HKDF。  
+ 使用的雜湊函數是 SHA-512
+ 對於擷取步驟：
  + 不使用 salt。根據 RFC， salt 設定為零字串。
  + 輸入金鑰材料是 [keyring](concepts.md#keyring-concept) 的資料金鑰。
+ 對於擴展步驟：
  + 輸入虛擬亂數金鑰是來自擷取步驟的輸出。
  + 金鑰標籤是以大端位元組順序UTF-8-encoded位元組。 `DERIVEKEY`
  + 輸入資訊是演算法 ID 和金鑰標籤 （依該順序） 的串連。
  + 輸出鍵控材料的長度是**資料鍵的長度**。此輸出將當做加密演算法中的資料加密金鑰。

**對稱簽章演算法**  
用於產生對稱簽章的雜湊型訊息驗證碼 (HMAC) 演算法。所有支援的演算法套件都包含 HMAC 驗證。  
 AWS 資料庫加密 SDK 會序列化材料描述和所有標示為 `ENCRYPT_AND_SIGN`、 `SIGN_ONLY`或 的欄位`SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT`。然後，它會使用 HMAC 搭配密碼編譯雜湊函數演算法 (SHA-384) 來簽署正式化。  
對稱 HMAC 簽章會存放在 AWS 資料庫加密 SDK 新增至記錄的新欄位 (`aws_dbe_foot`) 中。

**非對稱簽章演算法**  
用來產生非對稱數位簽章的簽章演算法。  
 AWS 資料庫加密 SDK 會序列化材料描述和所有標示為 `ENCRYPT_AND_SIGN`、 `SIGN_ONLY`或 的欄位`SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT`。然後，它會使用橢圓曲線數位簽章演算法 (ECDSA) 搭配下列詳細資訊來簽署正式化：  
+ 使用的橢圓曲線是 P-384，如[數位簽章標準 (DSS) (FIPS PUB 186-4)](http://doi.org/10.6028/NIST.FIPS.186-4) 中所定義。
+ 使用的雜湊函數是 SHA-384。
非對稱 ECDSA 簽章會與 `aws_dbe_foot` 欄位中的對稱 HMAC 簽章一起存放。  
預設包含 ECDSA 數位簽章，但並非必要。

**金鑰承諾**  
用於衍生遞交金鑰的 HMAC extract-and-expand金鑰衍生函數 (HKDF)。  
+ 使用的雜湊函數是 SHA-512
+ 對於擷取步驟：
  + 不使用 salt。根據 RFC， salt 設定為零字串。
  + 輸入金鑰材料是 [keyring](concepts.md#keyring-concept) 的資料金鑰。
+ 對於擴展步驟：
  + 輸入虛擬亂數金鑰是來自擷取步驟的輸出。
  + 輸入資訊是以大端位元組順序的`COMMITKEY`字串 UTF-8-encoded位元組。
  + 輸出鍵控材料的長度為 256 位元。此輸出會用作遞交金鑰。
遞交金鑰會計算[記錄承諾](reference.md#format-commitment)，即資料[描述](reference.md#material-description-format)上不同的 256 位元雜湊型訊息驗證碼 (HMAC) 雜湊。如需將金鑰承諾新增至演算法套件的技術說明，請參閱 Cryptology ePrint Archive 中的[金鑰承諾 AEADs](https://eprint.iacr.org/2020/1153)。

## 預設演算法套件
<a name="recommended-algorithms"></a>

根據預設， AWS 資料庫加密 SDK 使用演算法套件搭配 AES-GCM、HMAC extract-and-expand金鑰衍生函數 (HKDF)、HMAC 驗證、ECDSA 數位簽章、金鑰承諾和 256 位元加密金鑰。

預設演算法套件包含 HMAC 驗證 （對稱簽章） 和 [ECDSA 數位簽章](concepts.md#digital-sigs) （非對稱簽章）。這些簽章會存放在 AWS 資料庫加密 SDK 新增至記錄的新欄位 (`aws_dbe_foot`) 中。當授權政策允許一組使用者加密資料，以及允許另一組使用者解密資料時，ECDSA 數位簽章特別有用。

預設演算法套件也會衍生[金鑰承諾](concepts.md#key-commitment) – 將資料金鑰連結至記錄的 HMAC 雜湊。金鑰承諾值是從材料描述和遞交金鑰計算的 HMAC。然後，金鑰承諾值會儲存在材料描述中。金鑰承諾可確保每個加密文字只解密為一個純文字。它們透過驗證用作加密演算法輸入的資料金鑰來執行此操作。加密時，演算法套件會衍生金鑰承諾 HMAC。在解密之前，他們會驗證資料金鑰是否產生相同的金鑰承諾 HMAC。如果沒有，解密呼叫會失敗。

## 不含 ECDSA 數位簽章的 AES-GCM
<a name="other-algorithms"></a>

雖然預設演算法套件可能適用於大多數應用程式，但您可以選擇替代演算法套件。例如，某些信任模型將由沒有 ECDSA 數位簽章的演算法套件滿足。只有在加密資料的使用者和解密資料的使用者同樣受信任時，才使用此套件。

所有 AWS 資料庫加密 SDK 演算法套件都包含 HMAC 驗證 （對稱簽章）。唯一的差別是，沒有 ECDSA 數位簽章的 AES-GCM 演算法套件缺少非對稱簽章，可提供多一層的真偽和不可否認性。

例如，如果您的 keyring、、 `wrappingKeyA``wrappingKeyB`和 中有多個包裝金鑰`wrappingKeyC`，而且您使用 解密記錄`wrappingKeyA`，HMAC 對稱簽章會驗證記錄是否由有權存取 的使用者加密`wrappingKeyA`。如果您使用預設演算法套件，HMACs 會提供與 相同的驗證`wrappingKeyA`，並另外使用 ECDSA 數位簽章，以確保記錄是由具有 加密許可的使用者加密`wrappingKeyA`。

若要選取沒有數位簽章的 AES-GCM 演算法套件，請在加密組態中包含下列程式碼片段。

------
#### [ Java ]

下列程式碼片段指定不含 ECDSA 數位簽章的 AES-GCM 演算法套件。如需詳細資訊，請參閱[DynamoDB AWS 資料庫加密 SDK 中的加密組態](ddb-java-using.md#ddb-config-encrypt)。

```
.algorithmSuiteId(
    DBEAlgorithmSuiteId.ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY_SYMSIG_HMAC_SHA384)
```

------
#### [ C\$1 / .NET ]

下列程式碼片段指定不含 ECDSA 數位簽章的 AES-GCM 演算法套件。如需詳細資訊，請參閱[DynamoDB AWS 資料庫加密 SDK 中的加密組態](ddb-net-using.md#ddb-net-config-encrypt)。

```
AlgorithmSuiteId = DBEAlgorithmSuiteId.ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY_SYMSIG_HMAC_SHA384
```

------
#### [ Rust ]

下列程式碼片段指定不含 ECDSA 數位簽章的 AES-GCM 演算法套件。如需詳細資訊，請參閱[DynamoDB AWS 資料庫加密 SDK 中的加密組態](ddb-rust-using.md#ddb-rust-config-encrypt)。

```
.algorithm_suite_id(
    DbeAlgorithmSuiteId::AlgAes256GcmHkdfSha512CommitKeyEcdsaP384SymsigHmacSha384,
)
```

------