3

パスワードハッシュに関するこの優れた回答を読んで、それを実装する方法を知りたい:

邪悪なノミは次のように書いています。

ユーザーごとに nonce を生成します。これだけで虹のテーブルは打ち負かされます。これは、範囲に応じて生成されるハッシュの数を拡張する乱数です。

ユーザーのパスワードのほかに、データベースに一意のトークンを保存しますか?

元の投稿のコード例:

function hash_password($password, $nonce) {
  global $site_key;
  return hash_hmac('sha512', $password . $nonce, $site_key);
}

このコードでパスワードを確認するにはどうすればよいですか? 説明させてください:

ユーザーがパスワードを送信すると、メールアドレスとハッシュ化されたパスワードが一致する既存のデータベース行を確認するために、そのハッシュを生成する必要があります。ユーザーについて何も知らないときに、この行を選択するにはどうすればよい$nonceですか? 何か不足していますか?メールアドレスだけでユーザーを選択し、後でパスワードハッシュを確認する必要があるのでしょうか?

ところで、このハッシュ方法をお勧めしますか?

4

1 に答える 1

3

私はあなたがその考えを釘付けにしたと思います。一般的な UNIX スタイルのソルトされたパスワードにも同じ概念が適用されます。ソルトをクリア テキストでパスワードとともに保存し、ユーザー名で取得してから、ソルトと提供されたパスワードを使用して新しいハッシュを生成し、保存された値と比較します。

DB サーバー (およびその接続) を信頼して、DB でサポートされているハッシュ アルゴリズムを使用し、DB に計算を実行させるかどうかを検討するのは、あなた次第です。

SELECT * FROM users WHERE email = 'email' AND password = SHA1(CONCAT('cleartextpass',nonce));

または、一致するすべての電子メールを取得した後、コードで計算を行うこともできます。

編集:行方不明のユーザー無効なパスワードの区別に関する ThiefMaster のコメントは、攻撃者が有効なユーザー名のリストを取得し、暗がりで釣りをする代わりにパスワードを破ることに集中できるようにする、古典的なセキュリティ上の欠陥です。私はそれに対して強くお勧めします。

于 2011-04-07T10:37:46.733 に答える