令和5年度 情報処理安全確保支援士試験 午前Ⅱ 問1 パスワードのソルト
パスワードの安全な保存手法であるソルトの役割を問う問題です。ハッシュ値から平文を逆引きするレインボーテーブル攻撃の無効化が核心です。
【問題】 パスワードをハッシュ値として保存するとき,ソルトを用いる目的はどれか。
ア 同じパスワードに対して利用者ごとに異なるハッシュ値を生成し,レインボーテーブルによる解読を困難にする。 イ 固定長であるハッシュ値の長さを,入力されたパスワードと同じ長さに調整できるようにする。 ウ ハッシュ値から元のパスワードを逆算できるようにし,パスワードの再発行を不要にする。 エ ハッシュ値の生成速度を上げ,認証処理のオーバーヘッドを削減する。
【解説】 ソルト(Salt)とは、パスワードをハッシュ化する際、パスワード文字列に付加するランダムなデータのことです。
通常、同一のパスワードを同じハッシュ関数(SHA-256等)で処理すると、常に同一のハッシュ値が生成されます。攻撃者はこれを利用し、あらかじめ「平文とハッシュ値の対応表」を大量に作成しておき、盗み出したハッシュ値を高速に照合することで元のパスワードを特定します。この対応表がレインボーテーブルです。
ソルトを付加することで、たとえ同じパスワード「123456」であっても、ユーザーごとに生成されるハッシュ値を異なるものにできます。
$$HashValue = HashFunction(Password + Salt)$$
graph LR
PW["パスワード"] --> Combine["結合"]
Salt["ソルト"] --> Combine
Combine --> HashFunc["ハッシュ関数"]
HashFunc --> Result["ハッシュ値"]
style Salt fill:#f9f,stroke:#333
【選択肢の吟味】
| 選択肢 | 判定 | 解説 |
|---|---|---|
| ア | 正解 | ソルトの主目的は、同一パスワードによるハッシュ値の重複を防ぎ、事前計算攻撃(レインボーテーブル)を無効化することです。 |
| イ | 誤り | ハッシュ値は関数の仕様により固定長(例:SHA-256なら256ビット)であり、ソルトで長さを可変にするわけではありません。 |
| ウ | 誤り | ハッシュ関数は不可逆性を持ちます。ソルトを用いても元のパスワードを逆算(復号)することは不可能です。 |
| エ | 誤り | ソルトを付加し結合する処理が追加されるため、計算負荷はわずかに増加します。速度向上を目的とするものではありません。 |
【ポイント】
レインボーテーブル対策:ソルトの最大の目的は、ハッシュ値の事前計算を無意味にすること。
一方向性(不可逆性):ソルトを用いても、ハッシュ値から平文に戻すことはできない。
ストレッチングとの違い:ハッシュ計算を繰り返す「ストレッチング」は、総当たり攻撃の試行回数を遅らせることが目的。


コメント