2

現在 MD5 のみを使用しているパスワード設定を更新したいと考えています。

今私がやりたいことは、ユーザーごとに一意のソルトでより強力なもの (おそらく sha256) を使用することです。

塩の保管について質問です。

データベース内の独自の列にソルトを保存しますか?

次に、salt + password をハッシュし、ログインに関しては、salt とパスワードをデータベースから呼び出して作成します。

または、ユーザー名、電子メール、およびタイムスタンプを使用して、ユーザーごとに一意のソルトを作成する方法を使用しますか?

誰かがソルトを列としてデータベースを手に入れたら、各ユーザーのソルトを知っているので、パスワードを解読できるのではないかと思っています。

4

3 に答える 3

5

ソルトはシークレットではなく、ハッシュと一緒にプレーンテキストで保存できます。データベースに 2 番目のフィールドを用意する必要さえありません。PHP のcrypt()関数を見ると、ソルトがハッシュ値自体に含まれていることがわかります。

レインボーテーブルは特定のソルト用に構築する必要があるため、既存のレインボーテーブルを役に立たなくするのはソルトの仕事です。ハッシュごとに異なるソルトを使用すると、レインボーテーブル攻撃を防ぐことができます。これは、ハッシュごとにレインボーテーブルを作成する必要があるためです。そのため、塩を秘密にしておく必要はありません。

とにかくパスワードハッシュシステムを改善したい場合は、遅いハッシュ関数を使用して正しく行うことをお勧めします。bcrypt を使用したパスワード ハッシュの記事では、パスワードのハッシュを生成する際の重要なポイントについて説明しています。

  • ユーザーごとではなく、パスワードごとにソルトを生成します。
  • 他のパラメーターから派生したものではなく、ランダムな (一意の) ソルトを使用します。
  • スロー ハッシュ関数を使用します。

最後になりましたが、正しく行うことを恐れないでください。アプリケーションのコードは、MD5 を使用した現在の実装と同じくらい簡単になります。

于 2012-05-25T11:23:03.370 に答える
2

MD5またはSHAを忘れてください。Bcryptを使用します。(Blow Fish Crypt)PHP5.3以降にネイティブで付属しています。(暗号化方法2a)より安全で、処理が遅くなります。

Bcryptを使用する場合、ソルトはハッシュと一緒に同じフィールドに保存されます。別のものにする理由はありません。

http://php.net/manual/en/function.crypt.php

于 2012-05-25T12:27:26.117 に答える
0

別の投稿を読んでいるだけで、塩は秘密ではなく、データベースの列に保存できると誰かが言っています。それで私の質問に答えます

于 2012-05-25T10:23:43.293 に答える