GCM
Galois/Counter Mode
NIST SP 800-38D Galois/Counter Mode and GMAC https://doi.org/10.6028/NIST.SP.800-38D
TLS 1.2, 1.3で使われるブロック暗号利用モード、認証付き暗号 (AEAD)
ストリーム暗号のCTRやや改変っぽいものにGalois Message Authentication Code(GMAC)を組み合わせた128bit用
AESと組み合わせてAES-GCMとして使われることが多い
内部で2つの要素あり
GHASH (GMAC) 暗号に対してハッシュ値の計算を行い認証タグとして出力する
GCTR 基本はCTRモードと同じ、下位32bitのみカウント IVスタートは+1から?
初期化要素
暗号アルゴリズム(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)はビット長、各入力値はバイト単位(ビット単位では扱えない)
MAC計算はGHASH、本文暗号化はGCTRを利用する
GHASHの本文入力はGCTR暗号化後データ
出力
C 暗号文
T 認証タグ 128, 120, 112, 104, 96, 64, 32 のいずれかのビット長 (tで指定したものか固定) (AEAD)
復号
入力
C 暗号文
A 追加 認証データ
T 認証タグ
出力
P 平文
照合結果 (AEAD)
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の復号は最適化できていないと遅かったり)
nonceなど乱数が固定化されないよう改良版のRFC 8452 AES-GCM-SIV がある https://engineering.linecorp.com/ja/blog/AES-GCM-SIV-optimization
CTR + AES-CBC の CCMもある
暗号化が必要なく、認証タグのみ必要な場合がある。GMACは認証タグの生成と検証のみ行う。
GHASH
GCM専用のハッシュっぽいもの
汎用版はGCMから本文入力を省略したGMAC
ガロア体のビット順が逆(Little Endian)で計算するので注意
0列をAESなどで暗号化したものをHとして持つ
AADと暗号文 双方128bitブロック0padding、その後にAADと暗号の長さ各64bitを突っ込む
内部
y 初期 0
H 初期 AES暗号(鍵,0)
128bitブロック C 暗号側を利用する
y = (y XOR C) mul H (ガロアな掛け算)
最後 のC | AADサイズ 64bit | 本体サイズ 64bit | (サイズはバイト単位、暗号化はしない)
https://www.intel.co.jp/content/www/jp/ja/content-details/783641/advanced-encryption-standard-galois-counter-mode-optimized-ghash-function-technology-guide.html
GCTR
CTR の下32bitのみでカウントするもの
IVが96bit以外の場合はGHASHで調整する
NIST SP 800-38D
Recommendation for Block Cipher Modes of Operation: Galois/Counter Mode (GCM) and GMAC
https://csrc.nist.gov/pubs/sp/800/38/d/final
https://doi.org/10.6028/NIST.SP.800-38D (Google翻訳 一部修正)
https://eprint.iacr.org/2004/193.pdf
ISO/IEC 19772:2009 → ISO/IEC 19772:2020
https://csrc.nist.gov/projects/block-cipher-techniques/bcm/modes-development
例
https://csrc.nist.gov/projects/cryptographic-standards-and-guidelines/example-values
https://csrc.nist.rip/groups/ST/toolkit/BCM/documents/proposedmodes/gcm/gcm-spec.pdf
RFC 5116 An Interface and Algorithms for Authenticated Encryption 認証付き暗号のインターフェースとアルゴリズム (AEAD)
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
NIST SP 800-38D
6.3 Multiplication Operation on Blocks
ガロア体128bitのリトルエンディアンビット配置(通常と逆) の積算