CMAC
そうでない場合は k1 = (k0 ≪ 1) ⊕ C とする。ここで C は b のみに依存するある定数である。(具体的には、二元体上の b 次既約多項式の中で、辞書順序において最も小さいものの主係数以外の係数)
msb(k1) = 0 であれば k2 = k1 ≪ 1 とする。そうでない場合は k2 = (k1 ≪ 1) ⊕ C とする。
副鍵 (k1, 2) をMAC生成に用いる。
例として、b = 4 の場合 C = 00112 であり、k0 = Ek(0) = 01012 である。そのため k1 = 10102、k2 = 0100 ⊕ 0011 = 01112 となる。
CMACタグの生成プロセスは以下の通りである。
メッセージ m を b ビットごとのブロックに分割する。 m = m1 ∥ ... ∥ mn−1 ∥ mn′ このとき m1, ..., mn−1 は完全なブロックとする(空のメッセージは1つの不完全なブロックとして扱う)。
mn′ が完全なブロックであれば mn = k1 ⊕ mn′ とする。そうでない場合は mn = k2 ⊕ (mn′∥ 10...02) とする。
c0 = 00...02 と置く。
i = 1,..., n に対して ci = Ek(ci−1 ⊕ mi) を計算する。
t = msbl(cn) を出力とする。
検証プロセスは以下の通りである。
上記のアルゴリズムでタグを生成する。
生成したタグと受け取ったタグが等しいことを確認する。