CBC-MAC
CBC-MAC (cipher block chaining message authentication code) は、ブロック暗号からメッセージ認証符号を生成する手法である。あるブロック暗号のCBCモードでメッセージを暗号化することで暗号ブロックの連鎖を形成すると、それぞれのブロックの暗号化はその前のブロックの暗号化の結果に依存する。そのため、平文が1ビットでも変化すると、暗号化後の最終ブロックも変化することとなる。
メッセージ m {\displaystyle m} のCBC-MACを計算するには、初期化ベクトルを0としてCBCモードで暗号化を行う。次の図は、メッセージ m {\displaystyle m} を m 1 ‖ m 2 ‖ ⋯ ‖ m x {\displaystyle m_{1}\|m_{2}\|\cdots \|m_{x}} とブロックに分割し、秘密鍵 k {\displaystyle k} とブロック暗号 E {\displaystyle E} を用いてCBC-MACを計算する様子を示している。
得られる平文は、アリスが送った P n {\displaystyle P_{n}} ではなくイブによって改変された P n ′ {\displaystyle P_{n}'} となる。このとき P n ′ = C n − 1 ′ ⊕ E K − 1 ( C n ) {\displaystyle P_{n}'=C_{n-1}'\oplus E_{K}^{-1}(C_{n})} となる。
続いてボブは得られた P n ′ {\displaystyle P_{n}'} についてCBC-MACタグを計算する。タグ t ′ {\displaystyle t'} は以下のように求められる。
t ′ = E K ( P n ′ ⊕ E K ( P n − 1 ′ ⊕ E K ( ⋯ ⊕ E K ( P 1 ′ ) ) ) ) {\displaystyle t'=E_{K}(P_{n}'\oplus E_{K}(P_{n-1}'\oplus E_{K}(\dots \oplus E_{K}(P_{1}'))))}
この式は以下と等しく
t ′ = E K ( P n ′ ⊕ C n − 1 ′ ) {\displaystyle t'=E_{K}(P_{n}'\oplus C_{n-1}')}