web-dev-qa-db-ja.com

160ビットのハッシュを生成するという理由だけでSHA1はMD5より優れていますか?

多くの衝突が発見されたためMD5は実質的に壊れているため、ハッシュにはSHA1がMD5よりも推奨されていることはよく知られています。誕生日攻撃では、MD5で2と衝突する可能性があります。64 複雑さと280 SHA1の複雑さ

誕生日の攻撃にかかるよりもはるかに短い時間でこれらの両方をクラックできるアルゴリズムがあることが知られています。

私の質問は次のとおりです。MD5は、衝突が発生しやすいという理由だけで安全でないと見なされていますか?両方を見ると、SHA1で衝突を生成することもそれほど難しくありません。では、SHA1の優れている点は何でしょうか。

2017年2月更新- https://security.googleblog.com/2017/02/announcing-first-sha1-collision.html

71
sudhacker

SHA-1の衝突を生成することは簡単ではありません。 SHA-1での攻撃が実際に平均コスト2で機能することは合理的であると思われます61、一般的な誕生日攻撃(280)、しかしそれでもかなり難しい( doable 、しかし高価)。

とは言っても、ハッシュ関数を耐性にするものは実際にはわかりません(たとえば、詳細な説明については この答え を参照してください)。多くの手を振ると、より多くのラウンドがあり、SHA-1の80メッセージワードの派生がMD5よりも「混合」されるため、SHA-1はMD5よりも堅牢であると主張できます(特に、1ビットの回転は、ところで、SHA-0とSHA-1の唯一の違いであり、SHA-0の衝突が発生しています)。

同じことについては、SHA-256を見てください。SHA-256ははるかに「大規模」であり(SHA-1よりも多くの操作ですが、構造が似ています)、現在は壊れていません。特定の構造に対して、ハッシュ関数の安全性を確保するために最小限の操作があったかのようです(しかし、私は途方もない速度で手を動かしているので、本当に科学的または深遠なことを言ったとは思わないでください)。

91
Tom Leek

いいえ。出力の長さだけではありません。暗号解読攻撃に対するセキュリティのレベルには大きな違いがあります。

MD5には壊滅的な衝突攻撃があります。 (MD5に関する Wikipediaの記事 にはいくつかの詳細があります。)これらの攻撃は、MD5が本質的に衝突に対するセキュリティを提供しないことを意味します。MD5で衝突を見つけるのは簡単です。

対照的に、SHA1の方がはるかに安全です。 SHA1に対する既知の攻撃がいくつかありますが、MD5に対する攻撃ほど深刻ではありません。 ( SHA1に関するWikipediaの記事 に概要があります。)このため、多くの設定でSHA1はMD5よりもはるかに優れています。

最近では、MD5やSHA1を使用する代わりに、SHA256などの最新のハッシュ関数のいずれかを使用する方が良いでしょう。それらには、実際的な関連性のある既知の攻撃はありません。

ただし、MD5の側面が完全に壊れているため、耐衝突性が必要な設定でMD5を使用しないでください。

37
D.W.

ハッシュ関数によって提供されるセキュリティのレベルは、特定のハッシュ署名(ハッシュの出力)を生成するプレーンテキストを生成する難しさに基づいています。ハッシュは、ユーザーが元のデータを実際に公開せずに所有していることを示すために、データのセットを簡略化する迅速な方法です。これは、メッセージが変更されていないことを検証するだけでなく、誰かが自分が本人であることを確認し(知っているもののハッシュを格納されている値と比較することによって)検証する場合にも役立ちます。ハッシュは多対1(多くの値は同じハッシュ値を生成します)であるため、ハッシュから元の値に作業することは理論的に困難です。可能なハッシュ値の数が多いため、特定の出力を生成するためにハッシュを取得することは困難です。

しかし、これは残念ながら常に正しいとは限りません。特定の値が人間が読める入力に対応しているという期待は、元の値を発見しようとするハッシュに対するレインボーテーブルと呼ばれる辞書攻撃を可能にします。ソルティング(入力の最初または最後に人間が読めない入力を追加する)は、レインボーテーブルが異なるソルトごとに作成される必要があるため、機能しないようにする試みです。

他の問題、そしてあなたの質問に関連する問題はハッシュ衝突の問題です。ハッシュの衝突は、2つの指定された入力が同じハッシュ出力を生成するたびに発生します。データが変更されていないことを検証するために、元のハッシュと一致する変更されたデータのセットのハッシュを生成することは簡単にはできません。残念ながら、この点に関してMD5は完全に危険にさらされています。ペイロードの末尾または先頭に置く変更を比較的簡単に見つけて有効に見せるために、複数の方法があります。 SHA-1には、この点に関して最近発見されたいくつかの小さな妥協点もありますが、MD5の問題ほど深刻ではありません。 SHA256のようなものを使用すると、現在ハッシュ衝突に対する既知の攻撃がないため、さらに安全です。

1
AJ Henderson