AWS Encryption SDK 訊息格式參考 - AWS Encryption SDK

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

AWS Encryption SDK 訊息格式參考

本頁面上提供的參考可讓您建置自己的並與 AWS Encryption SDK相容的加密儲存庫。如果您不是自己建置相容的加密儲存庫,可能不需要此資訊。

若要在其中一個支援的程式設計語言 AWS Encryption SDK 中使用 ,請參閱 程式設計語言

如需定義正確 AWS Encryption SDK 實作元素的規格,請參閱 中的AWS Encryption SDK 規格 GitHub。

中的加密操作會 AWS Encryption SDK 傳回單一資料結構或加密訊息,其中包含加密的資料 (密碼文字) 和所有加密的資料金鑰。您需要了解訊息格式,才能掌握此資料結構,或建置可加以讀寫的程式庫。

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

支援的演算法套件 AWS Encryption SDK 使用兩種訊息格式版本之一。沒有金鑰承諾的演算法套件使用訊息格式第 1 版。具有金鑰承諾的演算法套件使用訊息格式第 2 版。

標題結構

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

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

注意

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

標題結構
欄位 訊息格式第 1 版

長度 (位元組)

訊息格式第 2 版

長度 (位元組)

Version 1 1
Type 1 不存在
Algorithm ID 2 2
Message ID 16 32
AAD Length

2

加密內容為空時,2 位元組AAD長度欄位的值為 0。

2

加密內容為空時,2 位元組AAD長度欄位的值為 0。

AAD

變數. 此欄位的長度會顯示在先前的 2 個位元組 (AAD 長度欄位) 中。

加密內容為空時,標頭中沒有AAD欄位。

變數. 此欄位的長度會顯示在先前的 2 個位元組 (AAD 長度欄位) 中。

加密內容為空時,標頭中沒有AAD欄位。

Encrypted Data Key Count 2 2
Encrypted Data Key(s) 變數. 取決於加密資料金鑰的數量與每個加密資料金鑰的長度。 變數. 取決於加密資料金鑰的數量與每個加密資料金鑰的長度。
Content Type 1 1
Reserved 4 不存在
IV Length 1 不存在
Frame Length 4 4
Algorithm Suite Data 不存在 變數。取決於用來產生訊息的演算法
Header Authentication 變數. 取決於用來產生訊息的演算法 變數. 取決於用來產生訊息的演算法
版本

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

類型

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

此欄位不存在於訊息格式版本 2。

演算法 ID

所使用演算法的識別碼。它會以 2 位元組數值表示,並解譯為 16 位元的無符號整數。如需演算法的詳細資訊,請參閱AWS Encryption SDK 演算法參考

訊息 ID

隨機產生的值,可識別訊息。訊息 ID:

  • 唯一識別加密訊息。

  • 以弱式繫結方式,將訊息標題繫結至訊息本文。

  • 提供安全的機制來搭配多個加密訊息重複使用資料金鑰。

  • 避免在 AWS Encryption SDK中意外重複使用資料金鑰,或用盡所有金鑰。

此值為訊息格式版本 1 的 128 位元,以及版本 2 的 256 位元。

AAD 長度

其他已驗證資料 () 的長度AAD。它是 2 位元組值,解譯為 16 位元未簽署整數,指定包含 的位元組數AAD。

加密內容為空時,AAD長度欄位的值為 0。

AAD

額外的驗證資料。AAD 是加密內容 的編碼,金鑰值對的陣列,其中每個金鑰和值都是 UTF-8 個編碼字元的字串。加密內容會轉換為位元組序列,並用於AAD值。當加密內容為空時,標頭中沒有AAD欄位。

如果使用含有簽章的演算法,加密內容就必須包含金鑰值組 {'aws-crypto-public-key', Qtxt}。Qtxt 代表根據 SEC1 2.0 版壓縮的橢圓曲線點 Q,然後是 base64 編碼。加密內容可以包含其他值,但建構的 長度上限為 AAD 2^16 - 1 個位元組。

下表說明形成 的欄位AAD。索引鍵值對會根據 UTF-8 字元程式碼,依索引鍵遞增排序。位元組依顯示順序附加。

