2011-12-22 16 views
3

私は、自分のウェブサイトでユーザーのパスワードをハッシュし、データベースに挿入するより安全な方法を探していました。私は利用可能なすべてのハッシュ方法を調べました。その遅さのためにbcryptが最高だと言われています。もし私が最高のセキュリティを必要としないが、それでも安全を保っていれば、私はそれを考えていました。 sha512を使用してからmd5をそのハッシュに使用するとどうなりますか?私がハッシュの順序を逆転させるかどうかは重要だろうか?それぞれの操作に別々の塩を使用することを覚えておいてください。これはどれくらい安全でしょうか?同じことをする他の組み合わせはありますか?SHA512とMD5ハッシング

答えて

5

カスタムメソッドを作成すると、微妙なバグが発生してストレージメソッドが脆弱になる可能性が高くなります。遅くなるまで、微妙なバグを見つけられないので、努力する価値はありません。試してテストしたものを使う方がはるかに優れています。パスワードを保存するとき

は一般的に、これらは

  • 、使用bcrypt選択肢です。
  • 塩漬けの強化されたハッシュを使用します。

最初の方法は簡単ですが、bcryptを使用してください。ほぼすべての言語でサポートされており、セキュリティのために広く使用され、テストされています。

2番目の方法では、汎用目的のハッシュ関数(SHA-2ファミリ以上、としてMD5またはSHA-1ではなく)を使用する必要があります。HMACは、独自の塩を作成し、ハッシュ関数を何度も繰り返して(100,000など)、速度を遅くします(key stretching/strengthening)。

(擬似コード)

sofar = hash("sha512", user_salt + site_salt + input_password); 
iterations = 100000; // Should be changed based on hardware speed 
while (iterations > 0) 
{ 
    sofar = hash("sha512", user_salt + site_salt + sofar); 
    iterations--; 
} 
user.save("password", "$sha512$" + user_salt + "$" + iterations + "$" + sofar); 

各反復は前回の反復に依存しているため、誰かがそれを破るために強引な方法を並列化できません。同様に、処理の速度が遅くなるように、ハードウェアの速度に基づいて反復回数を変更する必要があります。パスワードのハッシュに関しては、遅い方が良いです。

要約
bcryptを使用してください。

+0

いいえ私はbcryptを使用します。助けてくれてありがとう! – Sneitzke38

2

私はMD5を全く採用していないのです。壊れている。しかし、複数ラウンドが明らかに強いです。しかし、2ラウンドからの改善はそれほど大きな違いはありません。 SHA512のロットとロットの適用は良いでしょう。あなたが代わりにユーザーのパスワードの長さを見て、あなたはまだ行っていない場合は、パスワードを塩漬けしなければならない

Is "double hashing" a password less secure than just hashing it once?は、アルゴリズムの複数回の詳細な解説を提供します。

現実には、SHA-512のパスワードが壊れていて、最初にパスワードが表示されないようにもっと重要なことがあると思われます。システムはSQLインジェクションから安全です。特権エスカレーションなど

+0

あなたはそれに私を打ち負かす。その投稿は良いものです。 – Dessus

+0

それは良い考えのように聞こえる。ありがとう! – Sneitzke38

関連する問題