9

MD5 は SHA などよりも安全性が低いことを示唆する SO に関するいくつかの質問回答を見てきました。

私の質問は、これは私の状況で心配する価値がありますか?

これが私がそれをどのように使用しているかの例です:

  1. クライアント側では、現在の時刻とパスワードを追加し、MD5 を使用してハッシュすることで、メッセージの「安全な」チェックサムを提供しています。だから:MD5(message+time+password)
  2. サーバー側では、送信された時間とクライアントのパスワードに関する知識を使用して、送信されたメッセージに対してこのハッシュをチェックしています。

この例では、MD5 の代わりに SHA を使用した方が本当に良いのでしょうか?

ハッシュ関数の選択が実用的な意味で本当に重要になるのはどのような状況ですか?

編集:

明確にするために-私の例では、SHAアルゴリズムに移行するメリットはありますか?

言い換えれば、この例では、誰かが共有パスワードを知らなくてもメッセージと正しいハッシュを送信できるでしょうか?

その他の編集:

編集を繰り返して申し訳ありません - 私が求めていたことが明確ではありませんでした。

4

11 に答える 11

30

はい、実際には心配する価値があります。MD5 はひどく壊れているため、研究者は、認証局によって署名された実際の証明書と一致する偽の証明書を偽造することができました。これは、彼らが独自の偽の認証局を作成できることを意味し、完全に信頼できるブラウザで銀行や企業になりすますことができました.

現在、これには PlayStation 3 のクラスターを使用して多くの時間と労力を要し、適切な衝突を見つけるのに数週間かかりました。しかし、一度壊れると、ハッシュ アルゴリズムは悪化するだけで、改善されることはありません。セキュリティを気にするのであれば、SHA-2 ファミリーの 1 つなど、壊れていないハッシュ アルゴリズムを選択することをお勧めします(SHA-1 も弱体化されていますが、MD5 ほど壊れていません)。

編集:私が提供したリンクで使用されている手法には、2つの任意のメッセージプレフィックスと共通のサフィックスを選択できることが含まれており、そこから各プレフィックスに対して、そのプレフィックスと共通のサフィックスの間に挿入できるデータのブロックを生成できます。他のプレフィックスから構築されたメッセージと同じ MD5 サムを持つメッセージを生成します。あなたが説明した状況でこの特定の脆弱性が悪用される可能性がある方法は考えられません。一般に、メッセージ認証にセキュアなハッシュを使用することは、デジタル署名に使用するよりも攻撃に対して耐性がありますが、いくつか考えられます注意が必要な脆弱性は、選択したハッシュとはほとんど関係ありません。

  1. 説明したように、アルゴリズムではパスワードをサーバーにプレーン テキストで保存する必要があります。これは、サーバー上のパスワードを発見できる可能性のある情報漏えい攻撃に対して脆弱であることを意味します. 攻撃者がデータベースにアクセスできれば成功だと思うかもしれませんが、ユーザーはおそらく、サーバーが侵害されたとしても、パスワードが公開されないことを好むでしょう。オンラインでパスワードが急増したため、多くのユーザーが複数のサービスで同じまたは類似のパスワードを使用しています。さらに、コード実行攻撃や権限昇格攻撃が不可能な場合でも、情報漏えい攻撃が可能になる可能性があります。

    ランダムなソルトでハッシュされたパスワードをサーバーに保存することで、この攻撃を軽減できます。ペアをサーバーに保存し、ソルトをクライアントに送信して、言及したプロトコルでパスワードの代わりに使用するように<salt,hash(password+salt)>計算できるようにします。hash(password+salt)ただし、これは次の攻撃から保護するものではありません。

  2. 攻撃者がクライアントから送信されたメッセージを盗聴できる場合、クライアントのパスワードに対してオフライン辞書攻撃を行うことができます。ほとんどのユーザーはエントロピーがかなり低いパスワードを使用しており、数十万の既存のパスワードの優れた辞書に加えて、それらをランダムに並べ替えることで、攻撃者がメッセージをスニッフィングして得た情報を考えると、パスワードを簡単に見つけることができます。

  3. あなたが提案する手法は、サーバーを認証しません。これがあなたが話している Web アプリかどうかはわかりませんが、そうである場合、DNS ハイジャック攻撃や、安全でないワイヤレス ネットワークでの DHCP ハイジャックなどを実行できる人物が、クライアントから平文のパスワードを収集する中間者攻撃。

  4. MD5 に対する現在の攻撃は、あなたが説明したプロトコルに対しては機能しない可能性がありますが、MD5 は深刻な危険にさらされており、ハッシュは弱くなるだけで、強くなることはありません。あなたに対して使用される可能性のある新しい攻撃について知り、攻撃者がそれを悪用する機会を得る前に、ハッシュ アルゴリズムをアップグレードする時間があることに賭けたいですか? MD5 がさらに壊れていることに対処しなければならない可能性を減らすために、現在 MD5 よりも強力なものから始める方がおそらく簡単でしょう。

