CMAC(Cipher-based MAC)は、
ブロック暗号を基にした
メッセージ認証符号アルゴリズムです。データの認証と機密性の保証に用いられ、特に
CBC-MAC(Cipher Block Chaining Message Authentication Code)のセキュリティ上の欠陥を修正したアルゴリズムとして知られています。
CBC-MACは固定長のメッセージに対してのみ安全でしたが、CMACは可変長のメッセージにも対応可能です。
CMACの起源と発展
CMACアルゴリズムの中核は、ジョン・ブラックとフィリップ・ロガウェイによって提案され、NIST(アメリカ国立標準技術研究所)に提出されたXCBCという
CBC-MACの変種です。XCBCは
CBC-MACの欠点を効率的に解決しましたが、3つの鍵を必要とするという課題がありました。岩田と黒沢は、このXCBCを改良し、より少ない鍵で済むOne-Key
CBC-MAC (OMAC)を提案しました。さらに、OMACの改良版であるOMAC1も発表され、より詳細なセキュリティ解析が行われています。CMACは、このOMAC1と等価であることが知られています。
CMACの鍵生成
CMACでは、bビットの
ブロック暗号Eと秘密鍵kを用いて、メッセージmのℓビットのCMACタグtを生成します。まず、以下の手順で2つのbビットの副鍵k1とk2を生成します。
1. 一時的な値として、k0 = Ek(0)を計算します。
2. k0の最上位ビット(msb)が0であれば、k1 = k0 << 1(左シフト)とします。そうでなければ、k1 = (k0 << 1) ⊕ Cとします。ここで、Cはbに依存する定数です(具体的には、GF(2^b)上の既約多項式の中で、辞書順序で最も小さいものの主係数以外の係数)。
3. k1の最上位ビットが0であれば、k2 = k1 << 1とします。そうでなければ、k2 = (k1 << 1) ⊕ Cとします。
ここで、<<は左シフト演算を表し、⊕は
排他的論理和(XOR)演算を表します。副鍵k1とk2はこの後のMAC生成に用いられます。
例として、b = 4でC = 0011の場合、k0 = Ek(0) = 0101だとすると、k1 = 1010となり、k2 = 0100 ⊕ 0011 = 0111となります。
CMACタグの生成プロセス
CMACタグの生成プロセスは以下の通りです。
1. メッセージmをbビットごとのブロックに分割します。m = m1 || … || mn-1 || mn'とします。m1からmn-1は完全なブロックであり、mn'は最後のブロックを表します。空のメッセージは1つの不完全なブロックとして扱います。
2. mn'が完全なブロックであれば、mn = k1 ⊕ mn'とします。そうでなければ、mn = k2 ⊕ (mn' || 10…0)とします。ここで、10…0は、mn'がbビットに満たない場合に0で埋めたものです。
3. c0 = 00…0と初期化します。
4. i = 1からnまで、ci = Ek(ci-1 ⊕ mi)を計算します。
5. t = msbℓ(cn)を出力します。msbℓ(cn)はcnの最上位ℓビットを表します。
CMACタグの検証プロセス
CMACタグの検証プロセスは以下の通りです。
1. 上記のアルゴリズムを用いてタグを生成します。
2. 生成したタグと受信したタグが等しいことを確認します。
この検証プロセスにより、受信したメッセージが改ざんされていないことを確認することができます。
CMACの利点
CMACは、
CBC-MACの脆弱性を克服し、可変長のメッセージに対して高いセキュリティを提供します。また、効率的な鍵生成とタグ生成プロセスを持ち、幅広いアプリケーションで利用されています。
参考文献
[1] NIST, Recommendation for Block Cipher Modes of Operation: The CMAC Mode for Authentication, Special Publication 800-38B.
[2] J. Black, P. Rogaway, A Suggestion for Handling Arbitrary-Length Messages with the CBC MAC, available from NIST.
[3] J. Black, P. Rogaway, CBC MACs for Arbitrary-Length Messages: The Three-Key Constructions, Advances in Cryptology—Crypto 2000.
[4] T. Iwata, K. Kurosawa, OMAC: One-Key CBC MAC, available from NIST.
[5] T. Iwata, K. Kurosawa, OMAC: One-Key CBC MAC, Fast Software Encryption 2003.
[6] T. Iwata, K. Kurosawa, OMAC: One-Key CBC MAC—Addendum, available from NIST.
[7] T. Iwata, K. Kurosawa, Stronger Security Bounds for OMAC, TMAC, and XCBC, available from NIST.
外部リンク
RFC 4493 The AES-CMAC Algorithm
RFC 4494 The AES-CMAC-96 Algorithm and Its Use with IPsec
*
RFC 4615 The Advanced Encryption Standard-Cipher-based Message Authentication Code-Pseudo-Random Function-128 (AES-CMAC-PRF-128)
CMACは、メッセージの真正性を保証するための重要なツールであり、多くの
暗号プロトコルで利用されています。