AES-CBC
AES-CBC とは何ですか?
AES-CBCAES 暗号化を直前の暗号文ブロックと連鎖させる認証なしのブロック暗号モード。MAC を伴わない場合はパディングオラクル攻撃に脆弱。
AES-CBC(暗号ブロック連鎖モード)は NIST SP 800-38A で定義された旧来のモードで、128 ビット平文ブロックを直前の暗号文ブロックと XOR してから AES 暗号化を行います。最初のブロックには乱数の IV を使用します。CBC は機密性のみを提供し完全性は提供しないため、encrypt-then-MAC 構成で別途 MAC と組み合わせる必要があります。PKCS#7 パディング付き CBC はパディングオラクル攻撃(BEAST、Lucky 13、POODLE)で有名で、TLS、IPsec、ディスク暗号化に対して悪用されてきました。現代の標準は AES-GCM や ChaCha20-Poly1305 などの AEAD を推奨しますが、TLS 1.0/1.1 のレガシースタックでは依然 CBC が残っています。
パディングオラクル攻撃という分類は、2002 年に Serge Vaudenay によって提唱されました。サーバーが、エラーメッセージ・応答時間・挙動の違いを通じて、復号した PKCS#7 パディングが妥当かどうかを漏らしてしまうと、攻撃者は鍵をまったく知らないまま平文を 1 バイトずつ復元できます。このパターンは、SSL 3.0 に対する POODLE(CVE-2014-3566)、TLS の MAC-then-encrypt 構成におけるタイミングサイドチャネルである Lucky 13(CVE-2013-0169)、そして TLS 1.0 の予測可能な連鎖 IV を悪用した BEAST(CVE-2011-3389)として再び現れました。CBC は可鍛性も持ちます。暗号文ブロックの 1 ビットを反転させると、次のブロックの対応する平文ビットが反転するため、完全性保護がなければ攻撃者は検知されずにメッセージを改ざんできます。
したがって正しい運用には、メッセージごとにランダムで予測不可能な IV を用い、レガシーな MAC-then-encrypt の順序ではなく encrypt-then-MAC による完全性(TLS では RFC 7366 で標準化)を備える必要があります。CBC は IPsec、SSH、古い TLS 環境では依然として見られますが、TLS 1.3 はすべての CBC 暗号スイートを削除し、代わりに AEAD を必須としました。レガシーシステムをリファクタリングする際は、AES-CBC + HMAC を単一の AEAD プリミティブ(AES-GCM、AES-GCM-SIV、または ChaCha20-Poly1305)に置き換えることで、パディングオラクルと MAC 順序という落とし穴を一挙に排除できます。
flowchart LR IV[ランダム IV] --> X1((XOR)) P1[平文ブロック 1] --> X1 X1 --> E1[AES 暗号化] --> C1[暗号文ブロック 1] C1 --> X2((XOR)) P2[平文ブロック 2] --> X2 X2 --> E2[AES 暗号化] --> C2[暗号文ブロック 2]
● 例
- 01
古い TLS 1.0/1.1 スイートの AES-256-CBC + HMAC-SHA256。
- 02
BitLocker は全ディスク暗号化で AES-CBC を XTS-AES に置き換えた。
● よくある質問
AES-CBC とは何ですか?
AES 暗号化を直前の暗号文ブロックと連鎖させる認証なしのブロック暗号モード。MAC を伴わない場合はパディングオラクル攻撃に脆弱。 サイバーセキュリティの 暗号 カテゴリに属します。
AES-CBC とはどういう意味ですか?
AES 暗号化を直前の暗号文ブロックと連鎖させる認証なしのブロック暗号モード。MAC を伴わない場合はパディングオラクル攻撃に脆弱。
AES-CBC からどのように防御しますか?
AES-CBC に対する防御は通常、上記の定義で述べたとおり、技術的統制と運用上の実践を組み合わせます。
AES-CBC の別名は何ですか?
一般的な別名: 暗号ブロック連鎖, AES-128-CBC, AES-256-CBC。