データに付随するMAC (メッセージ認証コード) の目的は、送信後などにデータが変更されていないことを確認できるようにすることで、データの完全性を保証することです。
CBC-MAC はMAC アルゴリズムの 1 つです。これは、CBC (暗号ブロック連鎖) 動作モードに従って使用されるブロック暗号に基づいています。この原則は、1985 年に NIST 標準 (FIPS PUB 113、コンピュータ データ認証に関する標準) で策定されました。
暗号化するには、データを適切なサイズのブロックに分割します (使用されるブロック暗号に応じて、少なくとも 32 ビットのブロック暗号)。ブロックは次々に暗号化され、前のブロックの暗号化結果が次のブロックに送信されます。
正式な説明
E k ( Mi )をデータ ブロックの暗号化操作とします。
$$ {M_i~} $$
鍵と一緒に$$ {k~} $$
。暗号化は次のように行われます。
- データを固定サイズのブロックに分割します$$ {M_0, …, M_{n-1}~} $$最後のブロックにはPKCS #7規格に準拠した充填が施されています
- 初期化ベクトルを定義します$$ {C_0 = 0~} $$
- ブロックを次のように処理します。 $$ {C_{i+1} = E_k(C_i \oplus M_i)} $$
認証コードは、最後の暗号化ブロックC n − 1 (NIST 標準では 16 ~ 64 ビットの抽出) の一部に対応します。

安全
Preneel と Van Oorschot によって説明された攻撃では、認証コードを伴う約2n/2 個の既知のテキストが必要であり ( nはビット単位のブロックの長さ)、認証コードの偽造が可能になります。 CBC-MAC は、可変サイズのメッセージでは安全ではありません。これらの理由により、反復 MAC ベースのシステムが必要な場合は、XCBC-MAC を使用することをお勧めします。

