メインコンテンツへ
セキュリティ

パスワードをハッシュ値として保存するシステムにおいて、レインボーテーブル攻撃を無効化する効果が最も高い対策はどれか。

ア.ハッシュ化の繰り返し回数を増やすストレッチングを行う
イ.パスワードごとにランダムなソルトを付加してからハッシュ化する正解
ウ.ハッシュアルゴリズムをMD5からSHA-256に変更する
エ.パスワードの最小文字数を8文字以上に設定するポリシーを導入する

解説

レインボーテーブルは「よく使うパスワード→そのハッシュ値」が載った電話帳のようなものです。ソルトはその電話帳を根本から無意味にする「砂かけ」の一手です。

なぜ イ が正解か

ソルトとは、各ユーザーに対して生成するランダムな値です。パスワードにソルトを付加してからハッシュ化すると、同じ「password123」というパスワードでもユーザーごとに全く異なるハッシュ値が生成されます。レインボーテーブルは「ソルトなし」の世界を前提として事前計算されているため、ソルトが加わった瞬間に使い物にならなくなります。

なぜ ア は間違いか

ストレッチングはハッシュ計算を意図的に遅くしてブルートフォース攻撃のコストを上げる優れた対策ですが、レインボーテーブルは「すでに計算が終わっている」ものです。繰り返し回数が攻撃者に知られていれば、同じ回数で事前計算し直せるため、レインボーテーブルそのものへの対策にはなりません。

なぜ ウ は間違いか

SHA-256はMD5より衝突耐性が高く、より安全なアルゴリズムです。しかしアルゴリズムが変わっても「SHA-256のレインボーテーブル」は作成できます。問題はアルゴリズムの強度ではなく、事前計算が成立してしまう点にあります。

なぜ エ は間違いか

パスワードポリシーの強化は推測攻撃やブルートフォースへの対策として有効です。ただしレインボーテーブルは実際にユーザーが使っているパスワード(8文字以上のものも多数含む)のハッシュ値を収録しているため、文字数を増やすだけでは根本的な対策になりません。

出典: AI生成問題(学習用)