どうしてもDBに生パスワードを保存するにはどうしたらよいか(2)
結局よく考えた結果以下のようにすることにした
- 設定ファイルにシステム固有のパスワードを設定できるようにする。つまりこれを変更すればシステムの事なるインスタンス間で鍵が同一にならない (これは初回起動時に乱数で生成でもいいかもなー)
- 上記を暗号鍵として使い、さらにレコードごとにsaltを保持し使うようにする。これによりレインボーテーブルアタックへの対策とする
こうしておくことのメリットは
- WEBサーバーとDBサーバーの間の通信を傍受されてもパスワードはわからない
- DBにSQLインジェクションとかで不正なSQLを発行されたとしても実質解読できない、しにくい
- システム固有のパスワードがDBへのSQLだけではわからない
- また、レコードごとにsaltがあることによりすべてを解読するには膨大な時間がかかる
問題点は
- DBサーバーとWEBサーバーが乗っ取られた時は"システム固有のパスワード"と"salt"が判明するのですぐに解読される