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