0

MD5、Whirlpool、SHA [n]などに、次のように整列するhexdigest出力を取得する可能性のある「特別な」入力があるかどうかは誰でも知っています。

  • すべての数字
  • すべての英字
  • 同じ文字/パターンのすべてが一貫してまたは完全に繰り返された

Pythonの例:

>>> from hashlib import sha1
>>> hash = sha1('magic_word').hexdigest()
>>> hash
4040404040404040404040404040404040404040
>>> hash = sha1('^3&#b d   *#"').hexdigest()
aedefeebadcdccebefadcedddcbeadaedcbdeadc

これも可能ですか?ハッシュ関数に関する私の知識は、パスワードを保存するためのデータベースにそれらを適用する範囲に限定されていますが、基本的にはありません。

しかし、衝突をテストするときに、このようなケースが発生する可能性があるのではないかと思うことがあります...

4

3 に答える 3

3

ハッシュ関数はランダムオラクルをモデル化します。入力ごとに、まだクエリが実行されていない場合は、ダイスを投げて出力を見つけ、それを本に書き留めます。入力が再度照会された場合は、この古い値を返すだけです。

16面のサイコロを40回(入力ごとに)投げることで、oracleのようなSHA-1に十分な出力が得られます。(MD5の場合、必要なのは32回だけです。)

したがって、「文字のみの40倍」の確率は(6/16)^40≈9.15・10 ^ -18、「数字のみの40倍」の確率は(10/16)^40≈6.8・10^と計算できます。 -9。

「最初の成功までに必要な試行回数」は幾何分布であるため、平均で1 / p回の試行が必要です。つまり、「文字のみ」の場合は約10 ^ 17回、「数字のみ」の場合は1.5・10^8回試行します。

(現在、SHA-1は実際のランダムオラクルではありませんが、SHA-1がこれらのいずれかに対してより良いまたはより悪い確率を持っていると言う弱点は知られていません。そして今のところ、ブルートフォースは本当に最高のようですこれを行う方法。)

于 2011-12-06T18:22:44.250 に答える
1

私は正しい入力で、そのような種類の出力が可能であると確信しています。なぜそれが重要なのですか?ちょっと興味があるんだけど?

于 2011-12-06T04:53:13.240 に答える
0

はい、可能です。適切な入力があれば、任意のビットパターンを出力できます。ただし、適切な入力を見つけるには数百万年かかる場合があります。

すべてのヘクス0〜9またはすべてのヘクスafのように、適度に広いターゲットの場合、比較的簡単なはずです。許容可能な出力の割合を計算すると、すべての可能な出力で、実行時間の見積もりを取得するのに役立ちます。ブルートフォースまたはランダム検索は、最終的にターゲットにヒットするものを見つけます。MD4のような壊れたハッシュの場合、予想時間から何かを削ることができるかもしれません。

于 2011-12-06T15:00:46.757 に答える