レインボーテーブルとは
この記事は約 2 分で読めます
レインボーテーブル (Rainbow Table) とは、ハッシュ値から元のパスワードを逆引きするために事前計算されたテーブルです。大量のパスワードとそのハッシュ値の対応表を作成しておき、漏洩したハッシュ値と照合することで元のパスワードを高速に特定できます。時間と空間のトレードオフを利用した効率的な攻撃手法で、 2025 年時点でも MD5 や SHA-1 のような高速ハッシュを使用するシステムに対しては依然として有効な脅威です。
流出後の被害を決めるのは保存方式
ハッシュ値の流出そのものに平文のパスワードは含まれていません。しかし高速なハッシュ関数でソルトなしに保存されていた場合、事前計算されたテーブルとの照合だけで多くのハッシュが短時間で平文に戻ります。流出という事実が同じでも、そこから生じる実害の大きさは保存方式の選択によってあらかじめ決まっているということです。しかも保存方式の是正は、流出後に行っても既に外部へ出たハッシュ値には効きません。ハッシュを作り直せるのは自分の手元に残っているデータベースだけで、攻撃者の手元にある写しは古い方式のままです。つまりパスワードの保存方式は、侵入を防げなかった場合の被害の上限を決める層であり、事後の対応では埋め合わせられない部分です。侵入検知や公表体制のように事後に働く仕組みとは、この点で役割が異なります。
レインボーテーブルの仕組み
レインボーテーブルの仕組みと数値例
レインボーテーブルはリダクション関数とハッシュ関数を交互に適用したチェーンを保存します。英小文字 + 数字の 8 文字パスワード (約 2.8 兆通り) に対する MD5 レインボーテーブルは約 460 GB で構築でき、解読は数分で完了します。一方、英大小文字 + 数字 + 記号の 12 文字パスワードでは、テーブルサイズが数百ペタバイトに膨れ上がり、事実上構築不可能です。つまり、パスワードの長さと文字種を増やすだけで、レインボーテーブル攻撃の実効性は劇的に低下します。
レインボーテーブルへの対策
最も効果的な対策は、ソルト (ランダムデータ) をパスワードに付加してからハッシュ化することです。ソルトが付加されると、同じパスワードでもユーザーごとに異なるハッシュ値が生成されるため、事前計算テーブルが無効化されます。現代のパスワード保存では bcrypt や Argon2 など、ソルトを自動付加し計算コストを調整できるハッシュアルゴリズムが標準です。サービス開発者は MD5 や SHA-1 のような高速ハッシュをパスワード保存に使用してはいけません。
ユーザー側の防御
16 文字以上のランダムなパスワードは、レインボーテーブルに含まれている可能性が天文学的に低く、この攻撃に対して高い耐性を持ちます。パスワードのエントロピーを高めることが、あらゆるオフライン攻撃への最善の防御策です。
この記事は役に立ちましたか?