1

楽しいプロジェクトとして、認証用の SASL メカニズム、特に PLAIN と DIGEST-MD5 をサポートしたいと考えています。

私の質問は、これら 2 つの認証方法をサポートする必要がある場合、ユーザーのパスワードを安全に保存するにはどうすればよいですか?

PLAIN認証のみを使用すると、非常に簡単になります。パスワードをbcryptに保存し、bcrypt_compare関数を使用して、ユーザーが送信したパスワードと保存されたpwを比較するだけです。

しかし、DIGEST-MD5 も可能である必要がある場合、パスワードを安全に保存するにはどうすればよいでしょうか? 計算された応答全体を保存し、それを PLAIN 比較にも使用する必要がありますか? それとも何か他の方法がありますか?

//編集:「楽しい」プロジェクトについて。現時点では楽しいプロジェクトですが、ある時点で楽しくないプロジェクトになるかどうかは誰にもわかりません. 楽しいプロジェクトだからといって、セキュリティを下げたくありません..

4

2 に答える 2

1

DIGEST-MD5 仕様は、サーバーがその認証方法のために何を保存する必要があるかを示しています。

3.9 パスワードの保存

ダイジェスト認証では、認証エージェント (通常はサーバー) が、ユーザーの名前とパスワードから派生したデータを、特定のレルムに関連付けられた「パスワード ファイル」に保存する必要があります。通常、これには username と で構成されるペアが含まれる場合があります。これは 、ユーザーのパスワードを直接公開することなく、上記のようH({ username-value, ":", realm-value, ":", passwd })に計算するのに十分です。H(A1)

...したがって、DIGEST-MD5 用に保存する必要があるのはH({ username-value, ":", realm-value, ":", passwd }).

認証に使用する bcrypt ハッシュを個別に保存することもPLAIN、DIGEST-MD5 値のみを使用することもできます。個別の値を保存した場合、ユーザーが DIGEST-MD5 認証を選択的にオフにできるようにすることができます。これにより、それらのユーザーのデータベースからその (簡単に力ずくで) 情報を削除できます。

于 2011-11-30T05:03:12.473 に答える
0

パスワードをわかりやすく保存しないでください。ハッシュと比較を両方にハッシュとともに保存します。プレーンパスワードで簡単にハッシュを取得できます。

良いハッシュを作成する方法は次のとおりです。

function hash_password($password, $nonce) {
  global $site_key;
  return hash_hmac('sha512', $password . $nonce, $site_key);
}

PHPパスワードの安全なハッシュとソルトを参照してください

于 2011-11-23T08:01:49.190 に答える