0

bcrypt が他の方法よりも安全であることは理解していますが、それでもパスワードをソルトする必要があるのと同じ状況になります! ソルトがハッシュ文字列に含まれている場合、DB に個別に保存する必要はありません。新しいハッシュ、つまり新しいソルトを作成する必要があるたびに、すべてのパスワードを取得し、ソルトを抽出し、DB パスワードに対して新しいハッシュがまだ存在しないことを確認する必要がありますか? 簡単に比較できるように、塩を別々に直接保存する方が簡単ではないでしょうか? はいの場合、私は得られません:

  • ソルトをプレーンテキストで保存するポイント
  • bcrypt がソルト化されたパスワードで sha256 を手動で使用するよりも安全である理由
4

2 に答える 2

4

私は実際、いくつかの点で Curtis Mattoon の回答に反対するつもりです。

  1. bcrypt を使用してハッシュすると、ソルトはハッシュ内に直接保存されるため、個別に保存する必要はありません。ソルトなしのハッシュはまったく役に立たないため、まったく保存する必要がないということで、彼が何を意味するのかわかりません。ソルトは、ハッシュに対してパスワードを検証するために必要です。

  2. この点については同意します。1 つのパスワードを更新する場合、すべてを更新する必要はありません。実際、他のユーザーのパスワードを (うまくいけば) 知らないので、それは不可能です。

  3. 特別な塩を得るために苦労する必要はありません。その場合、 を使用できますuniqidが、その出力が予測可能であるという問題があります。予測可能性は、暗号化において悪いことです。代わりに、できる限りランダムに近い疑似ランダム ソルトを使用します (つまり、/dev/randomの代わりに使用します/dev/urandom)。10 億人のユーザーがいる場合、まったく同じソルトを持つ 1 つまたは 2 つのユーザーが発生する可能性がありますが、真剣に、これはそれほど大きな問題でしょうか? 誰かがこれら 2 つの特定のパスワードのパスワードをブルート フォース攻撃する可能性を 10 億から 2 倍にするだけであり、衝突が発生する可能性がそれほど高いとは思えません。これで緊張しないでください。ソルトを一意ではなく、ランダムにします。最終ログイン時間や IP アドレスなどを使用すると、ランダム性が失われるだけです。

  4. SHA512 と Blowfish の比較については、こちらのSHA512 vs. Blowfish と Bcryptを参照してください。

于 2013-02-07T02:26:47.023 に答える
3

このサイトは、簡単な説明でまともな仕事をしているようです: http://michaelwright.me/php-password-storage

素早い回答:

1) 塩を保存する必要はありません。

2) パスワードごとに一意のソルトを使用する場合、すべてのハッシュを更新する必要はありません。

3) 私は暗号の専門家ではありませんが、ユーザー/パスワードごとに一意のソルトを使用している場合、攻撃者はユーザーごとに異なる一連のレインボー テーブルを使用する必要があります。サイト全体で同じソルト値を使用すると、すべてのユーザーのパスワードが同じハッシュ テーブルの影響を受けやすくなります。過去に (良くも悪くも)、ユーザーの最終ログイン時刻や最終 IP の関数をパスワードのソルトとして使用していました。

例 (疑似コード) $password = hash(hash($_POST['password']) . hash($row['last_login']));

4) 「bcrypt の方が優れている理由」は延期します。そのようなことに詳しい人に質問します。この回答が役立つ場合があります: How do you use bcrypt for hashing passwords in PHP?

于 2013-02-03T03:09:08.777 に答える