Counter with CBC-MAC (CCM、CCMモード)は、ブロック暗号の暗号利用モードの一つであり、認証付き暗号の一つである。CCMモードは128ビットブロック暗号に対してのみ定義されており、RFC 3610ではAESでの利用について定義されている。
CTRモードの派生として、CCMモードはストリーム暗号として振る舞う[1]。そのため、初期化ベクトル (IV)を慎重に選択し、再使用することは避けなければならない。
名称が示すように、CCMモードはカウンター (CTR)モードとCBC-MACモードを組み合わせたものであり、前者が暗号化に、後者が認証に用いられる。暗号化に用いられたカウンター値が認証で用いられる初期化ベクトルと衝突することがない限り、同一の鍵を暗号化と認証の双方に用いることができる。この組み合わせについては、ブロック暗号の安全性に基づくNISTによる安全性証明が存在する[2]。この証明は、128ビットAESだけでなく、任意のブロック長のブロック暗号や任意長の擬似ランダム関数[3]を部品とする一般化したCCMモードにも適用可能である。
CCMモードはRuss Housley、Doug Whiting、Niels Fergusonによって設計された。CCMモードの開発時、Russ HousleyはRSA Laboratoriesに勤務していた。
CCM*と呼ばれるCCMモードの派生が存在し、ZigBeeでの暗号化に利用されている。CCM*はCCMモードのすべての機能を有しており、暗号化のみでの利用も可能である。[4]
CCMモードは、メッセージを暗号化して認証するためにメッセージ1ブロックにつき2回のブロック暗号の暗号化操作を、関連データ(暗号化されない部分)の認証のためにデータ1ブロックにつき1回の暗号化操作を必要とする。
Crypto++のベンチマークによると、Intel Core 2 プロセッサ(32ビットモード)を用いた場合、AES-CCM は1バイトあたり 28.6 サイクルを要する。[5]
非効率性に関する特記事項:
CCMモードの開発の動機は、OCBモードのIEEE 802.11iへの採用に関する問題である。OCBモードのアルゴリズムの利用に特許の主張が留保されていたことでOCBの採用に反対する意見があった。特許を必要とするアルゴリズムの採用は、標準の実装の際にライセンス問題に発展するためである。
OCBモードの採用は知的財産権の問題につながるものであるため、そのような問題を持たない新たな認証付き暗号の開発が求められた。そこで、Housleyらは特許による問題を受けない代替アルゴリズムとしてCCMモードを開発した。
CCMモードはOCBモードと比較すると効率が悪いアルゴリズムであるが、特許問題の危険性がないことから、CCMモードはIEEE 802.11iに必須要素として採用された。OCBモードは除外されるのではなく、オプションとしての位置付けとなった。
CCMモードは、IEEE 802.11i(WPA2の暗号規格であるCCMPとして)、IPSec[6]、TLS 1.2[7]といった標準規格で採用されている。