Aes

GCM 模式下使用 AES 的密文和標籤大小以及 IV 傳輸

  • August 4, 2020

我對在 GCM 操作模式中使用 AES 完全陌生,而且我在密碼學方面也沒有很大的背景。我一直在使用 OpenSSL 嘗試加密和解密一些消息。從我的簡單實驗中提出了以下問題:

  1. 首先,我注意到輸出的大小與輸入的大小完全相同。我很困惑。據我所知,AES 工作在 16 字節的塊中。我習慣了 CBC 模式,其中消息需要填充。這是否意味著 GCM 可以處理任何大小的輸入,而無需填充和取消填充內容?
  2. 我讀到 IV 可以是任何大小,並且足以使其不重複。例如,這是否意味著我可以將 4 字節 iv 與漸進式計數器一起使用?是否就這麼簡單,還是短且可預測的 IV 存在安全問題?
  3. 由於我需要為每條消息生成一個新的 IV,我應該如何傳輸它?據我了解,IV 的保密性不是根本性的……這是否意味著我可以將每個 IV 連同其消息一起以明文形式發送?如果沒有,我應該怎麼做才能讓其他端點知道我的 iv?
  4. MAC 標籤總是 16 字節長嗎?

我希望這些問題不會太愚蠢。他們絕對應該簡單快速地回答。

我按順序回答:

  1. 輸出大小 = 輸入大小沒錯,GCM 內部使用 CTR。它為每個塊加密一個計數器值,但它只使用最後一個塊所需的位數。CTR 將分組密碼轉換為流密碼。請注意,這不包括任何需要發送的額外認證數據 (AAD)、可選包含(否則需要)IV 或所需認證標籤的大小。
  2. 任何大小的 IV對於 GCM,強烈建議使用 12 字節的 IV,因為其他 IV 長度將需要額外的計算。*原則上,只要 IV 不重複,*任何 IV 大小都可以使用。然而,NIST 建議實現只需要支持 12 字節的 IV 大小。
  3. 如何傳輸 IV是的,通常 IV 會在密文之前加上前綴,或者在雙方都使用某種 nonce 來計算。IV 的大小應由協議定義。如果可以同步 12 個字節的隨機數,則不需要將 IV 包含在密文中。
  4. 身份驗證標籤的大小計算出的標籤將始終為 16 個字節長,但可以使用最左邊的字節。GCM 定義為標籤大小 128、120、112、104 或 96、64 和 32。請注意,GCM 的安全性很大程度上取決於標籤大小。您應該嘗試使用至少 64 位的標籤大小,但通常應該首選完整的 128 位標籤大小。

定義 GCM 的NIST 特別出版物 800-38D(第 8 頁)在標籤尺寸方面有以下內容:

標籤的位長,表示為 $ t $ , 是一個安全參數,如附錄 B 中所述。一般來說, $ t $ 可以是以下五個值中的任何一個:128、120、112、104 或 96。對於某些應用, $ t $ 可能是 64 或 32;附錄 C 給出了使用這兩個標籤長度的指南,包括在這些情況下對輸入數據長度和密鑰壽命的要求。

引用自:https://crypto.stackexchange.com/questions/26783