Galois/Counter Mode (GCM)

GCM モードでは処理を行う際に初期設定ベクトル (IV) を使用します。このモードは、関連データの認証付き暗号化に使用されます。 GCM により、暗号化データの機密性と認証性、および追加認証データ (AAD) の認証性が確保されます。この AAD は暗号化されません。GCM モードでは、IV が nonce である必要があります。つまり、所定の鍵を使用したモードの実行ごとに IV が固有でなければなりません。GCM 暗号化のステップは、以下のとおりです。
  1. ブロック暗号を「ゼロ」ブロックに適用することにより、GHASH 関数のハッシュ・サブキーが生成されます。
  2. カウンター前ブロック (J0) が IV から生成されます。特に、IV の長さが 96 ビットの場合は、カウンター前ブロックを形成するために、埋め込みストリング 031||1 が IV に追加されます。それ以外の場合は、IV に最小数の「0」ビット (おそらく、なし) が埋め込まれ、結果として生成されるストリングの長さが 128 ビット (ブロック・サイズ) の倍数になります。次に、このストリングに 64 個の追加の「0」ビットが追加され、その後に 64 ビット表記の IV の長さが続きます。結果のストリングに GHASH 関数が適用され、カウンター前ブロックが形成されます。
  3. 32 ビットの増分関数がカウンター前ブロックに適用され、非暗号化テキストに対する GCTR 関数呼び出しのための初期カウンター・ブロックが生成されます。この GCTR 関数呼び出しの出力は暗号化テキストです。
  4. 結果のストリングのビット長がブロック・サイズの倍数になるように、AAD と暗号化テキストにはそれぞれ最小数の「0」ビット (おそらく、なし) が追加されます。これらのストリングを連結したものに、AAD と暗号化テキストの 64 ビット表記の長さが追加され、ブロック u が生成されます。
  5. GHASH 関数がブロック u に適用され、単一の出力ブロックが生成されます。
  6. この出力ブロックは、ステップ 2 で生成されたカウンター前ブロックとともに GCTR 関数を使用して暗号化され、指定されたタグ長に結果が切り捨てられて、認証タグが形成されます
  7. 暗号化テキストとタグが出力として返されます。

    非暗号化テキストは任意の長さにすることができます。暗号化テキストは非暗号化テキストと同じ長さになります。

GCM 暗号化解除では、タグが入力パラメーターです。ICSF は、暗号化と同じプロセスを使用してタグを計算し、呼び出し側から渡されたパラメーターとそのタグを比較します。これらが一致した場合、暗号化解除が続行されます。