MD5には 十分に文書化された脆弱性 があるようですが、それでもその使用法は広く普及しています。他の選択肢(SHA-2など)がより堅牢であると思われる場合に、実行可能なオプションのままである理由はありますか?
生成は迅速であり、多くの場合、衝突が理論的に可能であるという事実は大きな問題ではありません。つまり、新しいコピーのダウンロードを回避するために、キャッシュされたファイルが変更されたかどうかを確認します。
1996年に行われた迅速なベンチマーク は次のことを示しています。
Digest Performance in MegaBytes per Second
Pentium P5 Power Mac SPARC 4 DEC Alpha
90 MHz 80 MHz 110 MHz 200 MHz
MD5 13.1 3.1 5.1 8.5
SHA1 2.5 1.2 2.0 3.3
組み込みチップでの最新の使用では、MD5は同じ情報に対してSHA1よりも2〜3倍高速に生成できます。
MD5ハッシュは、ほとんどの単純なタスクに「十分」です。同じバイト数で意味のある衝突を生成することは、依然として非常に難しいことを思い出してください。
たとえば、信頼できるミラーから来週新しいUbuntu9.10をダウンロードするとします。ファイルが正しく完全にダウンロードされたことを確認する必要があります。 MD5を起動し、ISOをハッシュするだけです。ハッシュを公開されたハッシュと比較します。ハッシュが一致する場合は、ISOが正しく完全にコピーされたことを確認できます。
塩漬けにすることでセキュリティを向上させることができます。
MD5は、高速で衝突率が非常に低いため、チェックサムハッシュ関数として広く使用されています。 MD5チェックサムは32桁の16進数で構成されており、衝突のオッズは約3.42e34の1になります。理論的には、米国と同じ大きさの国のすべてのコンピューターのすべてのファイルをハッシュし、衝突を発生させないようにすることができます(*)。
暗号化の場合、セキュリティが中程度の懸念事項である場合、MD5は有効な代替手段です。これは、データベースのパスワードや、その速度のために内部セキュリティを必要とするその他のフィールドをハッシュするための非常に実行可能なオプションですが、MD5は、強力な暗号化が問題にならない妥当なレベルのセキュリティを提供するためです。
(*)ほとんどのチェックサムの目的で、衝突は、同じ起源で同じサイズの2つのオブジェクト間で発生した場合にのみ意味があります。 MD5の高い一意性の確率にもかかわらず、衝突は2つの非常に異なるファイル間で最終的に発生する可能性があります。たとえば、1.5Mbのデータベースファイルと35kのgifファイルです。ほとんどの場合、これは無意味な衝突です。 MD5はファイルインデックスの1つの要素にすぎないため、さらにそうです。ファイルサイズも重要です。
MD5は広く使用されているため広く使用されており、既存のシステムで明らかな問題となるほどブレークはまだ重要ではありません。