CBC-MAC (cipher block chaining message authentication code) は、ブロック暗号からメッセージ認証符号を生成する手法である。あるブロック暗号のCBCモードでメッセージを暗号化することで暗号ブロックの連鎖を形成すると、それぞれのブロックの暗号化はその前のブロックの暗号化の結果に依存する。そのため、平文が1ビットでも変化すると、暗号化後の最終ブロックも変化することとなる。
メッセージ m {\displaystyle m} のCBC-MACを計算するには、初期化ベクトルを0としてCBCモードで暗号化を行う。次の図は、メッセージ m {\displaystyle m} を m 1 ‖ m 2 ‖ ⋯ ‖ m x {\displaystyle m_{1}\|m_{2}\|\cdots \|m_{x}} とブロックに分割し、秘密鍵 k {\displaystyle k} とブロック暗号 E {\displaystyle E} を用いてCBC-MACを計算する様子を示している。
ブロック暗号が安全であれば、CBC-MACは固定長のメッセージについては安全であるが[1]、可変長のメッセージについては安全ではない。そのため、ある鍵は固定長かつ既知の長さのメッセージにしか用いることはできない。これは、攻撃者が2組のメッセージ‐CBC-MACのペア ( m , t ) {\displaystyle (m,t)} および ( m ′ , t ′ ) {\displaystyle (m',t')} を知っている場合、CBC-MACが t ′ {\displaystyle t'} となるメッセージ m ″ {\displaystyle m''} を生成することが可能であるためである。メッセージ m ″ {\displaystyle m''} の生成は以下の手順となる。メッセージ m ′ {\displaystyle m'} の最初のブロックと t {\displaystyle t} の排他的論理和をとり、メッセージ m {\displaystyle m} とこの改変したメッセージ m ′ {\displaystyle m'} を連結する: m ″ = m ‖ [ ( m 1 ′ ⊕ t ) ‖ m 2 ′ ‖ … ‖ m x ′ ] {\displaystyle m''=m\|[(m_{1}'\oplus t)\|m_{2}'\|\dots \|m_{x}']} 。メッセージ m ″ {\displaystyle m''} を計算する場合、メッセージ m {\displaystyle m} の場合と同様タグ t {\displaystyle t} までは通常に計算される。しかし、続く E K M A C ( m 1 ′ ⊕ t ) {\displaystyle E_{K_{MAC}}(m_{1}'\oplus t)} の計算において、 t {\displaystyle t} と t {\displaystyle t} の排他的論理和を計算することとなるためこれは打ち消され、本来のメッセージ m {\displaystyle m} はMAC値に寄与しないこととなる( E K M A C ( m 1 ′ ⊕ t ⊕ t ) = E K M A C ( m 1 ′ ) {\displaystyle E_{K_{MAC}}(m_{1}'\oplus t\oplus t)=E_{K_{MAC}}(m_{1}')} であるからメッセージ m ″ {\displaystyle m''} のCBC-MACタグは t ′ {\displaystyle t'} となる)。 この問題は、メッセージ長の情報を最後に追加することでは解決できない[2]。可変長メッセージにおいてもCBC-MACを安全に利用するためには3つの主な改良法が存在する。一つ目は鍵の入力長の分割、2つめはメッセージ長の情報を先頭に追加すること、3つめは最後のブロックを暗号化することである[2]。CMACやHMACのような、可変長メッセージでも安全な他の暗号利用モードを用いることも検討すべきである。 解決法の一つはメッセージ長を先頭ブロックに含めることである[3]。メッセージ長に関する部分以外で冒頭部が一致する複数のメッセージを取り扱わない限りは、CBC-MACは安全であることが証明されている[4]。しかし、プロセス開始時点でメッセージ長がわかっていない場合にはこの方法を用いることはできない。 最終ブロックの暗号化は CBC-MAC-ELB ( m , ( k 1 , k 2 ) ) = E ( k 2 , CBC-MAC ( k 1 , m ) ) {\displaystyle {\text{CBC-MAC-ELB}}(m,(k_{1},k_{2}))=E(k_{2},{\text{CBC-MAC}}(k_{1},m))} と定義される[2]。他の方法と違い、計算完了までメッセージ長を知る必要がない。 CBC-MACの不適切な利用に対する攻撃法を示す。 よくある間違いの一つは、CBCモードでの暗号化とCBC-MACに同じ鍵を使用することである。違う目的に鍵を使いまわすことは一般的に好ましくないが、CBC-MACにおいては攻撃を招く要因となる。 アリスがボブに暗号化したテキストブロック C = C 1 。 。 C 2 。 。 … 。 。 C n {\displaystyle C=C_{1}\ ||\ C_{2}\ ||\ \dots \ ||\ C_{n}} およびタグ t {\displaystyle t} を送った。通信経路上において、イブは任意の C 1 , … , C n − 1 {\displaystyle C_{1},\dots ,C_{n-1}} を改変可能であり、最終ブロックが元と同じになるようにビット列を調節し、 C ′ = C 1 ′ 。
固定長及び可変長のメッセージにおけるセキュリティ
メッセージ長の先頭への追加
最終ブロックの暗号化
攻撃法
暗号化と認証に同じ鍵を使用
Size:26 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)』
担当:undef