AAD 結構
欄位 長度 (位元組)
Key-Value Pair Count 2
Key Length 2
Key 變數. 等於前 2 個位元組中指定的值 (金鑰長度)。
Value Length 2
Value 變數. 等於前 2 個位元組中指定的值 (數值長度)。
Key-Value 對計數

中的鍵值對數目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)

加密資料金鑰的序列。序列長度取決於加密資料金鑰的數量與每個加密資料金鑰的長度。序列會包含至少一個加密資料金鑰。

下表將說明每個加密資料金鑰的組成欄位。位元組依顯示順序附加。

加密資料金鑰結構
欄位 長度 (位元組)
Key Provider ID Length 2
Key Provider ID 變數. 等於前 2 個位元組中指定的值 (金鑰提供者 ID 長度)。
Key Provider Information Length 2
Key Provider Information 變數. 等於前 2 個位元組中指定的值 (金鑰提供者資訊長度)。
Encrypted Data Key Length 2
Encrypted Data Key 變數. 等於前 2 個位元組中指定的值 (加密資料金鑰長度)。
金鑰提供者 ID 長度

金鑰提供者識別碼的長度。它會以 2 元組數值表示,並解譯為 16 位元的無符號整數,指出包含金鑰提供者 ID 的位元組數量。

金鑰提供者 ID

金鑰提供者識別碼。它會用來指出加密資料金鑰的提供者,以而且可供擴充。

金鑰提供者資訊長度

金鑰提供者資訊的長度。它會以 2 元組數值表示,並解譯為 16 位元的無符號整數,指出包含金鑰提供者資訊的位元組數量。

金鑰提供者資訊

金鑰提供者資訊。它會取決於金鑰提供者。

當 AWS KMS 是主要金鑰提供者或您使用 AWS KMS 鍵環時,此值包含 的 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 的位元組數量。此值取決於產生訊息的演算法 IV 位元組值。

此欄位不存在於訊息格式第 2 版中,僅支援在訊息標頭中使用確定性 IV 值的演算法套件。

框架長度

每個影格資料框架的長度。它是解譯為 32 位元未簽署整數的 4 位元組值,用於指定每個影格中的位元組數。當資料為非架構時,即當Content Type欄位的值為 1 時,此值必須為 0。

注意

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

演算法套件資料

產生訊息的演算法所需的補充資料。長度和內容由演算法決定。其長度可能是 0。

此欄位不存在於訊息格式版本 1。

標頭身分驗證

標題驗證取決於產生訊息的演算法。標題驗證會計算整個標題。當中包含一個 IV 與一個驗證標籤。位元組依顯示順序附加。

標題驗證結構
欄位 1.0 版長度 (位元組) 2.0 版的長度 (位元組)
IV 變數. 取決於產生訊息的演算法 IV 位元組值。 N/A
Authentication Tag 變數. 取決於產生訊息的演算法驗證標籤位元組值。 變數. 取決於產生訊息的演算法驗證標籤位元組值。
IV

用來計算標題驗證標籤的初始向量 (IV)。

訊息格式第 2 版的標頭中沒有此欄位。訊息格式第 2 版僅支援在訊息標頭中使用確定性 IV 值的演算法套件。

驗證標籤

標題的驗證值。這個值會用來驗證標題的整體內容。

本文結構

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

無框架資料

非架構資料會在具有唯一 IV 和內文AAD的單一 Blob 中加密。

注意

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

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

無框架本文結構
欄位 長度 (以位元組為單位)
IV 變數. 等於標題 IV Length位元組中指定的值。
Encrypted Content Length 8
Encrypted Content 變數. 等於前 8 個位元組中指定的值 (加密內容長度)。
Authentication Tag 變數. 取決於使用的演算法實作
IV

搭配加密演算法使用的初始向量 (IV)。

加密的內容長度

加密內容或加密文字的長度。它會以 8 元組數值表示,並解譯為 64 位元的無符號整數,指出包含加密內容的位元組數量。

就技術層面而言,允許的最大值為 2^63 - 1,或 8 Exbibyte (8 EiB)。不過,基於實作演算法所帶來的限制,現實層面的最大值則為 2^36 - 32,也就是 64 Gibibyte (64 GiB)。

注意

