web-dev-qa-db-ja.com

SHA512がMD5より優れている理由

SHA512がMD5よりも優れたハッシュアルゴリズムである理由を説明したり、リソースへのリンクを提供できるかどうか疑問に思っていました。

28
Lee Warner

ユースケースによって異なります。広範に「優越」を主張することはできません。 (つまり、一部のケースでは可能ですが、厳密に言うと、実際にはできません)。

しかし、MD5が壊れている領域があります。

  1. 手始めに:MD5は古く、一般的です。それに対抗するレインボーテーブルがたくさんあり、簡単に見つけることができます。したがって、パスワードをハッシュしている場合(塩なしで-恥ずかしいです!)-md5を使用している場合-ハッシュしない方がいいかもしれませんが、簡単に見つけることができます。あなたが本当に単純な塩でハッシュしている場合でも。
  2. 次に、MD5は暗号化ハッシュ関数として安全ではなくなりました(実際、Forked Oneが指摘するように、MD5はもはや暗号化ハッシュ関数とさえ見なされていません)。同じ値にハッシュする異なるメッセージを生成できます。そのため、MD5ハッシュを含むSSL証明書を取得している場合、私が望んでいることを示す複製の証明書を生成できます 同じハッシュ を生成しますこれは一般的に、MD5が「壊れている」と言ったときに人々が意味することです-このようなこと。
  3. 3番目に、メッセージと同様に、異なるファイル同じ値にハッシュする を生成することもできるため、ファイルチェックサムとしてMD5を使用しますは壊れてます'。

現在、SHA-512は SHA-2 Family ハッシュアルゴリズムです。最近、SHA-1は「えー」と考えられているので、無視します。ただし、SHA-2に対する攻撃は比較的少ないです。ウィキペディアが話題にしている主要なものの1つは 縮小されたイメージ前の攻撃 です。つまり、SHA-512をひどく間違った方法で使用すると、私はそれを壊すことができます。明らかにそのように使用する可能性は低いですが、攻撃は良くなるだけであり、MD5が破壊されるのと同じ方法でSHA-512を破壊するためのより多くの研究への良い出発点となります。

ただし、利用可能なすべてのハッシュ関数の中で、SHA-2ファミリーは現在、最強であり、共通性、分析、およびセキュリティを考慮した最良の選択です。 (しかしではない必ずしも速度。組み込みシステムを使用している場合は、他の分析全体を実行する必要があります。)

61
Tom Ritter

MD5は、かなり長い間、暗号的に破壊されています。これは基本的に、通常ハッシュアルゴリズムによって保証される一部のプロパティが、もう保持されないことを意味します。たとえば、出力長に潜在的に必要な時間よりもはるかに短い時間でハッシュの衝突を見つけることができます。

SHA-512(ハッシュ関数のSHA-2ファミリーの1つ)は、現時点では十分に安全ですが、おそらく将来的にはそれほど長くはありません。そのため、NISTはSHA-3のコンテストを開始しました。

一般に、ハッシュアルゴリズムは一方向関数にする必要があります。それらはいくつかの入力をいくつかの出力にマップします。通常、出力は固定長であるため、元の入力の「ダイジェスト」を提供します。一般的なプロパティは、たとえば、入力の小さな変化が出力の大きな変化(改ざんの検出に役立つ)をもたらすこと、および関数を簡単に元に戻すことができないことです。後者のプロパティの場合、衝突攻撃の複雑さの理論上の上限を提供するため、出力の長さは非常に役立ちます。ただし、設計または実装の欠陥により、攻撃の複雑さが緩和されることがよくあります。それらがわかったら、ハッシュ関数をまだ使用しているかどうかを評価します。攻撃の複雑さが大幅に下がれば、実用的な攻撃は、特殊なコンピューティング機器を使用しなくてもさまざまな人に簡単に侵入します。

注:ここでは、1種類の攻撃についてのみ説明しました。ニュアンスがはるかに大きいが、把握するのがはるかに難しい場合の現実。ハッシュ関数はファイル/メッセージの整合性を検証するために非常に一般的に使用されているため、衝突の問題はおそらく理解して理解するのが最も簡単なものです。

