在密碼學中，伽羅瓦 計數器模式（GCM）RFC 5288 AES Galois Counter Mode GCM Cipher Suites for TLS 是一種對稱分組加密演算法的工作模式，因其良好的效能而被廣泛採用。最快速的 GCM 通訊通道可以用便宜的硬體來實現。 GCM 演算法提供資料真實性（與完整性）和機密性的驗證，基於關聯資料認證加密（AEAD）方法。這表示它需要金鑰 K、明文 P 和一些附加資料（associated data，以下簡稱 AD）作為輸入；然後使用金鑰對明文 P 加密得到密文 C，並根據密文和 AD（未加密）的計算來得到認證標籤 T。知道 K（金鑰）的接收者在收到 AD、C（密文）和 T（認證標籤）後可以解密密文以得到 P（明文），並且可以檢查 T（認證標籤）以確保密文和 AD 都沒有被篡改。 GCM 使用塊大小為 128 位的塊密碼（通常為 AES128）的計數器模式進行加密，並使用伽羅瓦域 GF（2128）中的算術來計算認證標籤；因此得名。 伽羅瓦訊息認證碼（GMAC）是 GCM 的一種僅用於認證的變體，可以形成增量訊息認證碼。GCM 和 GMAC 都可以接受任意長度的初始化向量。 即使是與相同的分組密碼一起使用，不同的分組密碼的操作模式也可能具有顯著的不同效能和效率特徵。GCM 可以充分利用並行處理，實現 GCM 可以有效地利用指令流水線或硬體流水線。相比之下，密碼塊連結（CBC）模式會導致流水線停滯，從而影響其效率和效能。 基本操作 與一般計數器模式一樣，每個塊按順序編號，然後該塊編號與初始化向量（Initialization Vector，IV） 組合並使用塊密碼演算法加密（通常是 AES）。然後將此加密的結果與明文進行異或以產生密文。與所有計數器模式一樣它本質上是一個流密碼，因此必須對於每個加密流使用不同的 IV。 密文塊被認為是一個多項式的係數，然後在金鑰相關點 H 處使用有限域算術求值。隨後再對結果進行加密，生成可用於驗證資料完整性的身份驗證標籤。加密後的內容包含 IV、密文和身份驗證標籤。 數學基礎 GCM 將眾所周知的計數器模式與新的 Galois 身份驗證模式相結合。關鍵特徵是用於驗證的伽羅瓦域乘法易於平行計算。此功能允許此模式使用比 CBC 模式更高的吞吐量，使用的 GF 2 128 欄位由多項式定義 x128 x7 x2 x 1 身份驗證標籤是透過將資料塊輸入 GHASH 函式並對結果進行加密來構建的。這個 GHASH 函式定義為 text GHASHHAC X_mn1 其中 H E k 0 128 是雜湊金鑰，使用分組密碼加密的 128 個零位的字串， A 是僅經過身份驗證（未加密）的資料， C 是密文， m 是 128 A 中的位塊（向上取整）， n 是 C 中 128 位塊的數量（向上取整），對於的變數 X i 定義如下。 Note that there is a typo in the formulas in the article 首先，經過驗證的文字和密文分別用零填充到 128 位的倍數，並組合成單個訊息 S i ： S_i begin cases A_i text for i 1 ldots m 1 A_m parallel 0128v text for i m C_im text for i m 1 ldots m n 1 C_n parallel 0128u text for i m n operatorname lenA parallel operatorname lenC text for i m n 1 end cases 其中 len A 和 len C 分別是 A 和 C 的位長的 64 位表示， v 連（一） 模組 128 是 A 的最後一個塊的位長， u 長度 C 模組 128 是 C 的最後一個塊的位長，並且 parallel 表示位串的串聯。 X_i sum_j1i S_j cdot Hij1 begin cases 0 text for i0 left X_i1 oplus S_iright cdot H text for i 1 ldots m n 1 end cases 第二種形式是一種有效的迭代演算法（每個 X i 取決於 X i 1 ），它是透過將霍納的方法應用於第一種而產生的。只有最後的 X m n 1 仍然是輸出。 如果需要並行化雜湊計算，可以透過交錯 k 次來完成： begin align X_i begin cases 0 text for i leq 0 left X_ik oplus S_i right cdot Hk text for i 1 ldots m n 1 k end cases 6pt X_i sum_j1k left X_ij2k oplus S_ijk right cdot Hkj1 end align 如果 IV 的長度不是 96，則使用 GHASH 函式計算 Counter 0 ： begin align Counter 0 begin cases IV parallel 031 parallel 1 text for len IV 96 text GHASH IV parallel 0s parallel 064 parallel len_64IV text with s 128 len IV mod 128 mod 128 text otherwise end cases end align GCM 由 John Viega 和 David A McGrew 設計，是對 CarterWegman 計數器模式（CWC 模式）的改進。 2007 年 11 月， NIST 宣佈釋出 NIST 特別出版物 80038D 對塊密碼操作模式的建議：伽羅瓦 計數器模式 GCM 和 伽羅瓦訊息驗證碼（GMAC），使 GCM 和 GMAC 成為官方標準。 使用 GCM 模式用於 IEEE 8021AE MACsec 乙太網安全、 IEEE 80211ad （也稱為 WiGig ）、ANSI INCITS 光纖通道安全協議 FCSP、 IEEE P1619 1 磁帶儲存、 IETF IPsec 標準、 RFC 4106 The Use of GaloisCounter Mode GCM in IPsec Encapsulating Security Payload ESP RFC 4543 The Use of Galois Message Authentication Code GMAC in IPsec ESP and AH SSH ， RFC 5647 AES Galois Counter Mode for the Secure Shell Transport Layer Protocol TLS 12 RFC 5288 AES Galois Counter Mode GCM Cipher Suites for TLS RFC 6367 Addition of the Camellia Cipher Suites to Transport Layer Security TLS 和 TLS 13。 RFC 8446 The Transport Layer Security protocol version 13 AESGCM 包含在 NSA Suite B 密碼學及其 2018 年商業國家安全演算法 CNSA 套件中的最新替代品中。 GCM 模式用於 SoftEther VPN 伺服器和客戶端， 以及自 24 版以來的 OpenVPN。 效能 GCM 要求對每個加密和驗證資料塊（128 位）在 Galois 欄位中進行一次分組密碼操作和一次 128 位乘法。分組密碼操作很容易流水線化或並行化；乘法運算很容易流水線化，並且可以透過一些適度的努力進行並行化（透過並行化實際操作，透過根據原始 NIST 提交調整 Horner 的方法，或兩者兼而有之）。 英特爾添加了 PCLMULQDQ 指令，突出了它對 GCM 的使用。 2011 年，SPARC 添加了 XMULX 和 XMULXHI 指令，它們也執行 64 64 位無進位乘法。 2015 年，SPARC 添加了 XMPMUL 指令，該指令對更大的值執行 XOR 乘法，高達 2048 2048 位的輸入值產生 4096 位的結果。這些指令支援 GF 2 n 上的快速乘法，並且可以與任何欄位表示一起使用。 GCM 在許多平臺上釋出了令人印象深刻的效能結果。 Käsper 和 Schwabe 描述了一種 更快且抗時間攻擊的 AESGCM ，它在 64 位英特爾處理器上實現了每位元組 1068 個週期的 AESGCM 認證加密。Dai 等人。使用 Intel 的 AESNI 和 PCLMULQDQ 指令時，對於相同的演算法，每位元組報告 35 個週期。 Shay Gueron 和 Vlad Krasnov 在第三代英特爾處理器上實現了每位元組 247 個週期。為 OpenSSL 和 NSS 庫準備了適當的補丁。 當需要對訊息執行身份驗證和加密時，軟體實現可以透過重疊這些操作的執行來實現速度提升。透過交錯操作利用指令級並行性來提高效能。這個過程稱為函式拼接， Gopal V Feghali W Guilford J Ozturk E Wolrich G Dixon M Locktyukhin M Perminov M Fast Cryptographic Computation on Intel Architecture via Function Stitching Intel Corp 2010 ，雖然原則上它可以應用於密碼演算法的任何組合，但 GCM 特別適合。 Manley 和 Gregg 展示了在 GCM 中使用函式拼接時最佳化的簡易性。他們提出了一個程式生成器，它採用加密演算法的帶註釋的 C 版本，並生成在目標處理器上執行良好的程式碼。 例如，GCM 在嵌入式領域受到 Silicon Labs 的批評，因為並行處理不適合加密硬體引擎的高效能使用，因此降低了一些對效能最敏感的裝置的加密效能。 專利 根據作者的宣告，GCM 不受專利保護。 安全性 GCM 在具體的安全模型中被證明是安全的。 當它與與隨機排列無法區分的分組密碼一起使用時，它是安全的；然而，安全性取決於為使用相同金鑰執行的每個加密選擇唯一的初始化向量（參見流密碼攻擊）。對於任何給定的金鑰和初始化向量組合，GCM 僅限於加密位純文字 64 GiB。 NIST 特別出版物 80038D 包括初始化向量選擇指南。 身份驗證強度取決於身份驗證標籤的長度，就像所有對稱訊息身份驗證程式碼一樣。不鼓勵在 GCM 中使用較短的身份驗證標籤。標記的位長，用 t 表示，是一個安全引數。一般來說，t 可以是以下五個值中的任意一個：128、120、112、104 或 96。對於某些應用，t 可能是 64 或 32，但這兩個標籤長度的使用限制了輸入的長度資料和金鑰的生命週期。 NIST SP 80038D 中的附錄 C 為這些約束提供了指導（例如，如果 t 32 且最大資料包大小為 210 位元組，則應呼叫身份驗證解密函式不超過 211 次；如果 t 64 且最大資料包大小為資料包大小為 215 位元組，認證解密函式呼叫不超過 232 次）。 與任何訊息認證程式碼一樣，如果對手隨機選擇一個 t 位標籤，則對於機率度量為 2 t 的給定資料，它預計是正確的。然而，使用 GCM，對手可以透過選擇帶有 n 個單詞的標籤 密文的總長度加上任何額外的認證資料 AAD 以機率度量 2 t 乘以 n 來增加成功的可能性。儘管如此，必須記住，對於任意大的 t ，這些最佳標籤仍然由演算法的生存度量主導。此外，GCM 既不適合用於非常短的標籤長度，也不適合用於非常長的訊息。 Ferguson 和 Saarinen 分別描述了攻擊者如何針對 GCM 身份驗證執行最優攻擊，滿足其安全性的下限。 Ferguson 表明，如果 n 表示編碼中的塊總數（GHASH 函式的輸入），那麼有一種方法可以構建目標密文偽造，預計成功的機率約為 n 2 t 如果標籤長度 t 小於 128，那麼這次攻擊中的每一次成功偽造都會增加後續有針對性的偽造成功的機率，並洩漏有關雜湊子金鑰的資訊， H 最終， H 可能會被完全破壞，並且完全失去認證保證。 Niels Ferguson Authentication Weaknesses in GCM 20050520 除了這種攻擊，攻擊者可能會嘗試系統地猜測給定輸入的許多不同標籤以進行身份驗證解密，從而增加其中一個（或多個）最終被視為有效的可能性。因此，實現 GCM 的系統或協議應監控並在必要時限制每個金鑰的不成功驗證嘗試次數。 Saarinen 描述了 GCM 弱金鑰。 這項工作為基於多項式雜湊的身份驗證的工作原理提供了一些有價值的見解。更準確地說，這項工作描述了一種在給定有效 GCM 訊息的情況下偽造 GCM 訊息的特定方法，對於位長的然而，這項工作並沒有表現出比以前已知的更有效的攻擊；本文觀察 1 中的成功機率與 INDOCRYPT 2004 分析中引理 2 的成功機率相匹配（設定和 ）。 Saarinen 還描述了基於 Sophie Germain primes 的 GCM 變體 Sophie Germain Counter Mode SGCM。 參見 認證加密 分組密碼操作模式 AESGCMSIV 參考文獻 Category 訊息鑑別碼 Category 有限域 Category 分組密碼工作模式