2009-09-04 11 views
4

これは暗号理論の問題ですが、ハッシュアルゴリズムの結果がソースと同じ値になる可能性はありますか?例えば、私は文字列を持っていると言う:ハッシュの結果は元の値と同じになりますか?

baf34551fecb48acc3da868eb85e1b6dac9de356 

私はそれにSHA1ハッシュを取得した場合、結果は次のとおりです。理論的には

4d2f72adbafddfe49a726990a1bcb8d34d3da162 

、これまでにこれらの2つの値が一致するだろう場合があります?私は特にここでSHA1について質問していません - それは私の例です。私は、ハッシュアルゴリズムがこれを防ぐような方法で構築されているかどうか疑問に思っています。

+0

関連:http://stackoverflow.com/questions/235785/is-there-an-md5-fixed-point-where-md5x-x –

+0

関連:http://stackoverflow.com/questions/2340524/is --here-any-x-for-sha1x-equals-x –

答えて

8

これは、ハッシュアルゴリズムに依存しますが、明示的にこれを防止するものがあれば驚きます。結局のところ、本当に重要ではありません。

もちろん(暗号化ハッシュのために)起こることはほとんどないと思われます...しかし、そうであっても問題は起こりません。

暗号化されていないハッシュ(ハッシュテーブルなどで使用される)では、場合によってはソース値を返すのが完全に合理的です。たとえば、JavaではInteger.hashCode()は埋め込み値を返します。

+0

誰かが例を見つけることができれば面白いだろう! – Evernoob

+0

.NETでInt32.GetHashCodeはint値も返します。 –

+0

最悪のケースでは、入力を返すハッシュの可能性は、同じハッシュを返す2つの入力と同じになります。つまり、宝くじに勝つ可能性はずっと高くなります。 –

4

確かに、整数のPythonハッシュアルゴリズムは、整数の値を返します。したがって、hash(1)== 1

4

一見ランダムな出力を返す良いハッシュアルゴリズムが与えられていると、私は出力としてそれ自身を与える1つの入力があるはずだと信じています。ハッシュがN個の可能な出力を与えることができるとしましょう。これは可能なN個の可能な入力があることを意味します。それぞれの場合、入力と一致する出力のオッズは1/Nであるため、予想される固定小数点の数はN * 1/N、または1です。

+0

非常にきれいに派生しました。 –

2

ハッシュ関数は避けるように定義してください'fixed points'はhash(x)== xの部分ですが、生のバイナリではなくハッシュの16進数で文字列表現を取っている点で、あなたのハッシュクインは少し異なります。 0-FのASCII文字コードへの任意のマッピングに依存するので、数学的にはそれほど興味深いものではありません。

MD5の固定小数点については、Is there an MD5 Fixed Point where md5(x) == x?を参照してください。確率計算は、16進ハッシュ・キーンおよび128ビット出力の他の任意のハッシュ関数についても同様に当てはまる。

+0

私は文字列表現をハッシングしているとは考えていませんでした。私の質問では、16進値を参照することを意図していました。私は自分の質問が本当に「パスワードをハッシュすれば結果が実際にパスワードそのものになる可能性はありますか? – SqlRyan

+0

あなたのパスワードがハッシュ関数の出力の長さとまったく同じでない限り、 :) –

関連する問題