CMAC

CMAC (Cipher-based MAC) は、ブロック暗号に基づくメッセージ認証符号アルゴリズムである。認証およびデータの機密の保証に用いられる。この暗号利用モードは、CBC-MACのセキュリティ上の欠陥を修正したものである（CBC-MACは固定長のメッセージの場合のみ安全である）。
CMACアルゴリズムの中核は、John BlackとPhillip Rogawayによって提案、解析され、NISTに提出されたXCBCと呼ばれるCBC-MACの変種である。XCBCアルゴリズムはCBC-MACの欠陥を効率的に克服しているが、3つの鍵を必要とする。岩田と黒沢はXCBCの改良を提案し、One-Key CBC-MAC (OMAC)として発表した。さらに、OMACの改良としてOMAC1を発表し、さらなるセキュリティ解析を行った。OMACではXCBCよりも必要な鍵が少なくなっている。CMACはOMAC1と等価なものである。
"b"ビットのブロック暗号 ("E") と秘密鍵 ("k") を用いてメッセージ ("m") の ℓビットのCMACタグ ("t") を生成する場合、はじめに2つの "b"ビットの副鍵 ("k"1 and "k"2) を以下の手順で生成する（これは有限体GF(2"b") 上での "x" と "x"2 の乗算と等価である）。
ここで ≪ は左シフト演算子である。
例として、"b" = 4 の場合 "C" = 00112 であり、"k"0 = "Ek"(0) = 01012 である。そのため "k"1 = 10102、"k"2 = 0100 ⊕ 0011 = 01112 となる。 
CMACタグの生成プロセスは以下の通りである。
検証プロセスは以下の通りである。