GHASH
GCM内で専用に使われるハッシュかMAC、他の用途では安全ではない ハッシュ計算の元になるデータをそろえる
GCMの鍵で0をAES暗号化したものを鍵Hとして利用する (GHASHのAES利用はここのみ) AAD 暗号化しないデータ、GCMでは使わないかも (省略可)
pad(00 128bit境界)
本文 (GCTR暗号化後、または復号前のものを入力値とする)
pad(00 128bit境界)
AADサイズ(ビット長、64bit)
本文サイズ(ビット長、64bit)
AAD から 本文サイズまでを128bit単位でM_xとしておく
GF(2^128) 0x87 を逆にした 0xe1っぽいもの
128bit y 初期値 0
y = y.xor(M_x)
y = H mul y を GF(2^128 ビット並び逆)で計算する
を全体に繰り返した値がMAC値
鍵H mul yのHを固定しておくことでガロア体のシフト演算をキャッシュした高速演算が可能