1. ホーム
  2. database

[解決済み] パスワードをデータベースに保存する最適な方法【終了しました

2022-03-20 10:39:03

質問

私は、認証(ユーザー名とパスワード)が必要なプロジェクトに取り組んでいます。

また、データベースに接続するので、ユーザー名とパスワードはそこに保存しようと考えました。しかし、パスワードをデータベース上のテーブルのテキストフィールドとして持つことは、それほど良いアイデアではないように思われます。

C#を使用し、2008 express serverに接続しています。このようなデータを保存するのに最適な方法を(できるだけ多くの例を挙げて)どなたかご提案いただけないでしょうか?

P.S この情報をデータベースに保存しないという考えも、正当な理由があれば受け入れることができます。

解決方法は?

パスワードをプレーンテキストのフィールドに保存することは、正しいです。 恐ろしい のアイデアです。しかし 立地条件としては を保存することは、ほとんどの場合、遭遇する可能性があります(正直なところ、反例が思いつきません)。 表現 をデータベースに保存することが適切です。表現というのは、ソルト(これはユーザーごとに異なるはずです)と安全な1ウェイアルゴリズムを使ってパスワードをハッシュ化し その 元のパスワードは捨てます。そして、パスワードを検証したいときは、その値を(同じハッシュアルゴリズムとソルトを使って)ハッシュ化し、データベース内のハッシュ化された値と比較します。

ということで、考えていることはいいことだし、いい質問なのですが、実はこの質問は(少なくとも)重複しているのです。

ソルティングについてもう少し詳しく説明すると、パスワードを単純にハッシュ化して保存することの危険性は、もし不法侵入者があなたのデータベースを手に入れた場合、彼らはまだいわゆる レインボーテーブル パスワード(少なくともレインボーテーブルに表示されるもの)を解読することができるようにするためです。これを回避するために、開発者は ソルト をパスワードに追加することで、レインボーアタックは単純に実行不可能になります。 よくある誤解として、すべてのパスワードに同じユニークで長い文字列を追加するというものがありますが、これは決してそうではありません。 恐ろしい すべてのパスワードに一意の塩を追加するのがベストです。 詳しくはこちらをお読みください。