レインボーテーブルとは
この記事は約 2 分で読めます
レインボーテーブル (Rainbow Table) とは、ハッシュ値から元のパスワードを 逆引きするために事前計算されたテーブルです。大量のパスワードとそのハッシュ値の 対応表を作成しておき、漏洩したハッシュ値と照合することで元のパスワードを 高速に特定できます。時間と空間のトレードオフを利用した効率的な攻撃手法で、 2025 年現在も MD5 や SHA-1 のような高速ハッシュを使用するシステムに対しては 依然として有効な脅威です。
現場での使用例
「漏洩したデータベースのパスワードハッシュを調査したところ、MD5 で ソルトなしのハッシュが使われており、レインボーテーブルで約 70% の パスワードが数分で復元されました。bcrypt への移行が急務です。」
レインボーテーブルの仕組み
レインボーテーブルの仕組みと数値例
レインボーテーブルはリダクション関数とハッシュ関数を交互に適用したチェーンを 保存します。英小文字 + 数字の 8 文字パスワード (約 2.8 兆通り) に対する MD5 レインボーテーブルは約 460 GB で構築でき、解読は数分で完了します。 一方、英大小文字 + 数字 + 記号の 12 文字パスワードでは、テーブルサイズが 数百ペタバイトに膨れ上がり、事実上構築不可能です。つまり、パスワードの 長さと文字種を増やすだけで、レインボーテーブル攻撃の実効性は劇的に低下します。パスワードクラッキングの書籍 (Amazon)で技術的な詳細を学べます。
レインボーテーブルへの対策
最も効果的な対策は、ソルト (ランダムデータ) を パスワードに付加してからハッシュ化することです。ソルトが付加されると、 同じパスワードでもユーザーごとに異なるハッシュ値が生成されるため、 事前計算テーブルが無効化されます。現代のパスワード保存では bcrypt や Argon2 など、ソルトを自動付加し計算コストを調整できるハッシュアルゴリズムが標準です。 サービス開発者は MD5 や SHA-1 のような高速ハッシュをパスワード保存に 使用してはいけません。
ユーザー側の防御
パスつく.com で生成した 16 文字以上のランダムなパスワードは、 レインボーテーブルに含まれている可能性が天文学的に低く、この攻撃に対して 高い耐性を持ちます。パスワードのエントロピーを 高めることが、あらゆるオフライン攻撃への最善の防御策です。パスワード保護の書籍 (Amazon)も参考になります。