7

関数は次のとおりです。

$a == md5($b . $secret);
  • $aと$bを選択できます
  • あなたは$secretを知らない
  • trueまたはfalseとして選択した$aおよび$bの関数の値を取得します。

一般的に$secretを見つけるために、ブルートフォースよりも優れた攻撃はありますか?PHPのmd5関数を使用して$secretを見つけるために、ブルートフォースよりも優れた攻撃はありますか?

私がウェブ上で見つけたものから、md5は他のいくつかのユースケースでは非推奨ですが、そうではないと思います。念のために...

敬具

4

3 に答える 3

4

MD5 がランダム オラクルのように動作する場合 (これは大きな「if」です。以下を参照)、徹底的な検索$secretが最善の攻撃です。さらに重要なことに、値の各「推測」では$secret関数へのクエリを使用する必要があります。 (PHP を使用しているため、関数は Web サーバーに実装されており、各「クエリ」はそのサーバーと通信する必要があると想定しています)。後者は、攻撃者に送り返される情報の欠如によって暗示されます。攻撃者は、単一のビット (" True" または " False" の結果) 以外は何も取得しません。特に、彼は MD5 出力自体を取得しません。攻撃者はFalse、純粋な偶然 (確率 2 -128、これは本当にくそ小さい)、または彼が$secret事前に の値を適切に推測したためです。これにより、攻撃者が事前計算されたテーブル、特に過大宣伝されたレインボー テーブルなど、多くのコスト共有手法を使用できなくなることに注意してください。

ランダムオラクルは、決定論的なブラックボックスと見なすことができる神話上のオブジェクトです。ボックスが特定の入力に対して常に同じ結果を返すことを除いて、特定の入力から得られる出力について何も知りませんモデルは次のとおりです。ボックスには、ノーム、いくつかのサイコロ、および大きな本が含まれています。gnome はサイコロを使用してランダムに出力を選択します。彼はまた、本を使用して、一貫性を保つために、既に送信した回答を追跡します。つまり、入力が以前に送信された入力と同一である場合、gnome はサイコロを投げる代わりに、以前と同じ出力を返します。

ただし、MD5 はランダム オラクルではありません。たとえば、MD5 の衝突は、128 ビット出力の関数の理論上の 2 64抵抗よりもはるかに高速に構築できます。また、優れたハッシュ関数 (衝突耐性など) であることは、「ランダムオラクル性」を絶対に必要としないことに注意してください。たとえば、SHA-256は安全なハッシュ関数であると見なされますが、いわゆる「長さ拡張攻撃」の影響を受けます ( が与えられた場合、 のほぼ任意の値について、を知らなくてSHA256($a)も計算できます)。そのため、MD5 (さらに言えば、SHA-256) では、ランダムオラクルの保証は成り立ちません。これは、より速い攻撃が知られているという意味ではありません! あなたがここにいるのはあなただけです。SHA256($a . $b)$a$b

md5($b . $secret)これは一種の「キー付きハッシュ」、つまりMAC (メッセージ認証コード)であると指摘することもできます。ハッシュ関数から MAC を構築するのは簡単ではありません。正確には、長さ拡張攻撃のようなものです (md5($secret . $b)たとえば、 は非常に貧弱な MAC になります)。ハッシュ関数から MAC を構築する堅牢な方法が設計されています。これはHMACと呼ばれ、基礎となるハッシュ関数の 2 つの呼び出しを伴います (ただし、そのうちの 1 つは短い入力であるため、それでも効率的です)。HMAC のセキュリティ、より正確には、HMAC がランダムオラクルとしてどのように振る舞うと見なすことができるかを「証明」することができます。NMAC と HMAC の新しい証明: Security without Collision-Resistance by Mihir Bellare による悲惨な詳細)。HMAC/SHA-256 over$b$secretas key と共に使用することで、これらのセキュリティの結果から利益を得ることができ、構築はより説得力のある堅牢になります。繰り返しになりますが、私は に対する既知の攻撃があるとは主張しませんがmd5($b . $secret)、MD5 の使用自家製の MAC 構築の両方が警告を発し、そのようなシステムに与えることができる信頼のレベルを低下させるだけです。

于 2011-04-24T15:43:15.193 に答える
3

これは興味深い質問です。なぜなら、IT セキュリティの典型的なシナリオでは、攻撃者として$a選択できないからです。$bたとえば、ハッシュ化されたパスワードを取得でき、$aすでに$b定義されていて、それを処理する必要がある場合。その場合、ソルトの$bあるものが利用可能な場合にのみ、ブルートフォースまたはレインボーテーブルを使用できます.

一方、あなたの例では、両方の値を自由に選択できます。任意のシークレットを取得できます。たとえば、それに応じてandtestの値を選択できます。$b を に選択し、で計算すると、 が得られます。$a$bempty string$a$a = md5($secret)098f6bcd4621d373cade4e832627b4f6

を選択$a = "098f6bcd4621d373cade4e832627b4f6"$b= ""、どうかお尋ねします$secret == "test"。あなたは本当だと言い、私は問題が解決したと言います。

これは最終的に私たちを本当の答えに導きます。与えられた2つの条件

  • $a と $b を選択できます
  • あなたは $secret を知りません

一緒に仕事をしないでください。私の例では、私は$secret自分自身を定義しました。2 番目の条件に違反しました。一方で、 から導出せず$a$b恣意的に選択することはでき$secretません。

と のすべての可能なペアに対して少なくとも 1 つの解があると仮定する$a$b(証明があるかもしれませんが、私にはわかりません)、実際にはわからない方法でそれらを選択する場合$secret、私は常に次のようにします。を定義$b = ""して、攻撃をできるだけ簡単にします。その場合、レインボーテーブルはあなたの友達です。

于 2011-04-24T08:37:25.443 に答える
1

有名なパスワードのレインボーテーブル/パスワードハッシュをダウンロード!:)

于 2011-04-24T02:27:23.467 に答える