本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
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 長度 (位元組) |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
版本 | 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
的 101
或 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 元組數值表示,並解譯為 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 元組數值表示,並解譯為 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 與一個驗證標籤。位元組依顯示順序附加。
- IV
-
用來計算標題驗證標籤的初始向量 (IV)。
此欄位不會出現在郵件格式版本 2 的標頭中。郵件格式版本 2 僅支援在郵件標頭中使用確定性 IV 值的演算法套件。
- 驗證標籤
-
標題的驗證值。這個值會用來驗證標題的整體內容。
本文結構
訊息本文會包含加密資料,也就是所謂的加密文字。本文的結構會取決於內容類型 (無框架或具框架)。下面章節將說明每個內容類型的訊息本文格式。郵件內文結構在郵件格式版本 1 和 2 中是相同的。
無框架資料
無框架資料會於單一 Blob 中使用唯一的 IV 與本文 AAD 進行加密。
注意
盡可能使用框架數據。僅 AWS Encryption SDK 支援舊版使用的非框架資料。的某些語言實作仍然 AWS Encryption SDK 可以產生非框架加密文字。所有支持的語言實現都可以解密框架和非框加密文本。
下表將說明無框架資料的組成欄位。位元組依顯示順序附加。
- 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 位元組的
FF FF FF FF
。 - 序號
-
框架序號。這個序號為框架的遞增計數器編號。它會以 4 位元組數值表示,並解譯為 32 位元的無符號整數。
具框架資料必須從序號 1 開始編號。後續框架必須依序編號,並比前一個框架多出 1。否則,加密程序就會停止,並回報錯誤。
- IV
-
框架的初始向量 (IV)。SDK 會使用決定性方法,為訊息中的每個框架建構不同的 IV。IV 長度會由演算法套件指定。
- 加密內容長度
-
加密內容的長度。它會以 4 元組數值表示,並解譯為 32 位元的無符號整數,指出包含框架加密內容的位元組數量。
- 加密內容
-
由加密演算法傳回的框架加密內容 (加密文字)。
- 驗證標籤
-
框架的驗證值。這個值會用來驗證整個框架。
頁尾結構
如果使用含有簽章的演算法,訊息格式就會包含頁尾。郵件頁尾包含透過郵件標頭和內文計算的數位簽章。下表將說明頁尾的組成欄位。位元組依顯示順序附加。郵件格式版本 1 和 2 中的郵件頁尾結構相同。
-
簽章的長度。它會以 2 元組數值表示,並解譯為 16 位元的無符號整數,指出包含簽章的位元組數量。
-
簽章本身。