Counter with CBC-MAC (CCM、CCMモード)は、ブロック暗号の暗号利用モードの一つであり、認証付き暗号の一つである。CCMモードは128ビットブロック暗号に対してのみ定義されており、.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation.cs-ja1 q,.mw-parser-output .citation.cs-ja2 q{quotes:"「""」""『""』"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free a,.mw-parser-output .citation .cs1-lock-free a{background:url("//upload.wikimedia.org/wikipedia/commons/6/65/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited a,.mw-parser-output .id-lock-registration a,.mw-parser-output .citation .cs1-lock-limited a,.mw-parser-output .citation .cs1-lock-registration a{background:url("//upload.wikimedia.org/wikipedia/commons/d/d6/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription a,.mw-parser-output .citation .cs1-lock-subscription a{background:url("//upload.wikimedia.org/wikipedia/commons/a/aa/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("//upload.wikimedia.org/wikipedia/commons/4/4c/Wikisource-logo.svg")right 0.1em center/12px no-repeat}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:#d33}.mw-parser-output .cs1-visible-error{color:#d33}.mw-parser-output .cs1-maint{display:none;color:#3a3;margin-left:0.3em}.mw-parser-output .cs1-format{font-size:95%}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}RFC 3610
ではAESでの利用について定義されている。CTRモードの派生として、CCMモードはストリーム暗号として振る舞う[1]。そのため、初期化ベクトル (IV)を慎重に選択し、再使用することは避けなければならない。 名称が示すように、CCMモードはカウンター (CTR)モードとCBC-MACモードを組み合わせたものであり、前者が暗号化に、後者が認証に用いられる。暗号化に用いられたカウンター値が認証で用いられる初期化ベクトルと衝突することがない限り、同一の鍵を暗号化と認証の双方に用いることができる。この組み合わせについては、ブロック暗号の安全性に基づくNISTによる安全性証明が存在する[2]。この証明は、128ビットAESだけでなく、任意のブロック長
暗号化と認証
CCMモードはRuss Housley、Doug Whiting、Niels Fergusonによって設計された。CCMモードの開発時、Russ HousleyはRSA Laboratoriesに勤務していた。
CCM*と呼ばれるCCMモードの派生が存在し、ZigBeeでの暗号化に利用されている。CCM*はCCMモードのすべての機能を有しており、暗号化のみでの利用も可能である。[4] CCMモードは、メッセージを暗号化して認証するためにメッセージ1ブロックにつき2回のブロック暗号の暗号化操作を、関連データ(暗号化されない部分)の認証のためにデータ1ブロックにつき1回の暗号化操作を必要とする。 Crypto++
パフォーマンス
非効率性に関する特記事項: 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]といった標準規格で採用されている。
CCM は「on-line」の認証付き暗号ではなく、事前にメッセージ(と関連データ)の長さが分かっていなければならない。
認証コード(MAC)の生成において、関連データの長さは可変長のエンコーディングがなされ、コンピュータのワード長よりも短い場合がある。このことは、(あまり無いことだが)関連データが長い場合にはMAC生成が遅くなる原因となりうる。
関連データはメッセージデータの後に処理される。そのため,関連データが固定であったとしても、事前に計算しておくといったことはできない。
特許
利用
関連項目
暗号利用モード
認証付き暗号
Advanced Encryption Standard
Counter mode with Cipher-block chaining Message authentication code Protocol