IT用語集

レインボーテーブル攻撃とは? 10分でわかりやすく解説

水色の背景に六角形が2つあるイラスト 水色の背景に六角形が2つあるイラスト
アイキャッチ
目次

UnsplashSincerely Mediaが撮影した写真      

レインボーテーブル攻撃は、漏えいしたパスワードハッシュに対して、事前計算した対応表を照合し、元のパスワード候補を突き止める攻撃です。特に、各パスワードに一意のソルトがなく、高速なハッシュをそのまま保存に使っている環境では成立しやすくなります。逆に、各パスワードに固有のソルトを付け、Argon2id などのパスワード保存向け方式と適切なコスト係数を使っていれば、レインボーテーブルをそのまま使う攻撃は通りにくくなります。

レインボーテーブル攻撃とは

レインボーテーブル攻撃は、パスワードそのものではなくパスワードのハッシュ値が漏えいしたときに、その値に対応する元の文字列を探す手法です。攻撃者はハッシュ関数を復号するのではなく、あらかじめ大量の候補文字列とハッシュ値の対応を計算しておき、一致する候補を照合します。

総当たりとの違い

通常の総当たり攻撃は、候補文字列をその場で次々にハッシュ化して照合します。一方、レインボーテーブル攻撃は、事前計算した表を使って照合時間を短縮します。その代わり、表の作成と保管に大きな計算資源と記憶域が必要で、各パスワードに一意のソルトが付いている環境では使いにくくなります。

成立しやすい条件

  • 漏えいしたのが平文ではなくても、パスワードハッシュを攻撃者が入手している
  • 各パスワードに一意のソルトが付いていない
  • MD5やSHA-1などの高速な汎用ハッシュ、またはそれに近い保存方式を使っている
  • 短い、単純、よく使われるパスワードが多い

成立しにくい条件

  • 各パスワードに一意のソルトを付けている
  • Argon2id、scrypt、bcrypt、PBKDF2 など、パスワード保存向けの方式を使っている
  • コスト係数を設定し、1回ごとの試行を重くしている
  • 長いパスワードやパスフレーズを使い、MFAも併用している

レインボーテーブル攻撃への対策

各パスワードに一意のソルトを付ける

ソルトを各パスワードごとに付けてハッシュ化すると、同じパスワードでも保存されるハッシュ値がそろいません。これにより、攻撃者が用意した表を複数アカウントへ横展開しにくくなります。

パスワード保存向けの方式を使う

パスワード保存では、単にハッシュ化するだけでは足りません。Argon2id、scrypt、bcrypt、PBKDF2 のように、試行コストを上げられる方式を選びます。高速な汎用ハッシュをそのまま使うと、レインボーテーブル以外のオフライン推測も進みやすくなります。

長いパスワードを使い、使い回しを避ける

  • 短い単語や規則的な文字列を避け、長さを優先する
  • サービスごとに別のパスワードを使う
  • 必要に応じてパスワードマネージャーを使う

MFAを併用する

パスワードが推定された場合でも、MFAがあれば追加要素なしでログインしにくくなります。レインボーテーブル対策は保存方式の設計が中心ですが、侵害後の悪用を抑えるにはMFAの併用も欠かせません。

ハッシュが漏えいした後に起きること

当該サービスのアカウント侵害

保存方式が不適切だと、漏えいしたハッシュから元のパスワード候補が見つかり、当該サービスのアカウントが侵害されます。特に、ソルトのない保存方式や高速ハッシュは、漏えい後の防御力が弱くなります。

他サービスへの波及

同じパスワードを別サービスでも使っていると、1件の漏えいが他のアカウント侵害につながります。被害が認証基盤やメールアカウントまで広がると、復旧と連絡の範囲も広くなります。

組織側の対応コスト

漏えい後は、パスワードリセット、問い合わせ対応、原因調査、保存方式の改修、利用者への周知が必要になります。保存方式の設計は、平時のセキュリティだけでなく、事故後の対応負荷にも直結します。

まとめ

レインボーテーブル攻撃は、事前計算した表を使って漏えいハッシュから元のパスワード候補を探す攻撃です。成立しやすいのは、ソルトなし、または不適切な保存方式でハッシュを保管している場合です。対策は、各パスワードに一意のソルトを付けること、パスワード保存向けの方式とコスト係数を使うこと、長いパスワードとMFAを組み合わせることです。ハッシュ化だけで十分とはみなさず、漏えい後の攻撃まで前提にした設計に切り替える必要があります。

よくある質問(FAQ)

Q.レインボーテーブル攻撃は何を狙う攻撃ですか?

A.漏えいしたパスワードハッシュに対応する元の文字列を探し、ログインに使える認証情報を得ることを狙います。

Q.ハッシュ化していれば安全ではないのですか?

A.安全とは言い切れません。ソルトがなく、高速なハッシュをそのまま保存に使っていると、漏えい後に推測される余地が残ります。

Q.ソルト(salt)とは何ですか?

A.各パスワードに追加するランダム値です。同じパスワードでも保存されるハッシュ値が同じにならないようにします。

Q.ソルトがあるとレインボーテーブルは無力化しますか?

A.各パスワードに一意のソルトがあれば、事前計算済みの表をそのまま使う攻撃は現実的でなくなります。ただし、漏えいハッシュに対する推測攻撃そのものが消えるわけではありません。

Q.なぜ「高速なハッシュ」は危険になり得ますか?

A.1回あたりの試行コストが低く、漏えい後のオフライン推測が進みやすくなるためです。パスワード保存には、試行コストを調整できる方式を使います。

Q.パスワードの長さはどれくらいがよいですか?

A.短いパスワードは避け、できるだけ長いパスフレーズ寄りの運用にします。サービス側も、長い文字列を受け付けられる設計にしておくと安全性を高めやすくなります。

Q.使い回しが危険なのはなぜですか?

A.1つのサービスで推定または漏えいしたパスワードが、他サービスの不正ログインにも使われるためです。

Q.MFAはレインボーテーブル攻撃に対して役立ちますか?

A.役立ちます。パスワードが推定されても、追加要素がなければアカウント侵害に進みにくくなります。

Q.ハッシュが漏えいした場合、まず何をすべきですか?

A.対象アカウントのパスワードリセット、使い回しへの注意喚起、必要に応じたMFAの有効化または強制、保存方式の点検を優先します。

Q.対策の優先順位はどう考えればよいですか?

A.各パスワードに一意のソルトを付け、Argon2id などの保存向け方式とコスト係数を設定し、そのうえでMFAと使い回し防止を進めます。

記事を書いた人

ソリトンシステムズ・マーケティングチーム