レインボー攻撃は、漏えいしたパスワードのハッシュ値に対し、事前計算したレインボーテーブルを利用して候補を調べる攻撃です。ハッシュを暗号のように復号するわけではありません。ソルト、保存方式、ログイン時の対策を分けて理解しましょう。
ハッシュ化と暗号化の違い
ハッシュ関数は入力からハッシュ値を計算します。同じ関数に同じ入力を渡せば同じ結果になりますが、ハッシュ値から元の入力を効率よく戻せない性質を利用します。入力と無関係な乱数へ変換する、という意味ではありません。
暗号化は適切な鍵で復号することを想定します。一方、パスワード照合では候補から同じ保存方式で値を計算し、一致を確認します。長さや文字種が限られた候補を試される可能性は、ハッシュ化しても残ります。
レインボーテーブルを使う仕組み
- 攻撃者が保存されたハッシュ値などを入手する。
- 対象の方式に合う事前計算テーブルを利用し、候補を絞る。
- 見つかった候補から計算した値を確認し、パスワード推測を試みる。
レインボーテーブルは、ハッシュ計算と還元処理をつないだ鎖の端点などを保持して、単純な全対応表より記憶量を減らす工夫です。全ての平文とハッシュ値を一対一で保存した表、そのものではありません。表の対象範囲・方式・ソルトの条件に合わなければ、そのまま使えるとは限りません。
他のパスワード攻撃との違い
| 方式 | 考え方 |
|---|---|
| 辞書攻撃 | よく使われる語などの候補を試す |
| 総当たり | 決めた範囲の候補を順に試す |
| レインボーテーブル攻撃 | 事前計算した鎖を使い、時間と記憶量を交換する |
| パスワードリスト攻撃 | 漏えいしたID・パスワードの組を別サービスで試す |
候補の選び方と、オンライン・オフラインの区別は別の観点です。漏えいハッシュを手元で照合するオフライン攻撃には、サービス側のログイン回数制限だけでは対処できません。
ソルトと専用の保存方式で対処する
| 対策 | 役割と限界 |
|---|---|
| パスワードごとに異なるランダムなソルト | 同じ候補を多数のアカウントへ使い回す事前計算を難しくする。ソルト自体は秘密でなくてよい |
| Argon2idなどのパスワード保存専用方式 | 適切な計算・メモリコストで候補一つの検証を重くする。実績あるライブラリと現行の推奨設定を使う |
| 長く、使い回さないパスワード | 推測や他サイトの漏えいからの被害を減らす。管理ツールの利用も検討する |
| 多要素認証 | パスワードだけを知られた場合の不正ログインを抑える。ハッシュ自体の解析を直接防ぐものではない |
MD5・SHA-1をSHA-256へ置き換えるだけでは、速く大量に計算できる問題が残ります。パスワード保存に単純な高速ハッシュを一回使う方法を推奨するものではありません。ソルトを加えても、弱いパスワードへの個別の候補検証が不可能になるわけではありません。
確認問題:多要素認証を入れれば、漏えいハッシュの解析を止められる?
直接は止められません。多要素認証はログイン時の追加確認です。保存側には個別のソルトと適切なパスワード保存専用方式などが必要です。
noteで攻撃と対策を整理する
この攻撃の位置付けが分かったら、情報セキュリティの教材で攻撃の目的・仕組み・対策を横断的に復習しましょう。保存データを守る対策と、ログインを守る対策を分けて説明する練習につながります。


コメント