23

重複の可能性:
PHPパスワードの安全なハッシュとソルト

警告パスワードにMD5を使用しないでください。bcryptなどの代替手段を使用してください


私のパスワードには、このようなソルトを使用する必要があります(ソルトは各ユーザーに固有であり、パスワードと一緒に直接保存されることはありません)...

$salt = sha1(md5("coders gonna code"));
$password = md5($salt.$password);

または、私が使用しただけで大丈夫でしょうか:

$password = md5($password);

私がsaltを使用した場合、ユーザーがパスワードのような悪いパスワードを作成したとしても、salt(この場合)が問題にならない145ac26ff093c6e1317f7d5fb4c9fd11c77be975ので、そこのパスワードのエントリは、145ac26ff093c6e1317f7d5fb4c9fd11c77be975passwordそれによるとhttp://howsecureismypassword.net/3octodecillion年かかるでしょうクラック....そう意見?または私はさらに悪化して行く必要があります

$password = md5($salt.$password.md5($salt));

その人がソルトハッシュを取得するのに十分な距離を移動した場合、何かが停止してさらに進むことができるでしょうか?<この最後のパスワードに関するステートメントの詳細


ユーザーごとにやるべきだと言ったすべての人に...私は知っています、これは単なる例です。

4

6 に答える 6

13

あなたは完全に間違って塩を使用しています。塩は予測できないはずです。あなたの塩はそれとは正反対です(固定)。固定ハッシュはまったくメリットがないため、攻撃者に知られていないソルトを頼りにしているようです。これは、隠すことによるセキュリティの定義です。これは、もう1つの悪い習慣です。

あなたがすべきことは次のとおりです。

  1. 塩として妥当な長さの予測できない文字列を使用してください。小文字/大文字や数字など、プールからランダムに生成された8文字の文字列で問題ありません。
  2. ユーザーごとに異なるソルトを使用し、パスワードを変更するたびに変更します。
  3. MD5(壊れていると見なされます)から、このアプリケーションにより適した別のハッシュ関数に移動します。SHA-1は壊れているとは見なされないため、優れています。bcrypt構成可能な負荷率があるため、最適です。
于 2012-10-04T10:10:00.933 に答える
13

システム全体の定数ではなく、各ユーザーに固有になるようにソルトを変更する必要があります。これにより、パスワードハッシュに対するレインボーテーブル攻撃がはるかに不便になります。

Troy Huntによるこの記事には、塩漬けの進化についての良い記事があります。

編集

$salt各パスワードレコードに固有の何か。これにより、多くのエントロピーが追加されます。これは通常、ユーザーアカウントとともに保存されるランダムなバイトシーケンスです。

saltハッシュは伝統的に+の連結で行われpasswordます。

$passwordHash = hash($salt.$password);

他の人が言っているように、ハッシュにMD5を使用しないでください。壊れています。

ハッシュの前にパスワードまたはソルトに追加の独自のアルゴリズムを適用することはお勧めしません。代わりに、PBKDF2などの業界で強力なソリューションを検討してください。これは、ソルティングに加えて、攻撃者の速度をさらに低下させる多くの(通常は> 10k)反復を必要とします。

OWASPガイドラインを採用する場合は、実行するハッシュの数を定期的に増やす必要があります(ムーアの法則に対抗するため)。ハッシュの数もユーザーごとに保持する必要があります。つまり、ハッシュされたパスワード、ソルト、および反復回数のトリプルを保存する必要があります。

于 2012-10-04T10:11:37.750 に答える
9
  1. MD5ハッシュアルゴリズムとして使用しないでください。SHA256またはなど、より安全なものを使用してくださいbcrypt

  2. 間違いなくパスワードをソルトします。誰かがデータベースにエントリを取得した場合、一般的なハッシュやレインボー攻撃などの手法を使用してパスワードを元に戻すことはできません。

http://michaelwright.me/php-password-storage

http://en.wikipedia.org/wiki/Bcrypt

于 2012-10-04T10:12:07.610 に答える
4

まず第一に、すでに認識しているmd5を直接保存しないでください。PHP 5.5は、パスワードを1行で簡単に作成および検証するための新しいメソッドを提供します。それまでは、https://github.com/ircmaxell/password_compat(上位互換)を使用して、安全なパスワードハッシュを生成および検証できます。

于 2012-10-04T10:14:18.470 に答える
3

ここでは塩が間違って理解されていると思います。ソルトの考え方は、ハッシュごとに一意である必要があるということです。その理由は、ハッシュを作成するときに、いくつかの異なる文字列が同じハッシュを持つ可能性があるためです。

あなたの例では、パスワードもハッシュしているので、次のようにはなりません。145ac26ff093c6e1317f7d5fb4c9fd11c77be975password

PSbcryptを使用します。それははるかに信頼性があります。

于 2012-10-04T10:12:28.093 に答える
1

ソルトは完全にランダムであり、ハッシュを保存している実際のパスワードとは無関係です。

あなたが本当にすべきことは、完全にランダムなソルトを生成してから、

$password = md5($salt.$password);

ユーザーのユーザー名、ソルト、ハッシュ化されたパスワードを保存します。

于 2012-10-04T10:12:11.663 に答える