対象試験と出題頻度
詳細をクリックして確認
基本情報技術者
応用情報技術者
★★☆☆☆
ランクC(応用)
用語の定義
レインボーテーブル攻撃とは、一言で言うと「あらかじめ計算しておいたパスワードとハッシュ値の対応表を使って、ハッシュ値から元のパスワードを高速に逆引きする攻撃」のことです。
イメージとしては、「辞書を使って単語の意味を調べる」ようなものです。
通常、ハッシュ関数は一方向性(元に戻せない)が特徴ですが、レインボーテーブル攻撃では「この結果(ハッシュ値)になる元の値(パスワード)は何か?」を、事前に作成した巨大な対応表から瞬時に検索します。
📌 前提知識:ハッシュ関数とパスワード保存
Webサービスでは、パスワードをそのまま保存せず、ハッシュ関数で変換した値(ハッシュ値)を保存します。ハッシュ関数は「一方向性」を持ち、ハッシュ値から元のパスワードを計算で求めることは理論上不可能です。
しかし、レインボーテーブル攻撃はこの「計算で求められない」という前提を、事前計算と検索で回避します。
解説
レインボーテーブル攻撃(Rainbow Table Attack)は、1980年代に提案された「時間と空間のトレードオフ」という概念に基づく攻撃手法です。
通常のブルートフォース攻撃では、ハッシュ値を解析するたびにすべてのパスワード候補のハッシュ値を計算する必要があり、膨大な時間がかかります。
レインボーテーブル攻撃では、この計算を事前に済ませておくことで、攻撃時の処理を「計算」から「検索」に変え、高速化を実現します。
- レインボーテーブルとは:パスワードとそのハッシュ値の対応関係を、「還元関数」という仕組みを使って効率的に圧縮・格納したデータ構造です。数百GB〜数TBのサイズになることもありますが、すべての対応を格納するよりは大幅に小さくなります。
- 名前の由来:テーブル内で複数の還元関数を使い分け、それぞれに異なる「色」を割り当てるイメージから「レインボー(虹)」と名付けられました。
📊 レインボーテーブル攻撃 vs ブルートフォース攻撃
| 比較項目 | ブルートフォース攻撃 | レインボーテーブル攻撃 |
|---|---|---|
| 事前準備 | 不要 | 巨大なテーブルを事前作成(数日〜数週間) |
| 攻撃時の処理 | 全パターンのハッシュ値を計算 | テーブルから検索 |
| 攻撃速度 | 遅い(計算が必要) | 非常に高速(検索のみ) |
| 必要なリソース | CPU/GPU(計算能力) | ストレージ(保存容量) |
| ソルト付きハッシュへの効果 | 効果あり(時間はかかる) | 効果なし(無力化される) |
💡 なぜこの攻撃が脅威となるのか?
レインボーテーブル攻撃の恐ろしさは、その圧倒的な速度にあります。
ブルートフォース攻撃で数日〜数週間かかるパスワード解析が、レインボーテーブルを使えば数秒〜数分で完了します。
インターネット上では、MD5やSHA-1など主要なハッシュアルゴリズム用のレインボーテーブルが無料で公開されており、攻撃のハードルは非常に低くなっています。
ただし、レインボーテーブル攻撃には決定的な弱点があります。それは「ソルト(Salt)」という対策で完全に無力化できることです。
ソルトとは、パスワードをハッシュ化する前に付加するランダムな文字列のことで、同じパスワードでもソルトが異なれば異なるハッシュ値になります。
これにより、事前計算されたレインボーテーブルは使い物にならなくなります。
具体的な活用例・対策
レインボーテーブル攻撃への対策は、主にシステム側(パスワード保存方法)で行います。
- ソルト(Salt)の付与: パスワードをハッシュ化する前に、ユーザーごとに異なるランダムな文字列(ソルト)を付加します。これにより、同じパスワードでも異なるハッシュ値になり、事前計算されたレインボーテーブルが無効化されます。最も効果的な対策です。
- ストレッチング(繰り返しハッシュ): ハッシュ計算を数千〜数万回繰り返すことで、1回のハッシュ計算にかかる時間を意図的に長くします。これにより、ブルートフォース攻撃とレインボーテーブル作成の両方を困難にします。
- bcrypt / Argon2 / scryptの使用: これらの「パスワードハッシュ関数」は、ソルト付与とストレッチングを組み込んだ設計になっており、パスワード保存に最適です。MD5やSHA-1はパスワード保存には使用しないでください。
- ペッパー(Pepper)の付与: ソルトに加えて、全ユーザー共通の秘密文字列(ペッパー)を付加します。ペッパーはデータベースとは別の場所に保管し、データベースが漏えいしても解析を困難にします。
⚠️ 実務でのポイント(開発者向け)
パスワードの保存には、必ずbcrypt、Argon2、scryptのいずれかを使用してください。これらは「ソルト自動生成」「ストレッチング」「計算コスト調整」が組み込まれており、安全なパスワード保存を簡単に実装できます。
絶対に避けるべき方法:
× MD5、SHA-1、SHA-256を単独で使用(ソルトなし)
× パスワードの平文保存
× 独自のハッシュアルゴリズムを実装
試験ではこう出る!
基本情報技術者、応用情報技術者で出題されます。以下のキーワードとセットで覚えましょう。
【重要キーワード】
- ハッシュ値から元のパスワードを逆引き
- 事前計算した対応表(レインボーテーブル)
- 時間と空間のトレードオフ
- ソルト(Salt)による対策
- bcrypt / Argon2 / scrypt
試験問題で「ハッシュ値とパスワードの対応表を事前に作成しておき、高速にパスワードを解析する攻撃」や「ソルトを付与することで防げる攻撃」といった記述があれば、それは「レインボーテーブル攻撃」に関する記述です。
📊 ソルトによる対策の仕組み
| ソルトなし(危険) | ||
|---|---|---|
| パスワード「password」 | → | 常に同じハッシュ値 |
| ソルトあり(安全) | ||
| パスワード「password」+ ソルト「xyz123」 | → | ユーザーごとに異なるハッシュ値 |
※ソルトはユーザーごとにランダムに生成し、ハッシュ値と一緒に保存します
📝 IPA試験での出題ポイント
レインボーテーブル攻撃は、「ソルト(Salt)」とセットで出題されることが多いです。「なぜソルトが有効なのか」を説明できるようにしておきましょう。また、「ブルートフォース攻撃」「辞書攻撃」との違い(事前計算 vs リアルタイム計算)も問われることがあります。
【確認テスト】理解度チェック
ここまでの内容を理解できたか、簡単なクイズで確認してみましょう。
Q. レインボーテーブル攻撃に関する説明として、最も適切なものはどれでしょうか?
- A. パスワードに使用できるすべての文字の組み合わせを順番に試す攻撃
- B. 事前に計算したハッシュ値とパスワードの対応表を使って、ハッシュ値から元のパスワードを高速に逆引きする攻撃
- C. 他のサービスから流出したIDとパスワードを使って不正ログインを試みる攻撃
正解と解説を見る
正解:B
解説:
レインボーテーブル攻撃は、パスワードとそのハッシュ値の対応関係を事前に計算してテーブル化しておき、攻撃時にはそのテーブルから検索することで、ハッシュ値から元のパスワードを高速に逆引きする攻撃です。「時間と空間のトレードオフ」という概念に基づいており、事前準備に時間と容量がかかる代わりに、攻撃自体は非常に高速です。対策としては、パスワードをハッシュ化する際にソルト(Salt)を付与することで、事前計算されたテーブルを無効化できます。
選択肢Aは「ブルートフォース攻撃(総当たり攻撃)」の説明です。選択肢Cは「パスワードリスト攻撃」の説明であり、いずれもレインボーテーブル攻撃とは異なる攻撃手法です。