hacktricks/cryptography/cipher-block-chaining-cbc-mac-priv.md
2023-07-07 23:42:27 +00:00

7.1 KiB
Raw Blame History

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

CBC

もしクッキーユーザー名だけ(またはクッキーの最初の部分がユーザー名)であり、ユーザー名「admin」をなりすます場合、ユーザー名**「bdmin」を作成し、クッキーの最初のバイトブルートフォース**できます。

CBC-MAC

暗号学において、Cipher Block Chaining Message Authentication CodeCBC-MACは、ブロック暗号からメッセージ認証コードを構築するための技術です。メッセージは、いくつかのブロック暗号アルゴリズムを使用してCBCモードで暗号化され、各ブロックが前のブロックの適切な暗号化に依存するようにブロックのチェーンが作成されます。この相互依存性により、平文の任意のビットの変更が、鍵を知らない限り予測または打ち消すことができない方法で最終的な暗号化ブロックを変更させます。

メッセージmのCBC-MACを計算するには、ゼロの初期化ベクトルでmをCBCモードで暗号化し、最後のブロックを保持します。次の図は、秘密鍵kとブロック暗号Eを使用してブロックm_{1}\|m_{2}\|\cdots \|m_{x}からなるメッセージのCBC-MACの計算をスケッチしたものです。

CBC-MAC structure (en).svg

脆弱性

CBC-MACでは通常、使用されるIVは0です。
これは、2つの既知のメッセージm1m2が独立して2つの署名s1s2)を生成することを意味します。したがって:

  • E(m1 XOR 0) = s1
  • E(m2 XOR 0) = s2

その後、m1とm2を連結したメッセージm3は2つの署名s31とs32を生成します

  • E(m1 XOR 0) = s31 = s1
  • E(m2 XOR s1) = s32

これは、暗号化の鍵を知らなくても計算可能です。

名前Administrator8バイトのブロックで暗号化していると想像してください:

  • Administ
  • rator\00\00\00

Administm1というユーザー名を作成し、署名s1を取得できます。
次に、rator\00\00\00 XOR s1 XOR 0の結果となるユーザー名を作成できます。これにより、E(m2 XOR s1 XOR 0)が生成され、それはs32です。
これで、s32をフルネームAdministratorの署名として使用できます。

要約

  1. ユーザー名Administm1の署名であるs1を取得します。
  2. ユーザー名rator\x00\x00\x00 XOR s1 XOR 0の署名であるs32を取得します。
  3. クッキーをs32に設定し、ユーザーAdministratorの有効なクッキーになります。

攻撃時のIVの制御

使用されるIVを制御できる場合、攻撃は非常に簡単になります。
クッキーが単に暗号化されたユーザー名である場合、ユーザーadministratorをなりすますためにユーザーAdministratorを作成し、そのクッキーを取得できます。
さて、IVを制御できる場合、IVの最初のバイトを変更してIV[0] XOR "A" == IV'[0] XOR "a"とすることができ、ユーザーAdministratorのクッキーを再生成できます。このクッキーは、初期のIVユーザーadministratorなりすますために有効です。

参考文献

詳細はhttps://en.wikipedia.org/wiki/CBC-MACを参照してください。

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