伽羅瓦/計數器模式

在密碼學中，伽羅瓦/計數器模式( GCM ) 是對稱金鑰加密分組密碼的一種操作模式，因其效能而被廣泛採用。可以使用廉價的硬體資源實現最先進的高速通訊通道的 GCM 吞吐率。 該操作是一種經過身份驗證的加密演算法，旨在提供資料真實性和保密性。 GCM 是為塊大小為 128 位的塊密碼定義的。 伽羅瓦訊息認證碼（Galois Message Authentication Code ，GMAC ) 是 GCM 的僅認證變體，可以形成增量訊息認證程式碼。 GCM 和 GMAC 都可以接受任意長度的初始化向量。不同的分組密碼操作模式可能具有明顯不同的效能和效率特性，即使使用相同的分組密碼也是如此。 GCM 可以充分利用並行處理，實現 GCM 可以有效利用指令流水線或硬體流水線。相比之下，密碼塊連結操作模式會導致流水線停頓，從而影響其效率和效能。基本操作.與普通計數器模式一樣，塊按順序編號，然後該塊編號與初始化向量 組合並使用塊密碼E加密，通常為AES 。然後將此加密的結果與明文進行異或以產生密文。與所有計數器模式一樣，這本質上是一個流密碼，因此對於每個加密的流使用不同的 IV 是必不可少的。密文塊被視為多項式的係數，然後在依賴於金鑰的點H使用有限域算術對其進行評估。然後對結果進行加密，生成可用於驗證資料完整性的身份驗證標籤。然後，加密文字包含 IV、密文和身份驗證標籤。數學基礎.GCM 將眾所周知的計數器加密模式與新的 Galois 身份驗證模式相結合。關鍵特徵是用於驗證的伽羅瓦域乘法易於平行計算。此功能允許比使用連結模式的加密演算法更高的吞吐量。使用的 GF(2 128 ) 欄位由多項式定義formula_1身份驗證標籤是透過將資料塊輸入 GHASH 函式並對結果進行加密來構建的。這個 GHASH 函式定義為formula_2其中"H" = "E k" (0 128 ) 是雜湊金鑰，使用分組密碼加密的 128 個零位的字串， "A"是僅經過身份驗證，對於"i" = 0, ..., "m" + "n" + 1"的變數 X i"定義如下。首先，經過驗證的文字和密文分別用零填充到 128 位的倍數，並組合成單個訊息"S i" ：formula_3其中 len( "A" ) 和 len( "C" ") 分別是 A"和"C"的位長的 64 位表示， "v" = 連 模組 "128 是 A"的最後一個塊的位長， "u" = 長度( "C" ) 模組 "128 是 C"的最後一個塊的位長，並且formula_4表示位串的串聯。formula_5第二種形式是一種有效的迭代演算法，它是透過將霍納的方法應用於第一種而產生的。只有最後的"X" "m" + "n" +1仍然是輸出。如果需要並行化雜湊計算，可以透過交錯"k"次來完成：formula_6如果 IV 的長度不是 96，則使用 GHASH 函式計算"Counter 0" ：formula_7GCM 由John Viega和 David A. McGrew 設計，是對Carter-Wegman 計數器模式的改進。2007 年 11 月， NIST宣佈釋出 NIST 特別出版物 800-38D"對塊密碼操作模式的建議：伽羅瓦/計數器模式 (GCM) 和 伽羅瓦訊息驗證碼，"使 GCM 和 GMAC 成為官方標準。利用.GCM 模式用於IEEE 802.1AE (MACsec) 乙太網安全、 IEEE 802.11ad 、ANSI ( INCITS )光纖通道安全協議 (FC-SP)、 IEEE P1619 .1 磁帶儲存、 IETF IPsec標準、 SSH ， TLS 1.2 和 TLS 1.3。 AES-GCM 包含在NSA Suite B 密碼學及其 2018 年商業國家安全演算法 (CNSA)套件中的最新替代品中。 GCM 模式用於SoftEther VPN伺服器和客戶端， 以及自 2.4 版以來的OpenVPN。表現.GCM 要求對每個加密和驗證資料塊。英特爾添加了PCLMULQDQ指令，突出了它對 GCM 的使用。 2011 年，SPARC 添加了 XMULX 和 XMULXHI 指令，它們也執行 64 × 64 位無進位乘法。 2015 年，SPARC 添加了 XMPMUL 指令，該指令對更大的值執行 XOR 乘法，高達 2048 × 2048 位的輸入值產生 4096 位的結果。這些指令支援 GF(2 "n" ) 上的快速乘法，並且可以與任何欄位表示一起使用。GCM 在許多平臺上釋出了令人印象深刻的效能結果。 Käsper 和 Schwabe 描述了一種“更快且抗時間攻擊的AES-GCM” ，它在 64 位英特爾處理器上實現了每位元組 10.68 個週期的 AES-GCM 認證加密。Dai等人。使用 Intel 的 AES-NI 和 PCLMULQDQ 指令時，對於相同的演算法，每位元組報告 3.5 個週期。 Shay Gueron 和 Vlad Krasnov 在第三代英特爾處理器上實現了每位元組 2.47 個週期。為 OpenSSL和NSS庫準備了適當的補丁。當需要對訊息執行身份驗證和加密時，軟體實現可以透過重疊這些操作的執行來實現速度提升。透過交錯操作利用指令級並行性來提高效能。這個過程稱為函式拼接， ，雖然原則上它可以應用於密碼演算法的任何組合，但 GCM 特別適合。 Manley 和 Gregg 展示了在 GCM 中使用函式拼接時最佳化的簡易性。他們提出了一個程式生成器，它採用加密演算法的帶註釋的 C 版本，並生成在目標處理器上執行良好的程式碼。例如，GCM 在嵌入式領域受到 Silicon Labs 的批評，因為並行處理不適合加密硬體引擎的高效能使用，因此降低了一些對效能最敏感的裝置的加密效能。專利.根據作者的宣告，GCM 不受專利保護。安全性.GCM 在具體的安全模型中被證明是安全的。 當它與與隨機排列無法區分的分組密碼一起使用時，它是安全的；然而，安全性取決於為使用相同金鑰執行的每個加密選擇唯一的初始化向量"。對於任何給定的金鑰和初始化向量組合，GCM 僅限於加密239−256位純文字 (64 GiB)。 NIST 特別出版物 800-38D 包括初始化向量選擇指南。身份驗證強度取決於身份驗證標籤的長度，就像所有對稱訊息身份驗證程式碼一樣。不鼓勵在 GCM 中使用較短的身份驗證標籤。標記的位長，用 t 表示，是一個安全引數。一般來說，t 可以是以下五個值中的任意一個：128、120、112、104 或 96。對於某些應用，t 可能是 64 或 32，但這兩個標籤長度的使用限制了輸入的長度資料和金鑰的生命週期。 NIST SP 800-38D 中的附錄 C 為這些約束提供了指導。與任何訊息認證程式碼一樣，如果對手"隨機選擇一個 t"位標籤，則對於機率度量為 2 - "t 的"給定資料，它預計是正確的。然而，使用 GCM，對手可以透過選擇帶有 n 個單詞的標籤——密文的總長度加上任何額外的認證資料 (AAD)——以機率度量 2 - "t"乘以 n 來增加成功的可能性。儘管如此，必須記住，對於任意大的"t" ，這些最佳標籤仍然由演算法的生存度量1 − "n"⋅2−"t"主導。此外，GCM 既不適合用於非常短的標籤長度，也不適合用於非常長的訊息。Ferguson 和 Saarinen 分別描述了攻擊者如何針對 GCM 身份驗證執行最優攻擊，滿足其安全性的下限。 Ferguson 表明，如果"n"表示編碼中的塊總數，那麼有一種方法可以構建目標密文偽造，預計成功的機率約為"n" ⋅2 − "t" .如果標籤長度"t"小於 128，那麼這次攻擊中的每一次成功偽造都會增加後續有針對性的偽造成功的機率，並洩漏有關雜湊子金鑰的資訊， "H" .最終， "H"可能會被完全破壞，並且完全失去認證保證。除了這種攻擊，攻擊者可能會嘗試系統地猜測給定輸入的許多不同標籤以進行身份驗證解密，從而增加其中一個最終被視為有效的可能性。因此，實現 GCM 的系統或協議應監控並在必要時限制每個金鑰的不成功驗證嘗試次數。Saarinen 描述了 GCM弱金鑰。 這項工作為基於多項式雜湊的身份驗證的工作原理提供了一些有價值的見解。更準確地說，這項工作描述了一種在給定有效 GCM 訊息的情況下偽造 GCM 訊息的特定方法，對於"n" × 128位長的"n"⋅2−128然而，這項工作並沒有表現出比以前已知的更有效的攻擊；本文觀察 1 中的成功機率與 INDOCRYPT 2004 分析中引理 2 的成功機率相匹配。 Saarinen 還描述了基於 Sophie Germain primes的 GCM 變體 Sophie Germain Counter Mode (SGCM)。