【情報セキュリティ・暗号技術】パスワード保護の必須テクニック!「ハッシュ化のためのソルト(Salt)」|情報処理問題1000本ノック
基本情報技術者試験、応用情報技術者試験、情報処理安全確保支援士(登録セキスペ)の「情報セキュリティ・認証技術・パスワード管理」分野で超頻出の重要テーマ。ハッシュ化だけでは防げない脆弱性を解消し、パスワードの安全性を高める「ソルト(Salt)」の仕組みと効果を整理して攻略しましょう。
■ パスワード保護における「ソルト(Salt)」とは
パスワードをデータベースに保存する際、そのままではなく「ハッシュ値(不可逆な文字列)」に変換して保管するのが現代の常識です。しかし、同じパスワードからは常に同じハッシュ値が生成されるため、攻撃者は事前に計算した結果(レインボーテーブルや辞書)と突合して簡単にパスワードを特定できてしまいます。この脆弱性を防ぐために用いられるのがソルト(Salt)です。
| 項目 | 解説・仕組み | 具体的な効果・目的 |
|---|---|---|
| ソルト(Salt)の定義 | ハッシュ化する前の平文(パスワード)の前後(または特定の位置)に付け加える、ユーザーごとにランダムに生成された短い文字列のこと。 | 同じパスワード(例: "password123")であっても、ユーザーごとに異なるソルトが付くため、生成されるハッシュ値が完全に別物になる。 |
| 対策する主な脅威 | ・レインボーテーブル攻撃(事前計算済みハッシュリストによる解読) ・辞書攻撃 / 総当たり攻撃の効率化(プレコンピュートされた表の無効化) |
攻撃者が事前にハッシュ値を計算して備えることを不可能にし、アカウントごとの個別解析を強要して総当たりに膨大な時間をかけさせる。 |
試験対策の重要キーワード・発展系
- ストレッチング(Stretching):ハッシュ関数による計算(ハッシュ化)を何千・何万回と意図的に繰り返すことで、総当たり攻撃にかかる時間を飛躍的に引き延ばす手法。ソルトと組み合わせて実装されることが一般的です。
- ソルトの保存方法:ソルト自体は秘密にする必要はありません(暗号鍵とは異なるため)。パスワードのハッシュ値と共にデータベースにそのままプレーンテキストとして保存して問題ありません(ハッシュ値がユーザーごとに異なるため、ソルトが公開されていても辞書攻撃を防げます)。
※例えるなら、料理にひと振りする「塩(Salt)」のように、同じ食材(パスワード)であっても一律の味付けにせず、人ごとに独自のランダムな隠し味(ソルト)を混ぜてから料理を完成させるイメージです。これによって、見た目(ハッシュ値)が全く異なる仕上がりになり、泥棒が既製品のレシピ表(レインボーテーブル)を使って一網打尽にすることを防げます。
PR