質問
の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の値をxor
ingによって作成されます。
次のステップは、ループをアンロールし、線形方程式のシステムを作成することができるよう。私は読者への課題として残しておきます;-)我々は安定した結果に終わるまで、追加の方程式を作成するループを持っているので、システムが面白いです。
基本的には、アルゴリズムを使用して、入力パターンを選択することで、個々の0の単語を作成することができるように選択されましたが、これらの効果は、64の他の入力を作成するために、入力パターンをxor
ingによって相殺されます。
ただ、例: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%
また、それはまた、少なくとも現在のコンピュータ技術を(計算上実行不可能だろう - 全てのベットは、このような<のhref = "http://en.wikipedia.org/として緊急技術のオフになっていますウィキ/ Quantum_computing」のrel = 『noreferrer』タイトル= 『量子コンピューティング』>量子計算に)それが実際に発生するまでのデータがすべてゼロのハッシュにつながる何かを見つけるために。あなたがをした場合、本当にはセンチネルとして「0」のハッシュを使用する必要があり、生産に生き残っ(あなたが「ゼロ」ハッシュセンチネルにちょうどハッシュ入力データをなかったことを)適切な主張を含めるようにしてください。それはあなたのコードが恒久的に確認する必要があります障害状態です。警告:それがない場合はあなたのコードが恒久的に分割されます。
。あなたは空の文字列のSHA1ハッシュ(「da39a3ee5e6b4b0d3255bfef95601890afd80709」)を使用することができます(あなたのロジックは、入力からそれを禁止するために、特殊なケースとして、空の文字列を扱うに対処することができる場合)あなたの状況に応じて。あなたの入力は数字のみの不変などがある場合も、このようなSHA1(「A」)として、あなたの入力ドメイン内の任意の文字列のハッシュを使用していない可能です。入力は任意の正規の装飾を追加するために前処理されている場合は、装飾のない何かのハッシュは、(同様に動作します例:SHA1(「ABC」)「FOO」のようなあなたの入力は「『foo』という」のような何かに引用符が飾られていた場合)。
アーロンによってポストが正しくありません。ラウンド関数の最後に何が起こるかを無視してそれはSHA1計算の内部にハングアップ取得されます。
具体的には、ウィキペディアするから擬似コードを参照。ラウンドの終わりには、次の計算が行われます:
h0 = h0 + a
h1 = h1 + b
h2 = h2 + c
h3 = h3 + d
h4 = h4 + e
h0 == -a
、h1 == -b
、h2 == -c
、h3 == -d
、およびh4 == -e
は計算が2 ^ 32モッズあるこの最後のセクション、に入る場合は、だから、すべての0出力が発生する可能性があります。
あなたの質問に答えるために:誰もがすべてゼロ出力を生成入力が存在するかどうか知りませんが、暗号学者はが期待のDAFによって提供される単純な引数時にそこに基づいていること
、SHA-1内部のいずれかの知識がなくても、私は表示されません。すべてのゼロ値がない多かれ少なかれ可能性の任意の他の特定の値を超えています。
ここでは、現在の回答のすべてに反して、誰もがそれを知っていません。確率予測と証明の間には大きな違いがあります。
しかし、あなたが安全にそれが起こらないと仮定することができます。実際には、あなたは安全にちょうど約あらゆる値が(それはいくつかのSHA-1のような手順で得られなかったと仮定した場合)の結果にはならないだろうと仮定することができます。あなたは限りSHA-1は、(それが実際には、少なくとも理論的には、もうありません)安全であるとして、これを想定することができます。
メンバー(全人類は、それがすべてbruteforcingによってゼロハッシュを見つけることに、現在の資源です、それはXXXについてかかるだろう...現在の宇宙の年齢を、それをクラックするために集中している場合)、それがどれだけありそう実感いないようです。
あなたは関数が安全である知っている場合は、、それはそれは起こらないだろうと仮定するのは間違っていないのです。それは(あなたがゼロハッシュを見つけた場合、例えば、ユーザーのHDDは消去されません)将来変更されるので、その値を与えることができるいくつかの悪質な入力を前提としてます。
誰でもまだそれが「クリーン」か何かではないと思った場合、私は何が原因で量子力学の、現実の世界で保証されていないことを伝えることができます。あなたは、あなただけのためにめちゃくちゃ低い確率の固体壁を通って歩くことができないと仮定します。
[私はこのサイトで終わりだ...ここに私の最初の答えは、私は素敵な答えを書き込もうとしましたが、私が見るすべてが間違っているとさえしている理由を伝えることができない低能をdownvotingの束であります彼らはそれをやって。あなたのコミュニティは本当に私をがっかり。私はまだこのサイトを使用しますが、よのみ受動的に]
ここではすべての答えに反しては、答えは単純ではありません。
のハッシュ値は常に1に設定されたビットが含まれています。