2

SMTPサーバーを作成していて、CRAM-MD5認証を実装しました。チャレンジレスポンス文字列を計算するには、サーバーにプレーンテキストのパスワードを保存する必要があるようです。

この背後にある理由は何ですか?この認証メカニズムには、次の条件を満たせば、非常に欠陥があるようです。

  • CRAM-MD5では、サーバーにプレーンテキストのパスワードを保存する必要があります
  • CRAM-MD5は壊れているMD5を使用しています

私には、TLSが常に必要であるという条件で、CRAM-MD5はPLAIN/LOGIN認証よりも安全性が低いように見えます。

4

3 に答える 3

3

はい、パスワードを保存することは、可逆的に暗号化されていても、パスワードが再利用されるため、ある種のソルトハッシュよりも劣ります。おそらく、プレーンテキストのパスワードから何かを生成し(PBKDF2または通常のソルトハッシュなど)、それを両側で使用する方がいくらか安全です。ただし、クライアントは、このアカウントに使用されるソルトを含め、サーバーのハッシュスキームについて知っている必要があります。どのようにスライスしても、CRAM-MD5と互換性のないものが残り、必ずしもはるかに優れているとは限りません。

この問題やその他の問題のために、CRAM-MD5を完全に忘れることをお勧めします。特に、壊れていると考えられるMD5を使用しており、さまざまな既知の弱点があります。最大の利点は、接続が暗号化されていないため、誰でも実際のコンテンツを盗聴できることです。

より良い答えは、TLSを使用することです。

于 2012-11-07T20:50:49.880 に答える
2

サーバーにクリアテキストのパスワードを保存する必要はありません。数式のMD5コンテキストを保存するだけで済みます。これは、このために特別に設計されたものです。

HMAC(K, M) -> H(K1, H(K2, M))

K1とK2は常にハッシュの最初の入力であり、キー/パスワードのサイズに関係なく、常に64バイトの長さであることに注意してください。また、このアルゴリズムは他のハッシュ(SHA1、SHA256、...)と互換性があることに注意してください。

RFC6151から(2011年3月)

MD5は、デジタル署名などの衝突耐性が必要な場合は使用できなくなりました。HMAC-MD5などの他の方法でMD5の使用を停止することは緊急ではありません

RFC2195から(1997年9月)

中間結果の事前計算に[KEYED-MD5]で説明されている手法を使用すると、「コンテキスト」と呼ばれる中間結果を保存する代わりに、サーバーシステムでの共有シークレットの明示的なクリアテキスト保存を回避できます。

于 2013-03-12T19:57:54.067 に答える
0

もちろん、CRAM-MD5のキーとして元に戻せないパスワードを保持したい場合は、CRAM-MD5を修正してPBKDF2などのPBKDF関数の出力を使用することもできます。ただし、両側に塩が必要になります。

ただし、攻撃者はPBKDF2の出力をCRAM-MD5の入力として直接使用する可能性があるため、これはあまり役に立ちません。したがって、唯一の利点は、ユーザーのパスワードが直接公開されないことです(パスワードは頻繁に再利用されます)。侵害されたデータベースの影響を軽減するため、プレーンログインでもサーバーでPBKDF2を使用することを強くお勧めします。

もちろん、CRAM-MD5のバージョンをKDFと一緒に使用すると、独自のプロトコルになるため、相互運用性影響があります。

ただし、パスワードを取得することはTLSを破ることを意味するため、ほとんどのユースケースではPLAIN/LOGINで問題ありません。

私はCRAM-MD5の専門家ではないことに注意してください。ウィキペディアで、プロトコルをすばやく読んでいます。

于 2012-11-06T21:48:44.090 に答える