あなたが説明するものは衝突と呼ばれます。SHA-1 はより多くの異なるメッセージを入力として受け入れ、異なる出力を生成できるため、衝突は必然的に存在します (SHA-1 は 2^64 ビットまでの任意のビット列を消費する可能性がありますが、出力は 160 ビットのみです。したがって、少なくとも 1 つの出力値が数回ポップアップする必要があります)。この観察は、関数が「適切な」ハッシュ関数であるかどうかに関係なく、入力よりも小さい出力を持つすべての関数に有効です。
SHA-1 が「ランダム オラクル」(基本的にランダムな値を返す概念オブジェクトであり、入力 m で出力v を返すと、その後は常に入力mで vを返さなければならないという唯一の制限付き) のように動作すると仮定すると、 2 つの異なる文字列 S1 と S2 の衝突確率は 2^(-160) である必要があります。SHA-1 がランダムなオラクルのように振る舞うという仮定の下で、多くの入力文字列を収集すると、約 2^80 のそのような文字列を収集した後に衝突が観察され始めます。
(これは 2^160 ではなく 2^80 です。これは、2^80 の文字列を使用すると、約 2^159 ペアの文字列を作成できるためです。これは、衝突に適用されるとほとんどの人が驚くため、「誕生日のパラドックス」と呼ばれることがよくあります。誕生日に関するウィキペディアのページを参照してください。)
ここで、誕生日パラドックス アプローチがランダム オラクルの最適な衝突検索アルゴリズムであるため、SHA-1 が実際にはランダム オラクルのように動作しないことを強く疑っています。それでも、約 2^63 ステップで衝突を検出する攻撃が公開されているため、誕生日パラドックス アルゴリズムよりも 2^17 = 131072 倍高速です。このような攻撃は、真のランダム オラクルでは実行できないはずです。注意してください、この攻撃は実際には完了しておらず、理論的なままです (一部の人々は試みましたが、明らかに十分な CPU パワーを見つけることができませんでした)(更新: 2017 年の初めの時点で、誰かがSHA-1 衝突を計算しました上記の方法で、予測どおりに機能しました)。それでも、理論は健全に見え、SHA-1 はランダムなオラクルではないようです。それに対応して、衝突の確率に関しては、まあ、すべての賭けはオフです。
3 番目の質問について: nビット出力の関数の場合、2^ nを超える個別のメッセージを入力できる場合、つまり最大入力メッセージ長がnより大きい場合、必然的に衝突が発生します。範囲mがnよりも小さい場合、答えはそれほど簡単ではありません。関数がランダム オラクルとして動作する場合、衝突が存在する確率はmとともに低下し、直線的にではなく、m=n/2付近で急激にカットオフします。これは誕生日のパラドックスと同じ分析です。SHA-1 では、これは、m < 80 の場合、衝突が発生しない可能性があり、m > 80であることを意味します。少なくとも 1 つの衝突が存在する可能性が非常に高くなります ( m > 160の場合、これは確実になります)。
「衝突が存在する」と「衝突を見つける」には違いがあることに注意してください。衝突が存在しなければならない場合でも、試行するたびに 2^(-160) の確率があります。前の段落が意味することは、たとえば 80 ビット未満の文字列に制限しているなどの理由で (概念的に) 2^160 ペアの文字列を試すことができない場合、そのような確率はむしろ無意味であるということです。