優れたハッシュ関数には次の特性があります。
メッセージのハッシュが与えられると、攻撃者がハッシュが同一であるような別のメッセージを見つけることは計算上不可能です。
メッセージのペア m' と m が与えられた場合、h(m) = h(m') となるようなメッセージを 2 つ見つけることは計算上不可能です。
2 つのケースは同じではありません。最初のケースでは、衝突を見つけようとしている既存のハッシュがあります。2 番目のケースでは、衝突する 2 つのメッセージを見つけようとしています。2 番目のタスクは、誕生日の「パラドックス」により、はるかに簡単になります。
パフォーマンスがそれほど問題にならない場合は、常に安全なハッシュ関数を使用する必要があります。ハッシュで衝突を強制することによって実行できる非常に巧妙な攻撃があります。最初から強いものを使えば防げます。
新しい設計では MD5 または SHA-1 を使用しないでください。私を含むほとんどの暗号学者は、それらが壊れていると考えるでしょう。これらの設計の両方の弱点の主な原因は、上で概説した 2 番目の特性がこれらの構造には当てはまらないことです。攻撃者が 2 つのメッセージ m と m' を生成できる場合、両方が同じ値にハッシュされ、攻撃者に対してこれらのメッセージを使用できます。SHA-1 と MD5 もメッセージ拡張攻撃の影響を受けます。注意しないと、アプリケーションが致命的に弱体化する可能性があります。
Whirpool などの最新のハッシュを使用することをお勧めします。これらのメッセージ拡張攻撃に悩まされることはなく、AES がさまざまな攻撃に対するセキュリティを証明するために使用するのと同じ数学を使用します。
それが役立つことを願っています!