

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

# AWS Encryption SDK 參考
<a name="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 使用[支援的演算法](supported-algorithms.md)傳回單一資料結構或*訊息*，其中包含加密的資料和對應的加密資料金鑰。下列主題說明演算法和資料結構。使用此資訊來建置程式庫，用以讀取和寫入與此開發套件相容的加密文字。

**Topics**
+ [訊息格式參考](message-format.md)
+ [訊息格式範例](message-format-examples.md)
+ [內文 AAD 參考](body-aad-reference.md)
+ [演算法參考](algorithms-reference.md)
+ [初始化向量參考](IV-reference.md)
+ [

# AWS KMS 階層式 keyring 技術詳細資訊
](hierarchical-keyring-details.md)

# AWS Encryption SDK 訊息格式參考
<a name="message-format"></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 傳回單一資料結構或[加密訊息](concepts.md#message)，其中包含加密的資料 （加密文字） 和所有加密的資料金鑰。您需要了解訊息格式，才能掌握此資料結構，或建置可加以讀寫的程式庫。

訊息格式包含兩個部分：*標題*與*本文*。在某些情況下，訊息格式還會包含第三個部分，也就是*頁尾*。訊息格式會定義網路位元組順序中的有序序列，又稱為 Big Endian 格式。訊息格式會以標題做為開頭，然後依序接著本文與頁尾 (如果有)。

支援的[演算法套件](algorithms-reference.md) AWS Encryption SDK 使用兩種訊息格式版本之一。沒有[金鑰承諾](concepts.md#key-commitment)的演算法套件使用訊息格式第 1 版。具有金鑰承諾的演算法套件使用訊息格式第 2 版。

**Topics**
+ [

## 標題結構
](#header-structure)
+ [

## 本文結構
](#body-structure)
+ [

## 頁尾結構
](#footer-structure)

## 標題結構
<a name="header-structure"></a>

訊息標題會包含加密的資料金鑰，以及說明訊息標題組成方式的資訊。下表說明訊息格式版本 1 和 2 中形成 標頭的欄位。位元組依顯示順序附加。

**不存在**值表示該訊息格式版本中不存在 欄位。**粗體文字**表示每個版本中不同的值。

**注意**  
您可能需要水平或垂直捲動，才能查看此資料表中的所有資料。


**標題結構**  

| 欄位 | 訊息格式第 1 版長度 (位元組) | 訊息格式第 2 版長度 (位元組) | 
| --- | --- | --- | 
| [Version](#header-version) | 1 | 1 | 
| [Type](#header-type) | 1 | 不存在 | 
| [Algorithm ID](#header-algorithm-id) | 2 | 2 | 
| [Message ID](#header-message-id) | 16 | 32 | 
| [AAD Length](#header-aad-length) | 2當[加密內容](concepts.md#encryption-context)為空時，2 位元組 AAD 長度欄位的值為 0。 | 2當[加密內容](concepts.md#encryption-context)為空時，2 位元組 AAD 長度欄位的值為 0。 | 
| [AAD](#header-aad) | 變數. 此欄位的長度會出現在前 2 個位元組中 (AAD 長度欄位）。 當[加密內容](concepts.md#encryption-context)為空白時，標題中不會有 AAD 欄位。 |  變數. 此欄位的長度會出現在前 2 個位元組中 (AAD 長度欄位）。 當[加密內容](concepts.md#encryption-context)為空白時，標題中不會有 AAD 欄位。  | 
| [Encrypted Data Key Count](#header-data-key-count) | 2 | 2 | 
| [Encrypted Data Key(s)](#header-data-keys) | 變數. 取決於加密資料金鑰的數量與每個加密資料金鑰的長度。 | 變數. 取決於加密資料金鑰的數量與每個加密資料金鑰的長度。 | 
| [Content Type](#header-content-type) | 1 | 1 | 
| [Reserved](#header-reserved) | 4 | 不存在 | 
| [IV Length](#header-iv-length) | 1 | 不存在 | 
| [Frame Length](#header-frame-length) | 4 | 4 | 
| [Algorithm Suite Data](#algorithm-suite-data) | 不存在 | 變數。取決於用來產生訊息的[演算法](algorithms-reference.md)。 | 
| [Header Authentication](#header-authentication) | 變數. 取決於用來產生訊息的[演算法](algorithms-reference.md)。 | 變數. 取決於用來產生訊息的[演算法](algorithms-reference.md)。 | 

**版本**  
此本訊息格式的版本。版本是 1 或 2 編碼為位元組`01`或以`02`十六進位表示法

**類型**  
此本訊息格式的類型。類型會指出結構的種類。所支援的唯一類型會如*客戶驗證的加密資料*所述。其類型值為 128，並在十六進位表示法中編碼為 `80`。  
此欄位不存在於訊息格式第 2 版中。

**演算法 ID**  
所使用演算法的識別碼。它會以 2 位元組數值表示，並解譯為 16 位元的無符號整數。如需演算法的詳細資訊，請參閱[AWS Encryption SDK 演算法參考](algorithms-reference.md)。

**訊息 ID**  
隨機產生的值，可識別訊息。訊息 ID：  
+ 唯一識別加密訊息。
+ 以弱式繫結方式，將訊息標題繫結至訊息本文。
+ 提供安全的機制來搭配多個加密訊息重複使用資料金鑰。
+ 避免在 AWS Encryption SDK中意外重複使用資料金鑰，或用盡所有金鑰。
此值在訊息格式版本 1 為 128 位元，在版本 2 為 256 位元。

**AAD 長度**  
額外的驗證資料 (AAD) 的長度。它會以 2 元組數值表示，並解譯為 16 位元的無符號整數，指出包含 AAD 的位元組數量。  
當[加密內容](concepts.md#encryption-context)為空時，AAD 長度欄位的值為 0。

**AAD**  
額外的驗證資料。AAD 為[加密內容](concepts.md#encryption-context)編碼方式，它是金鑰值組的陣列，當中的每個金鑰與值皆為 UTF-8 編碼字元組成的字串。加密內容會轉換為位元組序列，並用於表示 AAD 數值。當加密內容為空白時，標題中不會有 AAD 欄位。  
如果使用[含有簽章的演算法](algorithms-reference.md)，加密內容就必須包含金鑰值組 `{'aws-crypto-public-key', Qtxt}`。Qtxt 代表根據 [SEC 1 版本 2.0](http://www.secg.org/sec1-v2.pdf) 壓縮，然後以 base64 編碼的橢圓曲線點 Q。加密內容可以包含其他值，但所建構 AAD 的長度上限為 2^16 - 1 位元組。  
下表將說明 AAD 的組成欄位。金鑰會依照 UTF-8 字元碼來遞增排序金鑰值組。位元組依顯示順序附加。    
**AAD 結構**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/encryption-sdk/latest/developer-guide/message-format.html)  
**鍵值對計數**  
AAD 中的金鑰值組數量。它會以 2 元組數值表示，並解譯為 16 位元的無符號整數，指出 AAD 中的金鑰值組數量。AAD 中的金鑰值組數量上限為 2^16 - 1。  
如果沒有加密內容，或加密內容為空白，此欄位就不會出現在 AAD 結構中。  
**金鑰長度**  
金鑰值組的金鑰長度。它會以 2 元組數值表示，並解譯為 16 位元的無符號整數，指出包含金鑰的位元組數量。  
**金鑰**  
金鑰值組的金鑰。它會以 UTF-8 編碼位元組序列表示。  
**值長度**  
金鑰值組的值長度。它會以 2 元組數值表示，並解譯為 16 位元的無符號整數，指出包含值的位元組數量。  
**值**  
金鑰值組的值。它會以 UTF-8 編碼位元組序列表示。

**加密的資料金鑰計數**  
加密資料金鑰的數量。它會以 2 元組數值表示，並解譯為 16 位元的無符號整數，指出加密資料金鑰的數量。每個訊息中的加密資料金鑰數目上限為 65，535 (2^16 - 1)。

**加密的資料金鑰 (s)**  
加密資料金鑰的序列。序列長度取決於加密資料金鑰的數量與每個加密資料金鑰的長度。序列會包含至少一個加密資料金鑰。  
下表將說明每個加密資料金鑰的組成欄位。位元組依顯示順序附加。    
**加密資料金鑰結構**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/encryption-sdk/latest/developer-guide/message-format.html)  
**金鑰提供者 ID 長度**  
金鑰提供者識別碼的長度。它會以 2 元組數值表示，並解譯為 16 位元的無符號整數，指出包含金鑰提供者 ID 的位元組數量。  
**金鑰提供者 ID**  
金鑰提供者識別碼。它會用來指出加密資料金鑰的提供者，以而且可供擴充。  
**金鑰提供者資訊長度**  
金鑰提供者資訊的長度。它會以 2 元組數值表示，並解譯為 16 位元的無符號整數，指出包含金鑰提供者資訊的位元組數量。  
**金鑰提供者資訊**  
金鑰提供者資訊。它會取決於金鑰提供者。  
當 AWS KMS 是主金鑰提供者或您使用 AWS KMS keyring 時，此值會包含 的 Amazon Resource Name (ARN) AWS KMS key。  
**加密的資料金鑰長度**  
加密資料金鑰的長度。它會以 2 元組數值表示，並解譯為 16 位元的無符號整數，指出包含加密資料金鑰的位元組數量。  
**加密的資料金鑰**  
加密資料金鑰。這是由金鑰提供者所加密的資料加密金鑰。

**內容類型**  
加密資料的類型，非影格或影格。  
盡可能使用影格資料。僅 AWS Encryption SDK 支援傳統用途的非影格資料。的某些語言實作仍然 AWS Encryption SDK 可以產生非框架加密文字。所有支援的語言實作都可以解密影格和非影格加密文字。
影格資料分為等長部分；每個部分都會個別加密。具框架內容為類型 2，並在十六進位表示法中編碼為位元組 `02`。  
非影格資料不會分割；它是單一加密 Blob。無框架內容為類型 1，並在十六進位表示法中編碼為位元組 `01`。

**預留**  
已保留的 4 位元組序列。此值必須為 0。它會在十六進位表示法中編碼為 `00 00 00 00` (也就是以 4 位元組序列表示且等於 0 的 32 位元整數值)。  
此欄位不存在於訊息格式第 2 版中。

**IV 長度**  
初始向量 (IV) 的長度。它會以 1 元組數值表示，並解譯為 8 位元的無符號整數，指出包含 IV 的位元組數量。此值取決於產生訊息的[演算法](algorithms-reference.md) IV 位元組值。  
此欄位不存在於訊息格式第 2 版中，僅支援在訊息標頭中使用確定性 IV 值的演算法套件。

**影格長度**  
每個影格資料影格的長度。它是 4 位元組值，解譯為 32 位元無符號整數，指定每個影格中的位元組數。當資料為非框架時，也就是當`Content Type`欄位的值為 1 時，此值必須為 0。  
盡可能使用影格資料。僅 AWS Encryption SDK 支援傳統用途的非影格資料。的某些語言實作仍然 AWS Encryption SDK 可以產生非框架加密文字。所有支援的語言實作都可以解密影格和非影格加密文字。

**演算法套件資料**  
產生訊息的[演算法](algorithms-reference.md)所需的補充資料。長度和內容由演算法決定。其長度可能是 0。  
此欄位不存在於訊息格式版本 1。

**標頭身分驗證**  
標題驗證取決於產生訊息的[演算法](algorithms-reference.md)。標題驗證會計算整個標題。當中包含一個 IV 與一個驗證標籤。位元組依顯示順序附加。    
**標題驗證結構**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/encryption-sdk/latest/developer-guide/message-format.html)  
**IV**  
用來計算標題驗證標籤的初始向量 (IV)。  
此欄位不存在於訊息格式第 2 版的標頭中。訊息格式第 2 版僅支援在訊息標頭中使用確定性 IV 值的演算法套件。  
**身分驗證標籤**  
標題的驗證值。這個值會用來驗證標題的整體內容。

## 本文結構
<a name="body-structure"></a>

訊息本文會包含加密資料，也就是所謂的*加密文字*。本文的結構會取決於內容類型 (無框架或具框架)。下面章節將說明每個內容類型的訊息本文格式。訊息內文結構在訊息格式版本 1 和 2 中是相同的。

**Topics**
+ [

### 無框架資料
](#body-no-framing)
+ [

### 具框架資料
](#body-framing)

### 無框架資料
<a name="body-no-framing"></a>

無框架資料會於單一 Blob 中使用唯一的 IV 與[本文 AAD](body-aad-reference.md) 進行加密。

**注意**  
盡可能使用影格資料。僅 AWS Encryption SDK 支援傳統用途的非影格資料。的某些語言實作仍然 AWS Encryption SDK 可以產生非框架加密文字。所有支援的語言實作都可以解密影格和非影格加密文字。

下表將說明無框架資料的組成欄位。位元組依顯示順序附加。


**無框架本文結構**  

| 欄位 | 長度 (以位元組為單位) | 
| --- | --- | 
| [IV](#body-unframed-iv) | 變數. 等於標題 [IV Length](#header-iv-length)位元組中指定的值。 | 
| [Encrypted Content Length](#body-unframed-content-length) | 8 | 
| [Encrypted Content](#body-unframed-content) | 變數. 等於前 8 個位元組中指定的值 (加密內容長度)。 | 
| [Authentication Tag](#body-unframed-tag) | 變數. 取決於使用的[演算法實作](algorithms-reference.md)。 | 

**IV**  
搭配[加密演算法](algorithms-reference.md)使用的初始向量 (IV)。

**加密的內容長度**  
加密內容或*加密文字*的長度。它會以 8 元組數值表示，並解譯為 64 位元的無符號整數，指出包含加密內容的位元組數量。  
就技術層面而言，允許的最大值為 2^63 - 1，或 8 Exbibyte (8 EiB)。不過，基於[實作演算法](algorithms-reference.md)所帶來的限制，現實層面的最大值則為 2^36 - 32，也就是 64 Gibibyte (64 GiB)。  
基於語言限制，此 SDK 的 Java 實作會將這個值進一步限制在 2^31 - 1 內，也就是 20 Gibibyte (2 GiB)。

**加密的內容**  
由[加密演算法](algorithms-reference.md)傳回的加密內容 (加密文字)。

**身分驗證標籤**  
本文的驗證值。這個值會用來驗證訊息本文。

### 具框架資料
<a name="body-framing"></a>

在具框架資料中，純文字資料被劃分為等長的部分，稱為*框架*。會使用唯一的 IV 和[內文 AAD](body-aad-reference.md) 分別 AWS Encryption SDK 加密每個影格。

**注意**  
盡可能使用影格資料。僅 AWS Encryption SDK 支援傳統用途的非影格資料。的某些語言實作仍然 AWS Encryption SDK 可以產生非框架加密文字。所有支援的語言實作都可以解密影格和非影格加密文字。

 

[框架長度](#header-frame-length)，即框架中[加密內容](#body-framed-regular-content)的長度，可能會因每個訊息而有所不同。框架中的位元組數目上限為 2^32 - 1。訊息中框架的位元組數目上限為 2^32 - 1。

框架包含兩種類型：*一般*與*最終*。每個訊息都必須組成為或包含最終框架。

訊息中的所有一般框架都有相同的框架長度。最終框架可以有不同的框架長度。

具框架資料中的框架組成會因加密內容的長度而有所不同。
+ **等於影格長度** — 當加密的內容長度與一般影格的影格長度相同時，訊息可以包含包含資料的一般影格，接著是長度為零 (0) 的最終影格。或者，訊息的組成可以為僅包含資料的最終框架。在此情況下，最終框架的框架長度與一般框架相同。
+ 影**格長度的倍**數 — 當加密的內容長度是一般影格長度的確切倍數時，訊息可以結束於包含資料的一般影格，接著是長度為零 (0) 的最終影格。或者，訊息的結尾可以為包含資料的最終框架。在此情況下，最終框架的框架長度與一般框架相同。
+ **不是影格長度的倍**數 — 當加密的內容長度不是一般影格影格長度的確切倍數時，最終影格會包含剩餘的資料。最終框架的框架長度小於一般框架的框架長度。
+ **小於影格長度** — 當加密的內容長度小於一般影格的影格長度時，訊息會包含包含所有資料的最終影格。最終框架的框架長度小於一般框架的框架長度。

下表將說明框架的組成欄位。位元組依顯示順序附加。


**具框架本文結構、一般框架**  

| 欄位 | 長度 (以位元組為單位) | 
| --- | --- | 
| [Sequence Number](#body-framed-regular-sequence-number) | 4 | 
| [IV](#body-framed-regular-iv) | 變數. 等於標題 [IV Length](#header-iv-length)位元組中指定的值。 | 
| [Encrypted Content](#body-framed-regular-content) | 變數. 等於標題[Frame Length](#header-frame-length)中指定的值。 | 
| [Authentication Tag](#body-framed-regular-tag) | 變數. 取決於使用的演算法，會於標題的[Algorithm ID](#header-algorithm-id) 中指定。 | 

**序號**  
框架序號。這個序號為框架的遞增計數器編號。它會以 4 位元組數值表示，並解譯為 32 位元的無符號整數。  
具框架資料必須從序號 1 開始編號。後續框架必須依序編號，並比前一個框架多出 1。否則，加密程序就會停止，並回報錯誤。

**IV**  
框架的初始向量 (IV)。SDK 會使用決定性方法，為訊息中的每個框架建構不同的 IV。它的長度會由使用的[演算法套件](algorithms-reference.md)指定。

**加密的內容**  
由[加密演算法](algorithms-reference.md)傳回的框架加密內容 (加密文字)。

**身分驗證標籤**  
框架的驗證值。這個值會用來驗證整個框架。


**具框架本文結構、最終框架**  

| 欄位 | 長度 (以位元組為單位) | 
| --- | --- | 
| [Sequence Number End](#body-framed-final-sequence-number-end) | 4 | 
| [Sequence Number](#body-framed-final-sequence-number) | 4 | 
| [IV](#body-framed-final-iv) | 變數. 等於標題 [IV Length](#header-iv-length)位元組中指定的值。 | 
| [Encrypted Content Length](#body-framed-final-content-length) | 4 | 
| [Encrypted Content](#body-framed-final-content) | 變數. 等於前 4 個位元組中指定的值 (加密內容長度)。 | 
| [Authentication Tag](#body-framed-final-tag) | 變數. 取決於使用的演算法，會於標題的[Algorithm ID](#header-algorithm-id) 中指定。 | 

**序號結束**  
最終框架的指標。這個值會在十六進位表示法中編碼為 4 位元組的 `FF FF FF FF`。

**序號**  
框架序號。這個序號為框架的遞增計數器編號。它會以 4 位元組數值表示，並解譯為 32 位元的無符號整數。  
具框架資料必須從序號 1 開始編號。後續框架必須依序編號，並比前一個框架多出 1。否則，加密程序就會停止，並回報錯誤。

**IV**  
框架的初始向量 (IV)。SDK 會使用決定性方法，為訊息中的每個框架建構不同的 IV。IV 長度會由[演算法套件](algorithms-reference.md)指定。

**加密的內容長度**  
加密內容的長度。它會以 4 元組數值表示，並解譯為 32 位元的無符號整數，指出包含框架加密內容的位元組數量。

**加密的內容**  
由[加密演算法](algorithms-reference.md)傳回的框架加密內容 (加密文字)。

**身分驗證標籤**  
框架的驗證值。這個值會用來驗證整個框架。

## 頁尾結構
<a name="footer-structure"></a>

如果使用[含有簽章的演算法](algorithms-reference.md)，訊息格式就會包含頁尾。訊息頁尾包含以訊息標頭和內文計算[的數位簽章](concepts.md#digital-sigs)。下表將說明頁尾的組成欄位。位元組依顯示順序附加。訊息頁尾結構在訊息格式版本 1 和 2 中是相同的。


**頁尾結構**  

| 欄位 | 長度 (以位元組為單位) | 
| --- | --- | 
| [Signature Length](#footer-signature-length) | 2 | 
| [Signature](#footer-signature) | 變數. 等於前 2 個位元組中指定的值 (簽章長度)。 | 

**簽章長度**  
簽章的長度。它會以 2 元組數值表示，並解譯為 16 位元的無符號整數，指出包含簽章的位元組數量。

**簽章**  
簽章本身。

# AWS Encryption SDK 訊息格式範例
<a name="message-format-examples"></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 訊息格式的範例。每個範例顯示十六進位表示法的原始位元組，接著說明這些位元組代表什麼。

**Topics**
+ [

## 影格資料 （訊息格式第 1 版）
](#example-framed)
+ [

## 影格資料 （訊息格式第 2 版）
](#example-framed-2)
+ [

## 非影格資料 （訊息格式第 1 版）
](#example-nonframed)

## 影格資料 （訊息格式第 1 版）
<a name="example-framed"></a>

下列範例顯示訊息格式[版本 1 中影格資料的訊息格式](message-format.md)。

```
+--------+
| Header |
+--------+
01                                         Version (1.0)
80                                         Type (128, customer authenticated encrypted data)
0378                                       Algorithm ID (see 演算法參考)
6E7C0FBD 4DF4A999 717C22A2 DDFE1A27        Message ID (random 128-bit value)
008E                                       AAD Length (142)
0004                                       AAD Key-Value Pair Count (4)
0005                                       AAD Key-Value Pair 1, Key Length (5)
30746869 73                                AAD Key-Value Pair 1, Key ("0This")
0002                                       AAD Key-Value Pair 1, Value Length (2)
6973                                       AAD Key-Value Pair 1, Value ("is")
0003                                       AAD Key-Value Pair 2, Key Length (3)
31616E                                     AAD Key-Value Pair 2, Key ("1an")
000A                                       AAD Key-Value Pair 2, Value Length (10)
656E6372 79774690 6F6E                     AAD Key-Value Pair 2, Value ("encryption")
0008                                       AAD Key-Value Pair 3, Key Length (8)
32636F6E 74657874                          AAD Key-Value Pair 3, Key ("2context")
0007                                       AAD Key-Value Pair 3, Value Length (7)
6578616D 706C65                            AAD Key-Value Pair 3, Value ("example")
0015                                       AAD Key-Value Pair 4, Key Length (21)
6177732D 63727970 746F2D70 75626C69        AAD Key-Value Pair 4, Key ("aws-crypto-public-key")
632D6B65 79
0044                                       AAD Key-Value Pair 4, Value Length (68)
416A4173 7569326F 7430364C 4B77715A        AAD Key-Value Pair 4, Value ("AjAsui2ot06LKwqZXDJnU/Aqc2vD+0OkpOZ1cc8Tg2qd7rs5aLTg7lvfUEW/86+/5w==")
58444A6E 552F4171 63327644 2B304F6B
704F5A31 63633854 67327164 37727335
614C5467 376C7666 5545572F 38362B2F
35773D3D
0002                                       EncryptedDataKeyCount (2)
0007                                       Encrypted Data Key 1, Key Provider ID Length (7)
6177732D 6B6D73                            Encrypted Data Key 1, Key Provider ID ("aws-kms")
004B                                       Encrypted Data Key 1, Key Provider Information Length (75)
61726E3A 6177733A 6B6D733A 75732D77        Encrypted Data Key 1, Key Provider Information ("arn:aws:kms:us-west-2:111122223333:key/715c0818-5825-4245-a755-138a6d9a11e6")
6573742D 323A3131 31313232 32323333
33333A6B 65792F37 31356330 3831382D
35383235 2D343234 352D6137 35352D31
33386136 64396131 316536
00A7                                       Encrypted Data Key 1, Encrypted Data Key Length (167)
01010200 7857A1C1 F7370545 4ECA7C83        Encrypted Data Key 1, Encrypted Data Key
956C4702 23DCE8D7 16C59679 973E3CED
02A4EF29 7F000000 7E307C06 092A8648
86F70D01 0706A06F 306D0201 00306806
092A8648 86F70D01 0701301E 06096086
48016503 04012E30 11040C3F F02C897B
7A12EB19 8BF2D802 0110803B 24003D1F
A5474FBC 392360B5 CB9997E0 6A17DE4C
A6BD7332 6BF86DAB 60D8CCB8 8295DBE9
4707E356 ADA3735A 7C52D778 B3135A47
9F224BF9 E67E87
0007                                       Encrypted Data Key 2, Key Provider ID Length (7)
6177732D 6B6D73                            Encrypted Data Key 2, Key Provider ID ("aws-kms")
004E                                       Encrypted Data Key 2, Key Provider Information Length (78)
61726E3A 6177733A 6B6D733A 63612D63        Encrypted Data Key 2, Key Provider Information ("arn:aws:kms:ca-central-1:111122223333:key/9b13ca4b-afcc-46a8-aa47-be3435b423ff")
656E7472 616C2D31 3A313131 31323232
32333333 333A6B65 792F3962 31336361
34622D61 6663632D 34366138 2D616134
372D6265 33343335 62343233 6666
00A7                                       Encrypted Data Key 2, Encrypted Data Key Length (167)
01010200 78FAFFFB D6DE06AF AC72F79B        Encrypted Data Key 2, Encrypted Data Key
0E57BD87 3F60F4E6 FD196144 5A002C94
AF787150 69000000 7E307C06 092A8648
86F70D01 0706A06F 306D0201 00306806
092A8648 86F70D01 0701301E 06096086
48016503 04012E30 11040C36 CD985E12
D218B674 5BBC6102 0110803B 0320E3CD
E470AA27 DEAB660B 3E0CE8E0 8B1A89E4
57DCC69B AAB1294F 21202C01 9A50D323
72EBAAFD E24E3ED8 7168E0FA DB40508F
556FBD58 9E621C
02                                         Content Type (2, framed data)
00000000                                   Reserved
0C                                         IV Length (12)
00000100                                   Frame Length (256)
4ECBD5C0 9899CA65 923D2347                 IV
0B896144 0CA27950 CA571201 4DA58029        Authentication Tag
+------+
| Body |
+------+
00000001                                   Frame 1, Sequence Number (1)
6BD3FE9C ADBCB213 5B89E8F1                 Frame 1, IV
1F6471E0 A51AF310 10FA9EF6 F0C76EDF        Frame 1, Encrypted Content
F5AFA33C 7D2E8C6C 9C5D5175 A212AF8E
FBD9A0C3 C6E3FB59 C125DBF2 89AC7939
BDEE43A8 0F00F49E ACBBD8B2 1C785089
A90DB923 699A1495 C3B31B50 0A48A830
201E3AD9 1EA6DA14 7F6496DB 6BC104A4
DEB7F372 375ECB28 9BF84B6D 2863889F
CB80A167 9C361C4B 5EC07438 7A4822B4
A7D9D2CC 5150D414 AF75F509 FCE118BD
6D1E798B AEBA4CDB AD009E5F 1A571B77
0041BC78 3E5F2F41 8AF157FD 461E959A
BB732F27 D83DC36D CC9EBC05 00D87803
57F2BB80 066971C2 DEEA062F 4F36255D
E866C042 E1382369 12E9926B BA40E2FC
A820055F FB47E428 41876F14 3B6261D9
5262DB34 59F5D37E 76E46522 E8213640
04EE3CC5 379732B5 F56751FA 8E5F26AD        Frame 1, Authentication Tag
00000002                                   Frame 2, Sequence Number (2)
F1140984 FF25F943 959BE514                 Frame 2, IV
216C7C6A 2234F395 F0D2D9B9 304670BF        Frame 2, Encrypted Content
A1042608 8A8BCB3F B58CF384 D72EC004
A41455B4 9A78BAC9 36E54E68 2709B7BD
A884C1E1 705FF696 E540D297 446A8285
23DFEE28 E74B225A 732F2C0C 27C6BDA2
7597C901 65EF3502 546575D4 6D5EBF22
1FF787AB 2E38FD77 125D129C 43D44B96
778D7CEE 3C36625F FF3A985C 76F7D320
ED70B1F3 79729B47 E7D9B5FC 02FCE9F5
C8760D55 7779520A 81D54F9B EC45219D
95941F7E 5CBAEAC8 CEC13B62 1464757D
AC65B6EF 08262D74 44670624 A3657F7F
2A57F1FD E7060503 AC37E197 2F297A84
DF1172C2 FA63CF54 E6E2B9B6 A86F582B
3B16F868 1BBC5E4D 0B6919B3 08D5ABCF
FECDC4A4 8577F08B 99D766A1 E5545670
A61F0A3B A3E45A84 4D151493 63ECA38F        Frame 2, Authentication Tag
FFFFFFFF                                   Final Frame, Sequence Number End
00000003                                   Final Frame, Sequence Number (3)
35F74F11 25410F01 DD9E04BF                 Final Frame, IV
0000008E                                   Final Frame, Encrypted Content Length (142)
F7A53D37 2F467237 6FBD0B57 D1DFE830        Final Frame, Encrypted Content
B965AD1F A910AA5F 5EFFFFF4 BC7D431C
BA9FA7C4 B25AF82E 64A04E3A A0915526
88859500 7096FABB 3ACAD32A 75CFED0C
4A4E52A3 8E41484D 270B7A0F ED61810C
3A043180 DF25E5C5 3676E449 0986557F
C051AD55 A437F6BC 139E9E55 6199FD60
6ADC017D BA41CDA4 C9F17A83 3823F9EC
B66B6A5A 80FDB433 8A48D6A4 21CB
811234FD 8D589683 51F6F39A 040B3E3B        Final Frame, Authentication Tag
+--------+
| Footer |
+--------+
0066                                       Signature Length (102)
30640230 085C1D3C 63424E15 B2244448        Signature
639AED00 F7624854 F8CF2203 D7198A28
758B309F 5EFD9D5D 2E07AD0B 467B8317
5208B133 02301DF7 2DFC877A 66838028
3C6A7D5E 4F8B894E 83D98E7C E350F424
7E06808D 0FE79002 E24422B9 98A0D130
A13762FF 844D
```

## 影格資料 （訊息格式第 2 版）
<a name="example-framed-2"></a>

下列範例顯示訊息格式[版本 2 中影格資料的訊息格式](message-format.md)。

```
+--------+
| Header |
+--------+
02                                         Version (2.0)
0578                                       Algorithm ID (see Algorithms reference)
122747eb 21dfe39b 38631c61 7fad7340
cc621a30 32a11cc3 216d0204 fd148459        Message ID (random 256-bit value)
008e                                       AAD Length (142)
0004                                       AAD Key-Value Pair Count (4)
0005                                       AAD Key-Value Pair 1, Key Length (5)
30546869 73                                AAD Key-Value Pair 1, Key ("0This")
0002                                       AAD Key-Value Pair 1, Value Length (2)
6973                                       AAD Key-Value Pair 1, Value ("is")
0003                                       AAD Key-Value Pair 2, Key Length (3)
31616e                                     AAD Key-Value Pair 2, Key ("1an")
000a                                       AAD Key-Value Pair 2, Value Length (10)
656e6372 79707469 6f6e                     AAD Key-Value Pair 2, Value ("encryption")
0008                                       AAD Key-Value Pair 3, Key Length (8)
32636f6e 74657874                          AAD Key-Value Pair 3, Key ("2context")
0007                                       AAD Key-Value Pair 3, Value Length (7)
6578616d 706c65                            AAD Key-Value Pair 3, Value ("example")
0015                                       AAD Key-Value Pair 4, Key Length (21)
6177732d 63727970 746f2d70 75626c69        AAD Key-Value Pair 4, Key ("aws-crypto-public-key")
632d6b65 79
0044                                       AAD Key-Value Pair 4, Value Length (68)
41746733 72703845 41345161 36706669        AAD Key-Value Pair 4, Value ("QXRnM3JwOEVBNFFhNnBmaTk3MUlTNTk3NHpOMnlZWE5vSmtwRHFPc0dIYkVaVDRqME5OMlFkRStmbTFVY01WdThnPT0=")
39373149 53353937 347a4e32 7959584e
6f4a6b70 44714f73 47486245 5a54346a
304e4e32 5164452b 666d3155 634d5675
38673d3d
0001                                       Encrypted Data Key Count (1)
0007                                       Encrypted Data Key 1, Key Provider ID Length (7)
6177732d 6b6d73                            Encrypted Data Key 1, Key Provider ID ("aws-kms")
004b                                       Encrypted Data Key 1, Key Provider Information Length (75)
61726e3a 6177733a 6b6d733a 75732d77        Encrypted Data Key 1, Key Provider Information ("arn:aws:kms:us-west-2:658956600833:key/b3537ef1-d8dc-4780-9f5a-55776cbb2f7f")
6573742d 323a3635 38393536 36303038
33333a6b 65792f62 33353337 6566312d
64386463 2d343738 302d3966 35612d35
35373736 63626232 663766
00a7                                       Encrypted Data Key 1, Encrypted Data Key Length (167)
01010100 7840f38c 275e3109 7416c107        Encrypted Data Key 1, Encrypted Data Key
29515057 1964ada3 ef1c21e9 4c8ba0bd
bc9d0fb4 14000000 7e307c06 092a8648
86f70d01 0706a06f 306d0201 00306806
092a8648 86f70d01 0701301e 06096086
48016503 04012e30 11040c39 32d75294
06063803 f8460802 0110803b 2a46bc23
413196d2 903bf1d7 3ed98fc8 a94ac6ed
e00ee216 74ec1349 12777577 7fa052a5
ba62e9e4 f2ac8df6 bcb1758f 2ce0fb21
cc9ee5c9 7203bb
02                                         Content Type (2, framed data)
00001000                                   Frame Length (4096)
05cd035b 29d5499d 4587570b 87502afe        Algorithm Suite Data (key commitment)
634f7b2c c3df2aa9 88a10105 4a2c7687 
76cb339f 2536741f 59a1c202 4f2594ab        Authentication Tag
+------+
| Body |
+------+
ffffffff                                   Final Frame, Sequence Number End
00000001                                   Final Frame, Sequence Number (1)
00000000 00000000 00000001                 Final Frame, IV
00000009                                   Final Frame, Encrypted Content Length (9)
fa6e39c6 02927399 3e                       Final Frame, Encrypted Content
f683a564 405d68db eeb0656c d57c9eb0        Final Frame, Authentication Tag
+--------+
| Footer |
+--------+
0067                                       Signature Length (103)
30650230 2a1647ad 98867925 c1712e8f        Signature 
ade70b3f 2a2bc3b8 50eb91ef 56cfdd18 
967d91d8 42d92baf 357bba48 f636c7a0
869cade2 023100aa ae12d08f 8a0afe85
e5054803 110c9ed8 11b2e08a c4a052a9
074217ea 3b01b660 534ac921 bf091d12
3657e2b0 9368bd
```

## 非影格資料 （訊息格式第 1 版）
<a name="example-nonframed"></a>

以下範例顯示無框架資料的訊息格式。

**注意**  
盡可能使用影格資料。僅 AWS Encryption SDK 支援非影格資料供舊版使用。的某些語言實作仍然 AWS Encryption SDK 可以產生非框架加密文字。所有支援的語言實作都可以解密影格和非影格加密文字。

```
+--------+
| Header |
+--------+
01                                         Version (1.0)
80                                         Type (128, customer authenticated encrypted data)
0378                                       Algorithm ID (see 演算法參考)
B8929B01 753D4A45 C0217F39 404F70FF        Message ID (random 128-bit value)
008E                                       AAD Length (142)
0004                                       AAD Key-Value Pair Count (4)
0005                                       AAD Key-Value Pair 1, Key Length (5)
30746869 73                                AAD Key-Value Pair 1, Key ("0This")
0002                                       AAD Key-Value Pair 1, Value Length (2)
6973                                       AAD Key-Value Pair 1, Value ("is")
0003                                       AAD Key-Value Pair 2, Key Length (3)
31616E                                     AAD Key-Value Pair 2, Key ("1an")
000A                                       AAD Key-Value Pair 2, Value Length (10)
656E6372 79774690 6F6E                     AAD Key-Value Pair 2, Value ("encryption")
0008                                       AAD Key-Value Pair 3, Key Length (8)
32636F6E 74657874                          AAD Key-Value Pair 3, Key ("2context")
0007                                       AAD Key-Value Pair 3, Value Length (7)
6578616D 706C65                            AAD Key-Value Pair 3, Value ("example")
0015                                       AAD Key-Value Pair 4, Key Length (21)
6177732D 63727970 746F2D70 75626C69        AAD Key-Value Pair 4, Key ("aws-crypto-public-key")
632D6B65 79
0044                                       AAD Key-Value Pair 4, Value Length (68)
41734738 67473949 6E4C5075 3136594B        AAD Key-Value Pair 4, Value ("AsG8gG9InLPu16YKlqXTOD+nykG8YqHAhqecj8aXfD2e5B4gtVE73dZkyClA+rAMOQ==")
6C715854 4F442B6E 796B4738 59714841
68716563 6A386158 66443265 35423467
74564537 33645A6B 79436C41 2B72414D
4F513D3D
0002                                       Encrypted Data Key Count (2)
0007                                       Encrypted Data Key 1, Key Provider ID Length (7)
6177732D 6B6D73                            Encrypted Data Key 1, Key Provider ID ("aws-kms")
004B                                       Encrypted Data Key 1, Key Provider Information Length (75)
61726E3A 6177733A 6B6D733A 75732D77        Encrypted Data Key 1, Key Provider Information ("arn:aws:kms:us-west-2:111122223333:key/715c0818-5825-4245-a755-138a6d9a11e6")
6573742D 323A3131 31313232 32323333
33333A6B 65792F37 31356330 3831382D
35383235 2D343234 352D6137 35352D31
33386136 64396131 316536
00A7                                       Encrypted Data Key 1, Encrypted Data Key Length (167)
01010200 7857A1C1 F7370545 4ECA7C83        Encrypted Data Key 1, Encrypted Data Key
956C4702 23DCE8D7 16C59679 973E3CED
02A4EF29 7F000000 7E307C06 092A8648
86F70D01 0706A06F 306D0201 00306806
092A8648 86F70D01 0701301E 06096086
48016503 04012E30 11040C28 4116449A
0F2A0383 659EF802 0110803B B23A8133
3A33605C 48840656 C38BCB1F 9CCE7369
E9A33EBE 33F46461 0591FECA 947262F3
418E1151 21311A75 E575ECC5 61A286E0
3E2DEBD5 CB005D
0007                                       Encrypted Data Key 2, Key Provider ID Length (7)
6177732D 6B6D73                            Encrypted Data Key 2, Key Provider ID ("aws-kms")
004E                                       Encrypted Data Key 2, Key Provider Information Length (78)
61726E3A 6177733A 6B6D733A 63612D63        Encrypted Data Key 2, Key Provider Information ("arn:aws:kms:ca-central-1:111122223333:key/9b13ca4b-afcc-46a8-aa47-be3435b423ff")
656E7472 616C2D31 3A313131 31323232
32333333 333A6B65 792F3962 31336361
34622D61 6663632D 34366138 2D616134
372D6265 33343335 62343233 6666
00A7                                       Encrypted Data Key 2, Encrypted Data Key Length (167)
01010200 78FAFFFB D6DE06AF AC72F79B        Encrypted Data Key 2, Encrypted Data Key
0E57BD87 3F60F4E6 FD196144 5A002C94
AF787150 69000000 7E307C06 092A8648
86F70D01 0706A06F 306D0201 00306806
092A8648 86F70D01 0701301E 06096086
48016503 04012E30 11040CB2 A820D0CC
76616EF2 A6B30D02 0110803B 8073D0F1
FDD01BD9 B0979082 099FDBFC F7B13548
3CC686D7 F3CF7C7A CCC52639 122A1495
71F18A46 80E2C43F A34C0E58 11D05114
2A363C2A E11397
01                                         Content Type (1, nonframed data)
00000000                                   Reserved
0C                                         IV Length (12)
00000000                                   Frame Length (0, nonframed data)
734C1BBE 032F7025 84CDA9D0                 IV
2C82BB23 4CBF4AAB 8F5C6002 622E886C        Authentication Tag
+------+
| Body |
+------+
D39DD3E5 915E0201 77A4AB11                 IV
00000000 0000028E                          Encrypted Content Length (654)
E8B6F955 B5F22FE4 FD890224 4E1D5155        Encrypted Content
5871BA4C 93F78436 1085E4F8 D61ECE28
59455BD8 D76479DF C28D2E0B BDB3D5D3
E4159DFE C8A944B6 685643FC EA24122B
6766ECD5 E3F54653 DF205D30 0081D2D8
55FCDA5B 9F5318BC F4265B06 2FE7C741
C7D75BCC 10F05EA5 0E2F2F40 47A60344
ECE10AA7 559AF633 9DE2C21B 12AC8087
95FE9C58 C65329D1 377C4CD7 EA103EC1
31E4F48A 9B1CC047 EE5A0719 704211E5
B48A2068 8060DF60 B492A737 21B0DB21
C9B21A10 371E6179 78FAFB0B BAAEC3F4
9D86E334 701E1442 EA5DA288 64485077
54C0C231 AD43571A B9071925 609A4E59
B8178484 7EB73A4F AAE46B26 F5B374B8
12B0000C 8429F504 936B2492 AAF47E94
A5BA804F 7F190927 5D2DF651 B59D4C2F
A15D0551 DAEBA4AF 2060D0D5 CB1DA4E6
5E2034DB 4D19E7CD EEA6CF7E 549C86AC
46B2C979 AB84EE12 202FD6DF E7E3C09F
C2394012 AF20A97E 369BCBDA 62459D3E
C6FFB914 FEFD4DE5 88F5AFE1 98488557
1BABBAE4 BE55325E 4FB7E602 C1C04BEE
F3CB6B86 71666C06 6BF74E1B 0F881F31
B731839B CF711F6A 84CA95F5 958D3B44
E3862DF6 338E02B5 C345CFF8 A31D54F3
6920AA76 0BF8E903 552C5A04 917CCD11
D4E5DF5C 491EE86B 20C33FE1 5D21F0AD
6932E67C C64B3A26 B8988B25 CFA33E2B
63490741 3AB79D60 D8AEFBE9 2F48E25A
978A019C FE49EE0A 0E96BF0D D6074DDB
66DFF333 0E10226F 0A1B219C BE54E4C2
2C15100C 6A2AA3F1 88251874 FDC94F6B
9247EF61 3E7B7E0D 29F3AD89 FA14A29C
76E08E9B 9ADCDF8C C886D4FD A69F6CB4
E24FDE26 3044C856 BF08F051 1ADAD329
C4A46A1E B5AB72FE 096041F1 F3F3571B
2EAFD9CB B9EB8B83 AE05885A 8F2D2793
1E3305D9 0C9E2294 E8AD7E3B 8E4DEC96
6276C5F1 A3B7E51E 422D365D E4C0259C
50715406 822D1682 80B0F2E5 5C94
65B2E942 24BEEA6E A513F918 CCEC1DE3      Authentication Tag
+--------+
| Footer |
+--------+
0067                                     Signature Length (103)
30650230 7229DDF5 B86A5B64 54E4D627      Signature
CBE194F1 1CC0F8CF D27B7F8B F50658C0
BE84B355 3CED1721 A0BE2A1B 8E3F449E
1BEB8281 023100B2 0CB323EF 58A4ACE3
1559963B 889F72C3 B15D1700 5FB26E61
331F3614 BC407CEE B86A66FA CBF74D9E
34CB7E4B 363A38
```

# 的內文額外驗證資料 (AAD) 參考 AWS Encryption SDK
<a name="body-aad-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/)。  | 

您必須為每個密碼編譯操作，將額外的驗證資料 (AAD) 提供給 [AES-GCM 演算法](algorithms-reference.md)。對於具框架和無框架[內文資料](message-format.md#body-structure)都是如此。如需有關 AAD 及其在 Galois/計數器模式 (GCM) 中的用法的詳細資訊，請參閱[區塊加密操作模式的建議：Galois/計數器模式 (GCM) 和 GMAC](https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-38d.pdf)。

下表說明內文 AAD 的組成欄位。位元組依顯示順序附加。


**內文 AAD 結構**  

| 欄位 | 長度 (以位元組為單位) | 
| --- | --- | 
| [Message ID](#body-aad-message-id) | 16 | 
| [Body AAD Content](#body-aad-content) | 變數. 請參閱下列清單中的內文 AAD 內容。 | 
| [Sequence Number](#body-aad-sequence-number) | 4 | 
| [Content Length](#body-aad-content-length) | 8 | 

**訊息 ID**  
在訊息標頭中設定的相同 [Message ID](message-format.md#header-message-id) 值。

**內文 AAD 內容**  
由所使用內文資料類型決定的 UTF-8 編碼值。  
對於[無框架資料](message-format.md#body-no-framing)，請使用值 `AWSKMSEncryptionClient Single Block`。  
對於[具框架資料](message-format.md#body-framing)中的一般框架，請使用值 `AWSKMSEncryptionClient Frame`。  
對於[具框架資料](message-format.md#body-framing)中的最終框架，請使用值 `AWSKMSEncryptionClient Final Frame`。

**序號**  
4 位元組值，解譯為 32 位元的無正負號整數。  
對於[具框架資料](message-format.md#body-framing)，這是框架序號。  
對於[無框架資料](message-format.md#body-no-framing)，請使用值 1，在十六進位表示法中編碼為 4 位元組 `00 00 00 01`。

**內容長度**  
提供給演算法進行加密的純文字資料長度，以位元組為單位。它是 8 位元組值，並解譯為 64 位元的無正負號整數。

# 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 曲線)。

# AWS Encryption SDK 初始化向量參考
<a name="IV-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 提供所有支援的[演算法套件](algorithms-reference.md)所需的[初始化向量](https://en.wikipedia.org/wiki/Initialization_vector) (IVs)。開發套件使用框架序號來建構 IV，因此同一訊息沒有兩個框架可使用相同的 IV。

每個 96 位元 (12 位元組) IV 由兩個大端序位元組陣列建構得來，並以下列順序串連：
+ 64 位元：0 (保留以供日後使用)。
+ 32 位元：框架序號。對於標頭驗證標籤，這個值全是零。

在引進[資料金鑰快取](data-key-caching.md)之前， AWS Encryption SDK 一直使用新的資料金鑰來加密每則訊息，並隨機產生所有 IV。因為資料金鑰從未重複使用，因此隨機產生的 IV 在密碼演算法上是安全的。當開發套件引進資料金鑰快取 (特意重複使用資料金鑰)，我們也變更開發套件產生 IV 的方式。

在訊息中使用無法重複的決定性 IV，會大幅增加可在單一資料金鑰下安全執行的呼叫數量。此外，快取的資料金鑰一律使用演算法套件搭配[金鑰衍生函數](https://en.wikipedia.org/wiki/Key_derivation_function)。使用確定性 IV 搭配虛擬隨機金鑰衍生函數，從資料金鑰衍生加密金鑰 AWS Encryption SDK ，可讓 加密 2^32 則訊息，而不會超過密碼編譯邊界。

# AWS KMS 階層式 keyring 技術詳細資訊
<a name="hierarchical-keyring-details"></a>

[AWS KMS 階層式 keyring](use-hierarchical-keyring.md) 使用不必要資料金鑰來加密每個訊息，並使用衍生自作用中分支金鑰的唯一包裝金鑰來加密每個資料金鑰。它使用計數器模式中的[金鑰衍生](https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-108r1.pdf)搭配 HMAC SHA-256 的虛擬隨機函數，來衍生具有下列輸入的 32 位元組包裝金鑰。
+ 16 位元組隨機 salt
+ 作用中分支金鑰
+ 金鑰提供者識別符 "aws-kms-hierarchy" [的 UTF-8 編碼](https://en.wikipedia.org/wiki/UTF-8)值

階層式 keyring 使用衍生的包裝金鑰，使用 AES-GCM-256 搭配 16 位元組身分驗證標籤和下列輸入來加密純文字資料金鑰的副本。
+ 衍生的包裝金鑰會用作 AES-GCM 密碼金鑰
+ 資料金鑰用作 AES-GCM 訊息
+ 12 位元組隨機初始化向量 (IV) 用作 AES-GCM IV
+ 包含下列序列化值的其他已驗證資料 (AAD)。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/encryption-sdk/latest/developer-guide/hierarchical-keyring-details.html)