SHA-1ハッシュは、すべてゼロになることができますか?

StackOverflow https://stackoverflow.com/questions/1902340

  •  19-09-2019
  •  | 
  •  

質問

のSHA-1はfourty-ゼロのHex値を計算する任意の入力、すなわち "0000000000000000000000000000000000000000" がある

役に立ちましたか?

解決

私はそうは思いません。

それが不可能な理由を表示する簡単な方法はありません。あった場合は、これ自体が衝突を発見するアルゴリズムの基礎となります。

長い分析ます:

前処理は、少なくとも1 1ビット入力に常にあることを確認します。

w[i]にわたるループは、単独で元のストリームを残すので、入力中の少なくとも1つの1ビット(ワード0〜15)があります。ループがそれらに影響を与えないので、偶数ビットパターンの巧妙な設計で、0から15までの値のうちの少なくとも一部は非ゼロでなければならない。

注:leftrotateは円形であるので、何も1ビットは失われませんれます。

メインループでは、それが要因kは決してゼロであることを確認するのは簡単ですので、tempは、右側のすべてのオペランドがゼロ(kがあることはありません)している理由のためにゼロにすることはできません。

これは合計をあふれによって0を返し(a leftrotate 5) + f + e + k + w[i]いるビット・パターンを作成することができるかどうかという問題で私たちを残します。このために、我々はw[i]の値を見つける必要があるようにw[i] = 0 - ((a leftrotate 5) + f + e + k)その

あなたがそれらを完全に制御を持っているので、

これはw[i]の最初の16の値のために可能です。しかし、16〜79の言葉が再び最初の16の値をxoringによって作成されます。

次のステップは、ループをアンロールし、線形方程式のシステムを作成することができるよう。私は読者への課題として残しておきます;-)我々は安定した結果に終わるまで、追加の方程式を作成するループを持っているので、システムが面白いです。

基本的には、アルゴリズムを使用して、入力パターンを選択することで、個々の0の単語を作成することができるように選択されましたが、これらの効果は、64の他の入力を作成するために、入力パターンをxoringによって相殺されます。

ただ、例:temp 0を作るために、我々は

持っています
a = h0 = 0x67452301
f = (b and c) or ((not b) and d)
  = (h1 and h2) or ((not h1) and h3)
  = (0xEFCDAB89 & 0x98BADCFE) | (~0x98BADCFE & 0x10325476)
  = 0x98badcfe
e = 0xC3D2E1F0
k = 0x5A827999

この値は、その後の単語で使用されて私たちw[0] = 0x9fb498b3、等を与える16、19、22、24-25、27-28、30から79。

ワード1、同様に、ワード1、17、20、23、25-26、28-29、31から79で使用されます。

あなたが見ることができるように

、重複がたくさんあります。あなたは、あなたの0結果、最後の32個の他の入力値で、その値に影響を与えるだろう。

入力値を計算すると

他のヒント

はい、それだけで信じられないほどそうです。即ち2 ^ 160内の1つ、又は0.00000000000000000000000000000000000000000000006842277657836021%

SHA1は、暗号強いbecuase

また、それはまた、少なくとも現在のコンピュータ技術を(計算上実行不可能だろう - 全てのベットは、このような<のhref = "http://en.wikipedia.org/として緊急技術のオフになっていますウィキ/ Quantum_computing」のrel = 『noreferrer』タイトル= 『量子コンピューティング』>量子計算に)それが実際に発生するまでのデータがすべてゼロのハッシュにつながる何かを見つけるために。あなたがをした場合、本当にはセンチネルとして「0」のハッシュを使用する必要があり、生産に生き残っ(あなたが「ゼロ」ハッシュセンチネルにちょうどハッシュ入力データをなかったことを)適切な主張を含めるようにしてください。それはあなたのコードが恒久的に確認する必要があります障害状態です。警告:それがない場合はあなたのコードが恒久的に分割されます。

あなたは空の文字列のSHA1ハッシュ(「da39a3ee5e6b4b0d3255bfef95601890afd80709」)を使用することができます(あなたのロジックは、入力からそれを禁止するために、特殊なケースとして、空の文字列を扱うに対処することができる場合)あなたの状況に応じて。あなたの入力は数字のみの不変などがある場合も、このようなSHA1(「A」)として、あなたの入力ドメイン内の任意の文字列のハッシュを使用していない可能です。入力は任意の正規の装飾を追加するために前処理されている場合は、装飾のない何かのハッシュは、(同様に動作します例:SHA1(「ABC」)「FOO」のようなあなたの入力は「『foo』という」のような何かに引用符が飾られていた場合)。

(明示的アルゴリズムの説明に記載のない限り)任意の特定の値は不可能であるべき理由

、SHA-1内部のいずれかの知識がなくても、私は表示されません。すべてのゼロ値がない多かれ少なかれ可能性の任意の他の特定の値を超えています。

ここでは、現在の回答のすべてに反して、誰もがそれを知っていません。確率予測と証明の間には大きな違いがあります。

しかし、あなたが安全にそれが起こらないと仮定することができます。実際には、あなたは安全にちょうど約あらゆる値が(それはいくつかのSHA-1のような手順で得られなかったと仮定した場合)の結果にはならないだろうと仮定することができます。あなたは限りSHA-1は、(それが実際には、少なくとも理論的には、もうありません)安全であるとして、これを想定することができます。

メンバー(全人類は、それがすべてbruteforcingによってゼロハッシュを見つけることに、現在の資源です、それはXXXについてかかるだろう...現在の宇宙の年齢を、それをクラックするために集中している場合)、それがどれだけありそう実感いないようです。

あなたは関数が安全である知っている場合は、

、それはそれは起こらないだろうと仮定するのは間違っていないのです。それは(あなたがゼロハッシュを見つけた場合、例えば、ユーザーのHDDは消去されません)将来変更されるので、その値を与えることができるいくつかの悪質な入力を前提としてます。

誰でもまだそれが「クリーン」か何かではないと思った場合、私は何が原因で量子力学の、現実の世界で保証されていないことを伝えることができます。あなたは、あなただけのためにめちゃくちゃ低い確率の固体壁を通って歩くことができないと仮定します。

[私はこのサイトで終わりだ...ここに私の最初の答えは、私は素敵な答えを書き込もうとしましたが、私が見るすべてが間違っているとさえしている理由を伝えることができない低能をdownvotingの束であります彼らはそれをやって。あなたのコミュニティは本当に私をがっかり。私はまだこのサイトを使用しますが、よのみ受動的に]

ここではすべての答えに反しては、答えは単純ではありません。

のハッシュ値は常に1に設定されたビットが含まれています。

scroll top