2012-04-14 6 views
0

私はウェブ開発とデータベースが初めてで、合理的なセキュリティとスピードでパスワード認証を実装しようとしています。私はパスワードをハッシュすることについて読んだことがあり、虹のテーブルを作成しないようにするために、各ユーザーに固有の塩を付け加えています。データベースを検索するのにかかる時間

私の質問は、ユーザーを確認するために検索する必要がある時間を扱っています。私はいつ誰が接続しようとしているのか分からないので、私は塩の列からすべてのフィールドを取得し、次に送信されたパスワード+それぞれの固有の塩をハッシュし、最後に各出力をハッシュに比較する必要があるようですテーブルの文字列?

ハッシュ(パスワード+塩)の組み合わせごとに個別のクエリを送信する必要がありますか?それはひどく遅くなるようです。私はプロセスをスピードアップするトリックがないのですか?それとも、それを吸ってより良いセキュリティのためにスピードを犠牲にするのか?それとも、私は間違っているのでしょうか?今日のコンピュータのスピードは全く問題ではありませんか?

答えて

1

パスワードのみに基づいてユーザーを認証することはできません。パスワードとは、ユーザーが誰であるかを確認することです。したがって、何らかのユーザーID(名前など)が必要です。テーブルはusers(..., name, password, ...)のように見えますが、SELECT password WHERE name = "foo"を実行してそこから検証してください。便利なフォームは、パスワードフィールド内に派生キーを生成するために必要なすべてのパラメータを保持することです。このように:自分自身をハッシュに

algo$salt$password hash 

、あなたはそれが速くなりたくない - PBKDF2、bcryptのかscryptのような鍵導出関数を参照してください。一般に、1つのキーを派生するのに約2秒かかるようにパラメータをチューニングすることは、ブルートフォースを実行不可能にする良い方法です。

+0

私はばかです。私は、一致する文字列の名前列を、そのユーザーのパスワード+比較するためのsaltよりも検索するとは思わなかった。私の防衛では、それは現在午前3時30分です。ありがとう。 – StackAttack

関連する問題