暗号化と認証
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/07/14 04:15 UTC 版)
「Galois/Counter Mode」の記事における「暗号化と認証」の解説
名称が示すように、GCMは暗号化としてCTRモードを、認証として新しいGalois modeを組み合わせたものである。鍵となるのは認証に用いられるガロア体 (Galois field)における乗法であり、並列計算が可能であることからCBCモードのように連鎖モードを用いる認証アルゴリズムよりも高速化が可能である。利用される GF(2128) 有限体は以下の多項式で定義される。 x 128 + x 7 + x 2 + x + 1 {\displaystyle x^{128}+x^{7}+x^{2}+x+1} 認証タグはGHASH関数にデータブロックを与えることで構成され、その結果は暗号化される。GHASH関数は以下のように定義される。 GHASH ( H , A , C ) = X m + n + 1 {\displaystyle {\text{GHASH}}(H,A,C)=X_{m+n+1}} ここで H は128個のゼロから成る文字列をブロック暗号によって暗号化したもの、A は認証のみ行う(暗号化はしない)データ、C は暗号文、m は A に含まれる128ビットのブロックの数、nは C に含まれる128ビットのブロックの数である(A および C の最終ブロックは128ビットちょうどである必要はない)。i = 0, ..., m + n + 1 に対する Xi は以下のように定義される。 X i = { 0 for i = 0 ( X i − 1 ⊕ A i ) ⋅ H for i = 1 , … , m − 1 ( X m − 1 ⊕ ( A m ∗ ‖ 0 128 − v ) ) ⋅ H for i = m ( X i − 1 ⊕ C i − m ) ⋅ H for i = m + 1 , … , m + n − 1 ( X m + n − 1 ⊕ ( C n ∗ ‖ 0 128 − u ) ) ⋅ H for i = m + n ( X m + n ⊕ ( len ( A ) ‖ len ( C ) ) ) ⋅ H for i = m + n + 1 {\displaystyle X_{i}={\begin{cases}0&{\text{for }}i=0\\(X_{i-1}\oplus A_{i})\cdot H&{\text{for }}i=1,\ldots ,m-1\\(X_{m-1}\oplus (A_{m}^{*}\lVert 0^{128-v}))\cdot H&{\text{for }}i=m\\(X_{i-1}\oplus C_{i-m})\cdot H&{\text{for }}i=m+1,\ldots ,m+n-1\\(X_{m+n-1}\oplus (C_{n}^{*}\lVert 0^{128-u}))\cdot H&{\text{for }}i=m+n\\(X_{m+n}\oplus (\operatorname {len} (A)\lVert \operatorname {len} (C)))\cdot H&{\text{for }}i=m+n+1\\\end{cases}}} ここで v は A の最終ブロックのビット長、 u は C の最終ブロックのビット長であり、 ‖ {\displaystyle \lVert } はビット列の連結を示している。ここで注意することは、これが反復アルゴリズムであり、各々の Xi が Xi-1 に依存し、最終的な Xi のみが出力として現れることである。 GCMは、Carter–Wegman Counter mode(CWCモード(英語版))の改良としてJohn ViegaおよびDavid A. McGrewによって設計された。 2007年11月2日、NISTはNIST Special Publication 800-38D Recommendation for Block Cipher Modes of Operation: Galois/Counter Mode (GCM) and GMACを発表し、GCMおよびGMACを公式な標準として認定した。
※この「暗号化と認証」の解説は、「Galois/Counter Mode」の解説の一部です。
「暗号化と認証」を含む「Galois/Counter Mode」の記事については、「Galois/Counter Mode」の概要を参照ください。
- 暗号化と認証のページへのリンク