さて、フォーラムなどで他のユーザーからのメッセージを偽造しないようにするためにこれを行っているのであれば、確かに、あなたが説明したプロトコルを破るために誰かが時間と労力を費やす可能性は低いでしょう. 誰かが本当に他の誰かになりすますことを望んでいる場合、O の代わりに 0 を使用した新しいユーザー名を作成するか、Unicode を使用してさらに類似した名前を作成するだけで、メッセージを偽造したりハッシュ アルゴリズムを破ったりすることさえ気にしなくて済みます。

これがセキュリティが本当に重要な何かに使用されている場合は、独自の認証システムを発明しないでください。TLS/SSLを使用してください。暗号化の基本的なルールの 1 つは、独自の. そして、おそらくそれほど問題にならないフォーラムの場合でも、独自のものを作成するよりも、すぐに使用できることが証明されているものを使用する方が簡単ではないでしょうか?

于 2009-04-21T03:22:01.363 に答える
12

この特定のケースでは、アプリケーションが sha ではなく md5 を使用していることが最も弱いリンクではないと思います。md5 が「壊れる」方法は、md5(K) = V の場合、md5(K') = V のように K' を生成できるということです。検索スペースを減らすためのトリック)。ただし、K' は必ずしも K ではありません。これは、md5(M+T+P) = V がわかっている場合、md5(M+T+P') = V となるように P' を生成できることを意味し、これにより有効なエントリが得られます。 . ただし、この場合、メッセージは同じままであり、P は侵害されていません。攻撃者がメッセージ M' を T' タイムスタンプで偽造しようとすると、P' = P でない限り、md5(M'+T'+P') = md5(M'+T'+P) になる可能性はほとんどありません。その場合、彼らはパスワードを総当たり攻撃したでしょう。

ただし、選択肢がある場合は、先に進んで sha を使用する必要があります。使用に重大な欠点がない限り、使用しないことに意味はありません。

2 つ目は、ユーザーのパスワードをプレーンテキストでデータベースに保存しないことです。保存する必要があるのはパスワードのハッシュであり、それを使用します。あなたの例では、ハッシュは md5(message + time + md5(password)) であり、md5(password) をデータベースに安全に保存できます。ただし、(SQL インジェクションのような方法で) データベースを盗む攻撃者は、依然としてメッセージを偽造することができます。これを回避する方法はありません。

于 2009-04-21T04:31:09.993 に答える
8

ブライアンの答えは問題をカバーしていますが、もう少し冗長に説明する必要があると思います

ここで間違った暗号アルゴリズムを使用しています

ここで MD5 は間違っています。ここでは Sha1 を使用するのは間違っています。Sha2xx を使用するのは間違っています。Skein を使用するのは間違っています。

使用する必要があるのはRSA のようなものです。

説明させてください:

あなたの安全なハッシュは事実上、パスワードを世界に向けて発信しています。

サードパーティがペイロードのコピーを取得して時間を知っている場合、ハッシュは「時間+ペイロード+パスワード」であると述べています。パスワードを見つけることができます (総当たり攻撃または辞書攻撃を使用)。そのため、パスワードを平文で送信しているかのようになります。

これの代わりに、公開鍵暗号化を調べて、サーバーに公開鍵をエージェントに送信させ、エージェントに公開鍵でデータを暗号化させる必要があります。

中間者はメッセージの内容を知ることができず、メッセージを偽造することもできません。

余談ですが、MD5 はほとんどの場合十分に強力です。

于 2009-05-04T02:26:06.290 に答える
5

メッセージの内容がどれほど価値があるかによって異なります。SHA ファミリは明らかに MD5 よりも安全ですが (「より安全」とは「偽造しにくい」ことを意味します)、メッセージが Twitter の更新である場合は、おそらく気にしません。

これらのメッセージが、金融取引を処理する分散システムの IPC レイヤーである場合は、もっと気にする必要があります。

更新: また、2 つのダイジェスト アルゴリズムは本質的に多くの点で交換可能であることも付け加えておく必要があります。

更新 2: これはより完全な回答です: http://www.schneier.com/essay-074.html

于 2009-04-21T03:19:24.630 に答える
2

はい、誰かが共有パスワードを知らなくても、メッセージと正しいハッシュを送信できます。同じ値にハッシュされる文字列を見つけるだけです。

それはどのくらい一般的ですか?2007 年、オランダのグループが、MD5 ハッシュ値3D515DEAD7AA16560ABA3E9DF05CBC80を含むファイルで、2008 年の米国大統領選挙の勝者を予測したと発表しました。次に、候補者の名前とそれに続く任意の数のスペースを除いてすべて同一の 12 個のファイルを作成し、その値にハッシュしました。あまりにも多くの異なるファイルが同じ結果をもたらすため、MD5 ハッシュ値はチェックサムとして価値がありません。

私があなたを正しく読んでいれば、これはあなたと同じシナリオです。「候補者の名前」を「秘密のパスワード」に置き換えるだけです。本当に安全にしたい場合は、おそらく別のハッシュ関数を使用する必要があります。

于 2009-04-21T04:29:58.610 に答える
1

はい、この場合、どのハッシュを使用するかを心配する価値があります。最初に攻撃モデルを見てみましょう。攻撃者は、値 md5(M+T+P) を生成しようとするだけでなく、パスワード P を見つけようとする可能性もあります。特に、攻撃者が値 M i、T i、および対応する md5( M i , T i , P) の場合、彼/彼女は P を見つけようとするかもしれません。この問題は、衝突を見つけることほどハッシュ関数については広く研究されていません。この問題に対する私のアプローチは、ブロック暗号に対して使用されるのと同じ種類の攻撃を試みることです。たとえば、差分攻撃です。また、MD5 はすでに差分攻撃の影響を非常に受けやすいため、ここでそのような攻撃が成功する可能性があることは確かに想像できます。

したがって、ここでは MD5 よりも強力なハッシュ関数を使用することをお勧めします。また、md5(M+T+P) の代わりに HMAC を使用することをお勧めします。これは、HMAC が説明した状況に合わせて設計されており、それに応じて分析されているためです。

于 2009-05-08T02:54:15.237 に答える
1

hash-mac を生成する場合は、スキームを発明しないでください。HMACを使用します。HASH(secret-key || message) と HASH(message || secret-key) には問題があります。パスワードをキーとして使用している場合は、キー派生関数も使用する必要があります。pbkdf2を見てください。

于 2009-04-21T09:29:55.893 に答える
0

MD5/SHA1 などについてはコメントしません。問題なので、おそらくこの答えは意味がないと考えるかもしれませんが、MD5などを使用するたびに私を少し楽しませていることがあります。データベースでパスワードをハッシュするためのものが登場します。

誰かがあなたのデータベースをいじり回している場合、彼らはあなたのパスワード ハッシュを見たいと思うかもしれませんが、個人情報や他のテーブルにある可能性のあるその他のデータを盗もうとする可能性も同じです。率直に言って、そのような状況では、揚げる魚が大きくなります。

私はこの問題を無視しろと言っているわけではありません。私が言ったように、パスワードのハッシュに MD5 や SHA1 などを使用する必要があるかどうかにはあまり関係がありませんが、読むたびに少しくすぐられます。データベース内のプレーンテキストのパスワードに少し動揺している誰か。

于 2009-05-08T01:36:27.873 に答える
0

MD5 と SHA-1 の両方に暗号化の弱点があります。MD4 と SHA-0 も侵害されています。

MD6、Whirlpool、および RIPEMD-160 はおそらく安全に使用できます。

次のプリンストン大学のパワーポイントを参照し、最後のページまでスクロールしてください。

http://gcu.googlecode.com/files/11Hashing.pdf

于 2009-05-05T02:37:54.083 に答える
0

この方法で MD5 を使用することは安全ではありません。MD5 は、大量のデータ A が与えられた場合に、追加のデータ B を生成して目的のハッシュを作成できるアルゴリズムがあるという意味でのみ壊れていました。つまり、誰かがパスワードのハッシュを知っている場合、そのハッシュで生成される文字列を生成できます。ただし、これらの生成された文字列は通常非常に長いため、パスワードを 20 または 30 文字に制限してもおそらく安全です。

MD5 よりも SHA1 を使用する主な理由は、MD5 機能が段階的に廃止されているためです。たとえば、Silverlight .Net ライブラリには MD5 暗号化プロバイダーが含まれていません。

于 2009-04-21T03:21:30.130 に答える
0

MD5 は SHA よりも多くの衝突を提供します。つまり、誰かが実際に異なる単語から同じハッシュを取得できることを意味します (ただし、めったにありません)。

SHA ファミリはその信頼性で知られており、SHA1 は日常使用の標準であり、SHA256/SHA512 は政府および銀行のアプライアンスの標準でした。

個人の Web サイトやフォーラムでは、SHA1 を検討することをお勧めします。より本格的な商取引のようなものを作成する場合は、SHA256/SHA512 (SHA2 ファミリー) を使用することをお勧めします。

MD5 & SHAに関するウィキペディアの記事を確認できます

于 2009-04-21T03:34:46.697 に答える