DBに入力された生のままのパスワードを保存しない
- DBのデータが何らかの方法で盗またり、流出してしまうことがある。
- 標的型攻撃
- 内部犯
- 他のサービスでも同じパスワードを使用していた場合に流用できてしまう。
パスワードを保存する際は暗号化、またはハッシュ化する
暗号化
- 暗号化した内容をもとに戻すことができる(複合できる)
- 複合化の方法が漏れてしまった場合に内容がわかってしまう
ハッシュ化
- 一度ハッシュ化したものはもとに戻すことができない(不可逆)
- 同じ方法でハッシュ化した場合に同じ値になるため、それでパスワードがあっているか確認する。
- 同じハッシュ関数から辞書を作られていた場合、パスワードがバレてしまうこともある
現在はハッシュ化+別の方法の組み合わせでセキュリティを高めるのが主流
ソルト
- パスワードをハッシュ化する前に、ランダムな文字列を付与する(20桁程度の長さ)
- 固定値ではなく、ユーザーごとに異なる値を付与するのが望ましいとされる
ペッパー
- パスワードをハッシュ化する前に、ランダムではない文字列を付与する
- ペッパーの値はDB以外に保存する
ストレッチング
- 何度もハッシュ化する(数千から数万回)
- 解読に多くの時間がかかる