2

私はユーザーログイン機能を作成していますが、これを行うための最良の方法についてさまざまな見解があります。

これが私がやろうと思っていたことです...

  • ユーザー名のサブストリングに基づく2つのハッシュされたソルトを使用してユーザー名をハッシュします。
  • パスワードとユーザー名とともにテーブルに保持されている2つのランダムに生成されたハッシュソルトを使用してパスワードをハッシュします。

これはやり過ぎですか、間違っていますか、それとも十分に安全ではありませんか?

4

6 に答える 6

4

塩漬けはレインボーテーブルから保護するので、2つの塩を持っていることは1よりも良いことではありません。ハッカーはレインボーテーブルでパスワードを解読するために塩を知る必要があります。データベーステーブルへのアクセス。そして、彼らがそれを持っているならば、とにかく彼らは両方の塩を持っています。

パスワードが長ければ長いほど、力ずくでそれを行うのは難しくなるので、パスワードを長くすると、余分な塩よりも優れたものになります。

ユーザー名をソルトおよびハッシュすると、データベースからユーザー名を読み取るたびに不要なオーバーヘッドが追加されます。パスワードを使用すると、ログオン時にソルトとハッシュを行うだけで済みます。

理想的には、ムーアの法則が続くにつれて暗号化ハッシュ関数を時間の経過とともに適応的に遅くすることができるBCryptのようなものを使用ください。これにより、ブルートフォース攻撃の可能性が低くなります。

于 2012-07-05T15:17:19.050 に答える
2

パスワードの 2 つのソルトと同様に、ユーザー名のハッシュ化はやり過ぎだと思います。塩は1個で十分です。

SHA-512 などの安全なハッシュ アルゴリズムを必ず使用してください。

于 2012-07-05T15:13:13.923 に答える
1

他の人が言ったように、ユーザー名のハッシュはやり過ぎであり、1つのソルトで十分です。数学的に遅いアルゴリズムを使用してください-クラッカーにとっても遅いでしょう。

于 2012-07-05T15:20:36.833 に答える
1

Salting your password once is enough. Having two salts is basically equivalent to generating a longer salt.

Hashing usernames will make it more difficult for you to manage your users than making the login more secure. Consider making a list of your current users, but all you have is the hashed versions? Remember that the point of hashing is to an irreversible 'encryption' of your data.

Consider using crypt() for hashing your password. Especially notice the Blowfish method as this is considered to be the safest hashing method currently.

于 2012-07-05T15:30:12.837 に答える
0

ログインとパスワードのセキュリティを処理する方法について詳しく説明している別のSOの質問に答えました。読む価値があるかもしれません。(いくつかのヒント:ユーザー名をソルトする必要はありません。パスワードは確実にソルトする必要がありますが、必要なのは一度だけです。私はSHA-256を使用します。)

于 2012-07-05T15:20:44.270 に答える
0

ユーザー名フィールドをハッシュする必要はまったくありません。これは、システムを安全に保ちながら Web ページに表示したいものでなければなりません。とは言っても、不必要ではありますが、我慢すれば害はありません。

2 つの塩を追加することは、それらが両方とも同じ場所から取得され、同じ場所に保管されている場合、むしろ無意味です。これを行うのではなく、ユーザー名の順列をソルトとして使用し、ランダムに生成してデータベースに保存する長いランダム文字列を使用します。あなたがまだ偏執的である場合(「ユーザー名をハッシュする」こと全体からだと思います)、アプリケーション全体で使用する3番目のソルトを追加することを検討します。

また、非常に重要です:

強力なハッシュ関数を使用していることを確認してください

安全なハッシュ関数を使用していることを確認してください。whirlpool、sha256 以降、tiger など、使用できるものは何でも ( hash_algos()を確認してください)。また、非常に遅い bcrypt の実装も検討してください ( How do you use bcrypt for hashing passwords in PHP? )。

于 2012-07-05T15:32:31.777 に答える