GCM
Galois/Counter Mode
NIST SP 800-38D Galois/Counter Mode and GMAC ストリーム暗号のCTRやや改変っぽいものにGalois Message Authentication Code(GMAC)を組み合わせた128bit用 AESと組み合わせてAES-GCMとして使われることが多い
内部で2つの要素あり
GHASH (GMAC)
GCTR
初期化要素
暗号アルゴリズム(128bit出力のもの)、鍵 AES用 128,192,256bit
IV 初期化ベクトル initialization vector 96bit推奨
t 認証タグのビット長 128bit 以下
暗号化
入力
P 平文 plaintext
A 追加 認証データ additional authenticated data: AAD 暗号化されない
$ len(P)≦2^{39}-256
$ len(A)≦2^{64}-1
$ 1 ≦len(IV)≦ 2^{64}-1
len(x)はビット長、各入力値はバイト単位(ビット単位では扱えない)
出力
C 暗号文
T 認証タグ 128, 120, 112, 104, 96, 64, 32 のいずれかのビット長 (tで指定したものか固定)
復号
入力
C 暗号文
A 追加 認証データ
T 認証タグ
出力
P 平文
照合結果
AADはTLSだとヘッダに使われる情報などのようだ
IV は nonce として使われる。 96bitが推奨される長さ。長いか短いと計算により96bitくらいになる。
長すぎても適当に使えるらしい。
nonce + counter でブロックサイズ(128bit)、 counterからnonceへの桁上がりも考慮したほうがよさそうに見えるがGCMは対応していないように見える
IV 96bitの場合
GCM のcounterは nonce + 下位 counter 32bit 00000001 はじまり? 1つめはGHASHに使って2つめから暗号に利用
CTR のcounterは nonce + 下位 counter ビット 00000000 ではじまるようなので差がある。
元のブロック暗号は順方向(暗号化)のみ利用する (AESの復号は最適化できていないと遅かったり)
暗号化が必要なく、認証タグのみ必要な場合がある。GMACは認証タグの生成と検証のみ行う。
GHASH
GCM専用のハッシュっぽいもの
ガロア体のビット順が逆で計算するので注意
0列をAESなどで暗号化したものをHとして持つ
GCTR
IVが96bit以外の場合はGHASHで調整する
NIST SP 800-38D
Recommendation for Block Cipher Modes of Operation: Galois/Counter Mode (GCM) and GMAC
ISO/IEC 19772:2009 → ISO/IEC 19772:2020
例
RFC 5116 An Interface and Algorithms for Authenticated Encryption 認証付き暗号のインターフェースとアルゴリズム RFC 5216 The EAP-TLS Authentication Protocol ?
利用
RFC 4106 The Use of Galois/Counter Mode (GCM) in IPsec Encapsulating Security Payload (ESP) テストベクトルあり?
RFC 5288 AES Galois Counter Mode (GCM) ChiperSuites for TLS
RFC 5289 TLS Elliptic Curve Cipher Suites with SHA-256/384 and AES Galois Counter Mode (GCM)
RFC 5647 AES Galois Counter Mode for the Secure Shell Transport Layer Protocol
RFC 7714 AES-GCM Authenticated Encryption in the Secure Real-time Transport Protocol (SRTP)
RFC 8452 AES-GCM-SIV: Nonce Misuse-Resistant Authenticated Encryption