10
Joey

ここでは触れられていない点がいくつかありますが、これは、ハッシュとは何か、それがどのように機能するか、Rainbowまたは現在知られているその他の方法を使用して攻撃に成功するまでにかかる時間についての理解が不足しているためだと思いますおとこ...

数学的に言えば、MD5は、ハッシュとスロットルの試みをソルト処理しても(1秒でも)「壊れている」わけではありません。セキュリティは、攻撃者が1フィートの頑丈な鋼鉄の壁に木製スプーン:

数千年かかり、それまでに関係者全員が死んでしまいます。心配することがもっと重要なことがあります。

20回目の試行でアカウントをロックすると、問題が解決します。壁に20ヒット=通過した確率は0.0000000001%。あなたが実際にイエスであるという文字通りの統計的可能性があります。

You're thinking about it wrong.

また、どのハッシュ関数も、ハッシュとは何かによって、「他の何かの(小さな)一意のID」であるため、衝突に対して脆弱になることに注意することも重要です。

ビットスペースを増やすと衝突率は下がりますが、IDのサイズと計算にかかる時間も増えます。

小さな思考実験をしましょう...

SHA-2が存在する場合、他の何かに対して4つの一意のIDが存在する可能性があります... 00、01、10、11。衝突が発生します。ここに問題がありますか?ハッシュは、識別しようとしているものの生成されたIDです。

MD5は、実際には、入力に基づいてランダムに数値を選択するのが本当に上手です。 SHAは、実際にはそれほど優れていません。SHAには、IDのための非常に多くのスペースがあります。

使用される方法は、衝突の可能性が低い理由の約0.1%です。本当の理由はより大きなビット空間です。

これが文字通りSHA-256とSHA-512の衝突に対する脆弱性が低い唯一の理由です。一意のIDに大きなスペースを使用するためです。

SHA-256およびSHA-512がハッシュを生成するために使用する実際の方法は、実際には優れていますが、それほど多くはありません。 IDのビット数が少ない場合、同じRainbow攻撃がそれらに作用し、ファイルとパスワードでさえSHA-256とSHA-512を使用して同一のIDを持つことができますが、より多くのビットを使用するため、可能性ははるかに低くなります。

実際の問題は、セキュリティを実装する方法です

自動化された攻撃が毎秒1,000回認証エンドポイントにヒットすることを許可すると、侵入されることになります。 3秒ごとに1回の試行に絞り込み、10回目の試行から24時間アカウントをロックしても、そうではありません。

パスワードをソルトなしで保存すると(ソルトはジェネレーターに追加されたシークレットであり、「31337」や「パスワード」などの不正なパスワードを特定するのが難しくなります)、多数のユーザーがいる場合、ハッキングされることになります。あなたがそれらを塩漬けすれば、たとえあなたがMD5を使用しても、あなたはそうではありません。

MD5は128ビット(HEXでは32バイト、バイナリでは16バイト)を使用し、SHA 512はスペースの4倍にすぎませんが、IDを2 ^ 384個増やすことで衝突率を事実上排除します。 ..毎回、SHA-512を使用してください。

しかし、MD5を使用した場合に実際に何が起こるかについて心配していて、実際の実際の違いを理解していない場合でも、おそらくハッキングされることになりますか?

3
Nick Steele

これを読む

ただし、MD5は衝突耐性がないことが示されています

衝突の詳細についてはこちら

2
Fredou

MD5は衝突の可能性があり( http://www.mscs.dal.ca/~selinger/md5collision/ )、Web上で逆パスワード検索用の多数のMD5 Rainbowテーブルがあり、利用可能ですダウンロード用。

1
Joshua

後方にマップするにはより大きな辞書が必要であり、衝突の可能性は低くなります。

それは単純です、MD5は壊れています;)( Wikipedia を参照)

Bruce Schneierは、「MD5が壊れたハッシュ関数であることをすでに知っている」、「MD5を使用する必要はもうない」という攻撃について書いています。

0
Felix Kling