由於語言的限制,Java 實作SDK進一步將此值限制為 2^31 - 1 或 2 GB (2 GiB)。

加密的內容

加密演算法傳回的加密內容 (加密文字)。

驗證標籤

本文的驗證值。這個值會用來驗證訊息本文。

具框架資料

在具框架資料中,純文字資料被劃分為等長的部分,稱為框架。會使用唯一的 IV 和內文個別 AWS Encryption SDK 加密每個影格。 AAD

注意

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

框架長度,即框架中加密內容的長度,可能會因每個訊息而有所不同。框架中的位元組數目上限為 2^32 - 1。訊息中框架的位元組數目上限為 2^32 - 1。

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

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

具框架資料中的框架組成會因加密內容的長度而有所不同。

  • 等於影格長度 — 當加密的內容長度與一般影格的影格長度相同時,訊息可以包含包含資料的一般影格,然後是零 (0) 長度的最終影格。或者,訊息的組成可以為僅包含資料的最終框架。在此情況下,最終框架的框架長度與一般框架相同。

  • 格長度的倍數 — 當加密的內容長度是一般影格長度的確切倍數時,訊息結尾會是包含資料的一般影格,接著是零 (0) 長度的最終影格。或者,訊息的結尾可以為包含資料的最終框架。在此情況下,最終框架的框架長度與一般框架相同。

  • 不是影格長度的倍數 — 當加密的內容長度不是一般影格的影格長度的確切倍數時,最終影格會包含剩餘的資料。最終框架的框架長度小於一般框架的框架長度。

  • 小於影格長度 — 當加密的內容長度小於一般影格的影格長度時,訊息會包含包含所有資料的最終影格。最終框架的框架長度小於一般框架的框架長度。

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

具框架本文結構、一般框架
欄位 長度 (以位元組為單位)
Sequence Number 4
IV 變數. 等於標題 IV Length位元組中指定的值。
Encrypted Content 變數. 等於標題Frame Length中指定的值。
Authentication Tag 變數. 取決於使用的演算法,會於標題的Algorithm ID 中指定。
序列編號

框架序號。這個序號為框架的遞增計數器編號。它會以 4 位元組數值表示,並解譯為 32 位元的無符號整數。

具框架資料必須從序號 1 開始編號。後續框架必須依序編號,並比前一個框架多出 1。否則,加密程序就會停止,並回報錯誤。

IV

框架的初始向量 (IV)。SDK 使用決定性方法來建構訊息中每個影格的不同 IV。它的長度會由使用的演算法套件指定。

加密的內容

加密演算法傳回的框架加密內容 (加密文字)。

驗證標籤

框架的驗證值。這個值會用來驗證整個框架。

具框架本文結構、最終框架
欄位 長度 (以位元組為單位)
Sequence Number End 4
Sequence Number 4
IV 變數. 等於標題 IV Length位元組中指定的值。
Encrypted Content Length 4
Encrypted Content 變數. 等於前 4 個位元組中指定的值 (加密內容長度)。
Authentication Tag 變數. 取決於使用的演算法,會於標題的Algorithm ID 中指定。
序列編號結束

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

序列編號

框架序號。這個序號為框架的遞增計數器編號。它會以 4 位元組數值表示,並解譯為 32 位元的無符號整數。

具框架資料必須從序號 1 開始編號。後續框架必須依序編號,並比前一個框架多出 1。否則,加密程序就會停止,並回報錯誤。

IV

框架的初始向量 (IV)。SDK 使用決定性方法來建構訊息中每個影格的不同 IV。IV 長度會由演算法套件指定。

加密的內容長度

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

加密的內容

加密演算法傳回的框架加密內容 (加密文字)。

驗證標籤

框架的驗證值。這個值會用來驗證整個框架。

如果使用含有簽章的演算法,訊息格式就會包含頁尾。訊息頁尾包含透過訊息標頭和內文計算的數位簽章。下表將說明頁尾的組成欄位。位元組依顯示順序附加。訊息頁尾結構在訊息格式版本 1 和 2 中是相同的。

頁尾結構
欄位 長度 (以位元組為單位)
Signature Length 2
Signature 變數. 等於前 2 個位元組中指定的值 (簽章長度)。
簽章長度

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

簽章

簽章本身。