令和5年度 情報処理安全確保支援士試験 午前Ⅱ 問1 パスワードのソルト

Tech

本記事はGeminiの出力をプロンプト工学で整理した業務ドラフト(未検証)です。

令和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ビット)であり、ソルトで長さを可変にするわけではありません。
誤り ハッシュ関数は不可逆性を持ちます。ソルトを用いても元のパスワードを逆算(復号)することは不可能です。
誤り ソルトを付加し結合する処理が追加されるため、計算負荷はわずかに増加します。速度向上を目的とするものではありません。

【ポイント】

  • レインボーテーブル対策:ソルトの最大の目的は、ハッシュ値の事前計算を無意味にすること。

  • 一方向性(不可逆性):ソルトを用いても、ハッシュ値から平文に戻すことはできない。

  • ストレッチングとの違い:ハッシュ計算を繰り返す「ストレッチング」は、総当たり攻撃の試行回数を遅らせることが目的。

ライセンス:本記事のテキスト/コードは特記なき限り CC BY 4.0 です。引用の際は出典URL(本ページ)を明記してください。
利用ポリシー もご参照ください。

コメント

タイトルとURLをコピーしました