style_prompt 本記事はGeminiの出力をプロンプト工学で整理した業務ドラフト(未検証)です。
令和5年度 情報処理安全確保支援士 午前Ⅱ 問1 パスワードのソルト
本問はパスワードハッシュ化における「ソルト」の役割を問うている。レインボーテーブル攻撃への有効な対策原理を理解することが解法の核となる。
パスワードをハッシュ化して保存するときに,ソルトを用いる目的はどれか。
ア 同じパスワードに対して,利用者ごとに異なるハッシュ値が生成されるようにする。 イ ハッシュ値から元のパスワードを復元できるようにする。 ウ パスワードの長さを擬似的に長くして,総当たり攻撃にかかる時間を短縮する。 エ 利用者がパスワードを忘れたときに,管理者がパスワードを教えられるようにする。
【解説】
ソルト(Salt)とは、パスワードをハッシュ化する際、パスワード文字列の前後に追加する任意のデータのことです。
ハッシュ関数は同一の入力に対して常に同一の出力を返す(決定的である)性質があります。そのため、複数のユーザーが同じパスワード(例: “password123″)を使用している場合、ソルトなしではデータベース上のハッシュ値もすべて同一になります。
$$ H = \text{hash}(\text{password} + \text{salt}) $$
ソルトを使用することで、以下のプロセスが実現されます。
graph TD
UserP["ユーザーのパスワード"] --> Combine["結合"]
Salt["一意のソルト"] --> Combine
Combine --> HashFunc["ハッシュ関数"]
HashFunc --> StoredHash["固有のハッシュ値"]
style StoredHash fill:#f9f,stroke:#333,stroke-width:2px
これにより、攻撃者が事前に計算した「パスワードとハッシュ値の対応表(レインボーテーブル)」を利用した攻撃を無効化、あるいは困難にさせます。
【選択肢の吟味】
| 選択肢 | 判定 | 解説 |
|---|---|---|
| ア | 正解 | 利用者ごとに異なるソルトを付与することで、同一パスワードでもハッシュ値を分散させ、レインボーテーブル攻撃を防ぐ。 |
| イ | 誤り | ハッシュ関数は不可逆性を持ち、ソルトの有無にかかわらず復元は困難である。復元が必要な場合は暗号化を用いるべきである。 |
| ウ | 誤り | 総当たり攻撃の時間を「短縮」させることは攻撃者にとってのメリットであり、セキュリティ対策の目的ではない。 |
| エ | 誤り | ソルトを用いてもハッシュ化の不可逆性は維持されるため、管理者が元のパスワードを知ることはできない。 |
【ポイント】
レインボーテーブル対策: 事前計算済みのハッシュリストの有効性を失わせる。
一意性の確保: 同一パスワードの利用者間でも、生成されるハッシュ値を異なるものにする。
不可逆性の維持: ソルトはパスワードの復元を可能にするためのものではない。

