- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ユーザーパスワードのDBの格納について)
ユーザーパスワードのDBの格納について
このQ&Aのポイント
- ユーザーパスワードのDBの格納方法について検討しています。
- 現在、ユーザーパスワードが平文のままDBに格納されているため、セキュリティリスクがあると考えています。
- ハッシュ+ソルト+ストレッチングを用いることで、パスワードを安全に格納し、認証時にも使用することが可能です。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
DBに平文でパスワードを保存する というのは、御法度ですね。 なんらかの理由でDBのデータが漏洩してしまったら、 自社のサービスへの不正アクセスが可能になるだけでなく、 同じパスワードを使いまわしているユーザーにとっては よその不正アクセスも可能になります。 よく、Webのログイン画面に 「パスワードを忘れたらこちら」みたいなボタンがありますが、 それで、パスワード再設定のURLがメールで送られてくるのではなく、 実際の生パスワードが送られてきたら、そのWebサービスは 信用してはいけません。 (パスワードを平文で保存しているとういことですから) > (暗号化したパスワードでDBに保存しておいて、ログイン時に入力した) > パスワードと比較して認証を行うようにプログラミングは可能でしょうか。 はい。もちろん。 これは、SQLサーバーの機能は関係なく、 どちらかというと 認証用のプログラムのロジックに係ることです。 PHPの例ですが、 http://php.net/manual/ja/faq.passwords.php が参考になると思います。 つまり、パスワードを保存するときは、 暗号化(ハッシュ+ソルト+ストレッチング)しておいて、 ログイン時の確認は、 ログイン画面に入力された生パスワードと、そのユーザーID用のソルト(大抵は保存された暗号化パスワードそのものでも大丈夫)を 暗号化関数にいれて戻ってきた値が、保存されていた暗号化パスワードと文字列が一致するかで パスワードチェックをすればよいことになります。
お礼
ありがとうございます。 SQLにはMySQL,PosgresSQL,Oracle,Sybaseなどがあり、メーカーが異なるだけでどのDBMSでも暗号化されたパスワードでも保存できると思っていましたが、SQL Serverは何か特別な理由があって暗号化されたパスワードが保存できないのかなと思っていました。 そうは思いましたが、暗号化されていようが平文だろうがDBMSはデータを格納するだけで、認証の仕組みはプログラム設計の問題になるのではという考えもあったため、質問をさせて頂きました。