2012-10-04 24 views
24

可能性の重複:私のパスワードの
Secure hash and salt for PHP passwords塩とパスワード

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

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

または私はちょうど使用した場合、それは大丈夫だろう:

$password = md5($password); 

私は、ユーザーがパスワードなどの不正なパスワードを構成している場合でも、塩を使用しているのであれば、それは問題ではありません(この場合)塩は145ac26ff093c6e1317f7d5fb4c9fd11c77be975になるのでこれがパスワードのエントリは応じ145ac26ff093c6e1317f7d5fb4c9fd11c77be975passwordだろうhttp://howsecureismypassword.net/に亀裂を入れるには3八十億年かかるでしょうか?意見ですか?人は塩ハッシュを得るために十分行っている場合、または私がさらに悪化すると

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

に行く必要があり、何が起こってfuther後、停止することができるだろうか?私は、ユーザーごとにそれを行うべきであると述べたすべての人に、この最後のパスワード


文の<もっと...私は知っている、これは単なる一例です。

+0

編集を忘れてしまった-.- – FabianCook

+4

あなたのパスワードを_salting_ではなく 'PBKDF2'を使うことができます。 – Florent

+0

これを読むhttp://www.codinghorror.com/blog/2012/04/speed-hashing.html – jurgemaister

答えて

13

塩は、システム全体の定数ではなく、各ユーザー固有のものに変更する必要があります。これはあなたのパスワードハッシュに対する虹のテーブル攻撃をはるかに不便にするでしょう。

トロイハントによるこのarticleには塩析の進展に関する良い記事があります。

編集

$saltそれに多くエントロピーを追加し、各パスワードレコードにユニークなもの。これは通常、ユーザアカウントに格納されたランダムなバイトシーケンスです。

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

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

他にも述べたように、ハッシュにはMD5を使用しないでください。これは壊れています。

ハッシングの前にパスワードまたは塩に独自のアルゴリズムを適用すると、not recommendedとなります。代わりに、塩析に加えて、攻撃者の速度をさらに遅くする多くの(通常は> 10k)繰り返しを必要とするPBKDF2などの業界の強みのソリューションを見てください。

OWASP guidelinesを採用する場合は、(ムーアの法則に反して)定期的にハッシュを増やす必要があります。ハッシュの数はユーザーごとに保持する必要があります。つまり、ハッシュされたパスワード、塩、および反復の数を保存する必要があります。

+0

編集をチェックしてください。ありがとう、しかし私はこれを知っています。 :) – FabianCook

+2

私はこれが私には彼のパスワードでなぜ塩を使うべきか明確に分からないので、これは最高の質問に答えると思います。 固定された塩を使用する場合は、攻撃者があなたのデータベーステーブルを見て、同じハッシュ値を持つ3000個のパスワードがあることを確認するので、それが30億年かかるかどうかは問題ではありませんそして、それは 'パスワード'または '12345'なんかであると推測します。動的ハッシュを使用するので、ハッシュ値とスレートされたパスワードは統計的に推測できません。 –

13

塩は完全に間違っています。塩は予測できないはずです。あなたの塩はそれとはまったく反対です(固定)。修正されたハッシュは絶対に役に立たないので、攻撃者が知らない塩にも頼っているようです。これはもう一つの悪い習慣である、あいまいさによるセキュリティの定義です。あなたがやるべきことは何

は次のとおりです。

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

編集を確認してください。ありがとう、しかし私はこれを知っています。:) – FabianCook

+0

@SmartLemon:質問の最初の行を適切に編集または削除してください。マイナーな編集だけでは、正確に何をしているのかわかりません。 – Jon

+0

そう?私はその今大丈夫だと思う。 – FabianCook

9
  1. などSHA256かさえbcryptなど、より安全なものを使用して、あなたの、ハッシュアルゴリズムとしてMD5を使用しないでください。

  2. 誰かがデータベースにアクセスした場合、共通のハッシュやレインボー攻撃などの手法を使用してパスワードを取り消すことはできません。

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

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

+2

誰もがこれが正しいと思いますか?私はそう思う? – FabianCook

+1

Sha256はあまり安全ではありませんtbh、ここではbcryptの作業バージョンもバイト範囲の塩で行われていますhttp://stackoverflow.com/questions/4795385/how-do-you-use-bcrypt-for-hashing- passwords-in-php – Sammaye

0

塩は完全にランダムな、とあなたがのハッシュを格納している実際のパスワードとは無関係であることを意味します。

あなたが本当にやるべきことは

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

を行うと、ユーザーのユーザー名、塩、ハッシュされたパスワードを保存し、その後、完全にランダムな塩を生成しています。

+1

MD5を示唆しないでください、それは安全ではありません。 –

+0

編集を確認します。ありがとう、しかし私はこれを知っています。 :) – FabianCook

+0

@ H2CO3なぜMD5が安全でないのですか? –

2

塩はここでは間違って理解されると思います。塩のアイデアは、ハッシュごとに一意でなければならないということです。その理由は、ハッシュを作成するときに、いくつかの異なる文字列が同じハッシュを持つ可能性があるからです。 145ac26ff093c6e1317f7d5fb4c9fd11c77be975password

P.S.:それは似ていますので、あなたの例では

は、あなたも、パスワードをハッシュ化していますbcryptを使用してください。それははるかに信頼性があります。

3

まず最初にmd5を直接保存することはできません。これはすでに認識しています。 PHP 5.5では、https://github.com/ircmaxell/password_compat(順方向互換)を使用して&安全なパスワードハッシュを生成するまで、1行で簡単にパスワードを作成して確認する新しい方法が用意されています。

関連する問題