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

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

AWS Encryption SDK訊息格式參考

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

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

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

中的加密操作會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 代表根據 SEC 1 版本 2.0 壓縮,然後以 base64 編碼的橢圓曲線點 Q。加密內容可以包含其他值,但所建構 AAD 的長度上限為 2^16 - 1 位元組。

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

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

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 KMSkeyring 時,此值會包含 的 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 值的演算法套件。

影格長度

每個影格資料影格的長度。它是 4 位元組值,解譯為 32 位元無符號整數,指定每個影格中的位元組數。當資料為非框架時,也就是當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 中是相同的。

無框架資料

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

注意

盡可能使用影格資料。僅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)。

注意

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

加密的內容

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

身分驗證標籤

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

具框架資料

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

注意

盡可能使用影格資料。僅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 位元的無符號整數,指出包含簽章的位元組數量。

簽章

簽章本身。