SHA(-1-2-3) は、出力と同じ長さの入力に対する 1 対 1 の関数ですか?
具体的な例として質問を言い換えると、SHA-1 には 160 バイトの出力があるので、すべての 160 バイトの入力には固有の 160 バイトの出力がありますか? 答えは、SHA-2 と 3、および利用可能なすべての出力サイズで同じですか?
SHA(-1-2-3) は、出力と同じ長さの入力に対する 1 対 1 の関数ですか?
具体的な例として質問を言い換えると、SHA-1 には 160 バイトの出力があるので、すべての 160 バイトの入力には固有の 160 バイトの出力がありますか? 答えは、SHA-2 と 3、および利用可能なすべての出力サイズで同じですか?
誰もそれを証明したり、その範囲で可能なすべての入力をテストしたりしていないため、誰も知りません. それは単純な真実です。
関数が真にランダムに動作する場合、誕生日のパラドックスにより、答えはほぼ確実に「いいえ」になります.160ビットの出力の場合、平均して、任意のペア間の衝突を見つけるには2 ^ 80入力をテストする必要があります。
簡単な答え:決定的な答えはありませんが、より安全な方法は(質問を拡張して、SHAファミリーのすべての機能をカバーする場合)、「いいえ」と言うことだと思います。もう少し数学的にしましょう。
SHAファミリー関数の1つを選んで調べてみましょう。nビットの出力を返し、「ランダムオラクル」のように動作すると仮定します(そうではありませんが、仮定します)。つまり、常に同じ出力を返すという制限付きの入力に対して、ランダムなnビット値を返します。同じ入力に対して。
これらの仮定では、同じではない2つの入力文字列の衝突の確率は2 ^(-n)である必要があります。誕生日のパラドックスのため、約2 ^(n / 2)個の異なる入力の後に衝突が見つかると予想されます。
したがって、誕生日のパラドックスのために、nビット入力をハッシュしてnビット出力を生成するときに関数が1対1になる可能性は高くありません。
最終的に、あなたの質問に最終的に答える唯一の方法は、すべての可能なnビットSHA関数ですべての可能なnビット入力を試すことです。あなたの生涯で決定的な答えを得ることを期待しないでください...