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

長度 (位元組)

版本 1 1
Type 1 不存在
演算法 ID 2 2
訊息 ID 16 32
AAD 長度

2

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

2

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

AAD

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

加密內容為空白時,標題中不會有 AAD 欄位。

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

加密內容為空白時,標題中不會有 AAD 欄位。

加密資料金鑰計數 2 2
加密資料金鑰 變數. 取決於加密資料金鑰的數量與每個加密資料金鑰的長度。 變數. 取決於加密資料金鑰的數量與每個加密資料金鑰的長度。
內容類型 1 1
已預留 4 不存在
IV 長度 1 不存在
框架長度 4 4
演算法套件資料 不存在 變數。取決於用來產生訊息的演算法
標題驗證 變數. 取決於用來產生訊息的演算法 變數. 取決於用來產生訊息的演算法
版本

此本訊息格式的版本。該版本是編碼為字節或十六進制表示法02的 1 01 或 2

Type

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

郵件格式版本 2 中不存在此欄位。

演算法 ID

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

訊息 ID

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

  • 唯一識別加密訊息。

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

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

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

這個值是 128 位元的訊息格式版本 1,而在版本 2 中則為 256 位元。

AAD 長度

額外的驗證資料 (AAD) 的長度。它會以 2 元組數值表示,並解譯為 16 位元的無符號整數,指出包含 AAD 的位元組數量。

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

AAD

額外的驗證資料。AAD 為加密內容編碼方式,它是金鑰值組的陣列,當中的每個金鑰與值皆為 UTF-8 編碼字元組成的字串。加密內容會轉換為位元組序列,並用於表示 AAD 數值。當加密內容為空白時,標題中不會有 AAD 欄位。

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

下表將說明 AAD 的組成欄位。金鑰會依照 UTF-8 字元碼來遞增排序金鑰值組。位元組依顯示順序附加。

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

AAD 中的金鑰值組數量。它會以 2 元組數值表示,並解譯為 16 位元的無符號整數,指出 AAD 中的金鑰值組數量。AAD 中的金鑰值組數量上限為 2^16 - 1。

如果沒有加密內容,或加密內容為空白,此欄位就不會出現在 AAD 結構中。

金鑰長度

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

金錀

金鑰值組的金鑰。它會以 UTF-8 編碼位元組序列表示。

值長度

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

Value

金鑰值組的值。它會以 UTF-8 編碼位元組序列表示。

加密資料金鑰計數

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

加密資料金鑰

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

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

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

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

金鑰提供者 ID

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

金鑰提供者資訊長度

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

金鑰提供者資訊

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

如果 AWS KMS 是主金鑰提供者或您正在使用金 Amazon AWS KMS 環,此值 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 中,此版本 2 只支援在郵件標頭中使用確定性 IV 值的演算法套件。

框架長度

框架數據的每一幀的長度。它是一個 4 字節值,解釋為 32 位無符號整數,用於指定每個幀中的字節數。當資料為非框架時,也就是當Content Type欄位的值為 1 時,此值必須為 0。

注意

盡可能使用框架數據。僅 AWS Encryption SDK 支援舊版使用的非框架資料。的某些語言實作仍然 AWS Encryption SDK 可以產生非框架加密文字。所有支持的語言實現都可以解密框架和非框加密文本。

演算法套件資料

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

郵件格式版本 1 中不存在此欄位。

標題驗證

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

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

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

此欄位不會出現在郵件格式版本 2 的標頭中。郵件格式版本 2 僅支援在郵件標頭中使用確定性 IV 值的演算法套件。

驗證標籤

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

本文結構

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

無框架資料

無框架資料會於單一 Blob 中使用唯一的 IV 與本文 AAD 進行加密。

注意

盡可能使用框架數據。僅 AWS Encryption SDK 支援舊版使用的非框架資料。的某些語言實作仍然 AWS Encryption SDK 可以產生非框架加密文字。所有支持的語言實現都可以解密框架和非框加密文本。

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

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

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

加密內容長度

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

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

注意

基於語言限制,此 SDK 的 Java 實作會將這個值進一步限制在 2^31 - 1 內,也就是 20 Gibibyte (2 GiB)。

加密內容

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

驗證標籤

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

具框架資料

在具框架資料中,純文字資料被劃分為等長的部分,稱為框架。使用獨 AWS Encryption SDK 特的 IV 和主體 A AD 分別加密每個幀。

注意

盡可能使用框架數據。僅 AWS Encryption SDK 支援舊版使用的非框架資料。的某些語言實作仍然 AWS Encryption SDK 可以產生非框架加密文字。所有支持的語言實現都可以解密框架和非框加密文本。

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

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

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

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

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

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

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

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

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

具框架本文結構、一般框架
欄位 長度 (以位元組為單位)
序號 4
IV 變數. 等於標題 IV 長度位元組中指定的值。
加密內容 變數. 等於標題框架長度中指定的值。
驗證標籤 變數. 取決於使用的演算法,會於標題的演算法 ID 中指定。
序號

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

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

IV

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

加密內容

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

驗證標籤

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

具框架本文結構、最終框架
欄位 長度 (以位元組為單位)
序號結束 4
序號 4
IV 變數. 等於標題 IV 長度位元組中指定的值。
加密內容長度 4
加密內容 變數. 等於前 4 個位元組中指定的值 (加密內容長度)。
驗證標籤 變數. 取決於使用的演算法,會於標題的演算法 ID 中指定。
序號結束

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

序號

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

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

IV

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

加密內容長度

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

加密內容

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

驗證標籤

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

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

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

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

簽章本身。