情報セキュリティの基礎
Webサービスで利用者のパスワードを保存するとき、パスワードに利用者ごとに異なるランダムな値(ソルト)を加えてからハッシュ値を計算して保存する。ソルトを使う主な目的はどれか。
- Aハッシュ値からソルトを使って元のパスワードを復元できるようにし、パスワードを忘れた利用者に知らせられるようにする
- B同じパスワードを使う利用者がいても保存されるハッシュ値が異なるようにし、あらかじめ計算したハッシュ値の表を使った解読を難しくする
- Cハッシュ値を短くして、データベースの容量を節約する
答えと解説を見る
正解:B. 同じパスワードを使う利用者がいても保存されるハッシュ値が異なるようにし、あらかじめ計算したハッシュ値の表を使った解読を難しくする
パスワードは、そのまま保存せず、ハッシュ関数で計算したハッシュ値を保存するのが基本です。ログインのときは、入力されたパスワードのハッシュ値を計算して、保存された値と比べます。しかし、ハッシュ値だけを保存すると、同じパスワードの利用者は同じハッシュ値になり、よく使われるパスワードのハッシュ値をあらかじめ計算した表(レインボーテーブルなど)と照らし合わせるだけで、多くのパスワードが分かってしまいます。ソルトは、利用者ごとにランダムに作ってパスワードに加える値で、ハッシュ値と一緒に保存します。ソルトは秘密にする必要はありませんが、利用者ごとに値が違うので、同じパスワードでもハッシュ値が異なり、事前に計算した表が使えなくなります。攻撃者は利用者ごとに計算し直す必要があり、手間が大きく増えます。
- A. ハッシュ関数は元に戻せないので、ソルトがあってもパスワードは復元できません。パスワードを忘れた利用者には、再設定の手続きをとってもらいます。
- B. 正しい。利用者ごとにハッシュ値が変わり、事前に計算した表での解読が難しくなります。
- C. ソルトを加えても、ハッシュ値の長さは変わりません。ソルトの分だけ保存するデータはむしろ増えます。