本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
AWS Encryption SDK 訊息格式參考
本頁面上提供的參考可讓您建置自己的並與 AWS Encryption SDK相容的加密儲存庫。如果您不是自己建置相容的加密儲存庫,可能不需要此資訊。 若要在其中一個支援的程式設計語言 AWS Encryption SDK 中使用 ,請參閱 程式設計語言。 如需定義正確 AWS Encryption SDK 實作元素的規格,請參閱 中的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 代表根據 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 中指定。 |
欄位 | 長度 (以位元組為單位) |
---|---|
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 位元的無符號整數,指出包含簽章的位元組數量。
- 簽章
-
簽章本身。