UnsplashのSincerely Mediaが撮影した写真
レインボーテーブル攻撃は、漏えいしたパスワードハッシュに対して、事前計算した対応表を照合し、元のパスワード候補を突き止める攻撃です。特に、各パスワードに一意のソルトがなく、高速なハッシュをそのまま保存に使っている環境では成立しやすくなります。逆に、各パスワードに固有のソルトを付け、Argon2id などのパスワード保存向け方式と適切なコスト係数を使っていれば、レインボーテーブルをそのまま使う攻撃は通りにくくなります。
レインボーテーブル攻撃は、パスワードそのものではなくパスワードのハッシュ値が漏えいしたときに、その値に対応する元の文字列を探す手法です。攻撃者はハッシュ関数を復号するのではなく、あらかじめ大量の候補文字列とハッシュ値の対応を計算しておき、一致する候補を照合します。
通常の総当たり攻撃は、候補文字列をその場で次々にハッシュ化して照合します。一方、レインボーテーブル攻撃は、事前計算した表を使って照合時間を短縮します。その代わり、表の作成と保管に大きな計算資源と記憶域が必要で、各パスワードに一意のソルトが付いている環境では使いにくくなります。
ソルトを各パスワードごとに付けてハッシュ化すると、同じパスワードでも保存されるハッシュ値がそろいません。これにより、攻撃者が用意した表を複数アカウントへ横展開しにくくなります。
パスワード保存では、単にハッシュ化するだけでは足りません。Argon2id、scrypt、bcrypt、PBKDF2 のように、試行コストを上げられる方式を選びます。高速な汎用ハッシュをそのまま使うと、レインボーテーブル以外のオフライン推測も進みやすくなります。
パスワードが推定された場合でも、MFAがあれば追加要素なしでログインしにくくなります。レインボーテーブル対策は保存方式の設計が中心ですが、侵害後の悪用を抑えるにはMFAの併用も欠かせません。
保存方式が不適切だと、漏えいしたハッシュから元のパスワード候補が見つかり、当該サービスのアカウントが侵害されます。特に、ソルトのない保存方式や高速ハッシュは、漏えい後の防御力が弱くなります。
同じパスワードを別サービスでも使っていると、1件の漏えいが他のアカウント侵害につながります。被害が認証基盤やメールアカウントまで広がると、復旧と連絡の範囲も広くなります。
漏えい後は、パスワードリセット、問い合わせ対応、原因調査、保存方式の改修、利用者への周知が必要になります。保存方式の設計は、平時のセキュリティだけでなく、事故後の対応負荷にも直結します。
レインボーテーブル攻撃は、事前計算した表を使って漏えいハッシュから元のパスワード候補を探す攻撃です。成立しやすいのは、ソルトなし、または不適切な保存方式でハッシュを保管している場合です。対策は、各パスワードに一意のソルトを付けること、パスワード保存向けの方式とコスト係数を使うこと、長いパスワードとMFAを組み合わせることです。ハッシュ化だけで十分とはみなさず、漏えい後の攻撃まで前提にした設計に切り替える必要があります。
A.漏えいしたパスワードハッシュに対応する元の文字列を探し、ログインに使える認証情報を得ることを狙います。
A.安全とは言い切れません。ソルトがなく、高速なハッシュをそのまま保存に使っていると、漏えい後に推測される余地が残ります。
A.各パスワードに追加するランダム値です。同じパスワードでも保存されるハッシュ値が同じにならないようにします。
A.各パスワードに一意のソルトがあれば、事前計算済みの表をそのまま使う攻撃は現実的でなくなります。ただし、漏えいハッシュに対する推測攻撃そのものが消えるわけではありません。
A.1回あたりの試行コストが低く、漏えい後のオフライン推測が進みやすくなるためです。パスワード保存には、試行コストを調整できる方式を使います。
A.短いパスワードは避け、できるだけ長いパスフレーズ寄りの運用にします。サービス側も、長い文字列を受け付けられる設計にしておくと安全性を高めやすくなります。
A.1つのサービスで推定または漏えいしたパスワードが、他サービスの不正ログインにも使われるためです。
A.役立ちます。パスワードが推定されても、追加要素がなければアカウント侵害に進みにくくなります。
A.対象アカウントのパスワードリセット、使い回しへの注意喚起、必要に応じたMFAの有効化または強制、保存方式の点検を優先します。
A.各パスワードに一意のソルトを付け、Argon2id などの保存向け方式とコスト係数を設定し、そのうえでMFAと使い回し防止を進めます。