Written by 夏野ゆきか

目 次
レインボーテーブル攻撃とは、レインボーテーブル(ハッシュ値と対応する平文を大量に格納したデータ構造)を使用し、不正な方法で入手したハッシュ値から、元の平文を導き出す攻撃手法のことです。
一般的に、パスワードは直接保存されるのではなく、ハッシュ関数を用いてハッシュ化された状態でデータベースに格納されます。しかし、レインボーテーブルを使用し、事前に計算されたハッシュ値と照合することで、攻撃者に元のパスワードを推測されるリスクが生じます。
レインボーテーブル攻撃が成功すると、攻撃者によるアカウントの不正アクセスが可能となり、個人情報の窃取や不正送金といった被害につながる恐れがあります。
レインボーテーブル攻撃を防ぐためには、以下のような対策が有効です。
- ・ 強力なパスワードを設定する
- ・ ソルト(salt)を用いてハッシュ化する
- ・ ペッパー(pepper)を用いてハッシュ化する
- ・ ストレッチングを行う
本記事では、レインボーテーブル攻撃の仕組み、それに対する有効な対策について、わかりやすく解説します。
▼この記事を要約すると
- レインボーテーブルとは、ハッシュ関数で変換されたハッシュ値と、そのハッシュ値に対応する元のパスワード(平文)をペアにして大量に格納したデータ構造
- レインボーテーブル攻撃とは、レインボーテーブルを使用し、不正な方法で入手したハッシュ値から元の平文を解読する攻撃手法
- レインボーテーブル攻撃には、「強力なパスワードを設定」「ソルト(salt)を用いてハッシュ化」「ペッパー(pepper)を用いてハッシュ化」「ストレッチングを行う」といった対策が有効
レインボーテーブルとは
レインボーテーブルとは、ハッシュ関数を用いて生成された「ハッシュ値」と、それに対応する元の「平文(パスワードなど)」を大量に格納したデータベースのこと。このデータベースを使った攻撃が、後述する「レインボーテーブル攻撃」です。
※ハッシュ値…元のデータ(平文)を、ハッシュ関数という特定のアルゴリズムを使用し、変換したデータ
※平文…暗号化やハッシュ化が施されていないデータ
「ハッシュ化」とは、平文をハッシュ関数によってハッシュ値に変換する処理を指します。ハッシュ化されたデータは一方向性を持ち、理論上、元のデータに戻すことができないという特性があります。
ハッシュ化と暗号化の違い
ハッシュ化と混同されやすい概念に「暗号化」があります。両者は混同されやすいですが、下記の様な違いがあります。
●暗号化:適切な鍵があれば、暗号化されたデータを元に戻せる(復号可能)。
●ハッシュ化:一方向性を持ち、理論上、元のデータには戻せない。
ただし、レインボーテーブルを利用することで、不正取得したハッシュ値から元の平文を推測することが可能となります。
レインボーテーブル構築に使用される2種類の関数
レインボーテーブルの構築には、「ハッシュ関数」と「還元関数」の2種類の関数が用いられます。
ハッシュ関数
ハッシュ関数は、平文をハッシュ値に変換するための関数です。
ハッシュ関数により生成されたハッシュ値は、理論上、元の平文を直接復元することが困難であるため、ハッシュ関数は多くのシステムにおいてパスワードの保護手段に用いられています。
還元関数
還元関数は、ハッシュ値から元の平文の候補を生成するための関数です。
ただし、還元関数が導き出すのは、あくまで元の平文の可能性がある値の一つであり、必ずしもハッシュ化前の平文と一致するとは限りません。
レインボーテーブルでは、このハッシュ関数と還元関数を交互に適用し、ハッシュ値と平文の対応関係を事前に計算・保存する仕組みを構築しています。
レインボーテーブル攻撃とは
レインボーテーブル攻撃とは、前述したレインボーテーブルを使用し、不正に取得したハッシュ値から元の平文を導き出す攻撃手法です。
例えば、Webサービスからパスワードのハッシュ値が流出した場合、攻撃者はレインボーテーブルを使用して、そのハッシュ値に対応する元のパスワードを割り出すことが可能です。
これにより、正規ユーザーのアカウントが不正に利用され、個人情報の窃取や不正送金などの被害が発生する可能性があります。

レインボーテーブル攻撃の仕組み
レインボーテーブル攻撃の仕組みについて解説します。レインボーテーブル攻撃は、以下の手順で実行されます。
- 1. チェインを作成する
- 2. レインボーテーブルを構築する
- 3. ハッシュ値をもとに平文を特定する
- 4. 一致するハッシュ値が見つかるまで繰り返し探索する
それぞれの手順について詳しく解説します。
1. チェインを作成する
レインボーテーブルを作成する最初のステップとして、「チェイン」と呼ばれる構造を作成します。チェインは、ハッシュ関数と還元関数を交互に適用することで生成される、平文とハッシュ値の連鎖を指します。
手順は以下のとおりです。
- 1. 平文 「Password123」 をハッシュ関数で変換し、ハッシュ値 「Hash1」 を生成
- 2. ハッシュ値「Hash1」に、還元関数Aを適用し、新たな平文「Secure789」を生成
- 3. 平文「Secure789」を再度ハッシュ化し、ハッシュ値「Hash2」を生成
- 4. ハッシュ値「Hash2」に、還元関数Bを適用し、別の新たな平文「Complex456」を生成
この1~4の手順を何度か繰り返すことで、チェインを作成します。
※ここで最終的に得られた平文は「Cyber1234」とする
なお、チェインを作成する際、還元関数は毎回異なるものを使用します。これにより、異なるチェインが衝突しにくくなり、レインボーテーブルの効率が向上します。
2. レインボーテーブルを構築する
レインボーテーブルは、複数のチェインで構成されるデータ構造であるため、ほかの平文でも同様にチェインを作成します。
異なる平文から作成されたチェインを大量に格納することで、検索効率を向上させます。
レインボーテーブルに記録されるのは、チェインの先頭と末尾の平文のみです。
先ほどのチェインの例では、以下の情報のみを保存します。
●先頭の平文:「Password123」
●末尾の平文:「Cyber1234」
この方法により、ストレージ消費を抑えつつ、必要な情報を効率的に保持できます。チェインの中間データは保存せず、探索時に動的に再計算することで、データ量を大幅に削減できます。
また、ハッシュ関数と還元関数を適用することで、元のデータを復元可能であるため、一度削除された情報であっても再構築することが可能です。
3. ハッシュ値をもとに平文を特定する
レインボーテーブルが構築できたら、以下の手順でハッシュ値に対応する平文を探索します。
- 1. 不正に入手したハッシュ値に、チェイン化の末尾で使用した還元関数を適用して、平文の候補を生成
- 2. 生成した平文が、レインボーテーブルに記録されたチェイン末尾の平文と一致するか確認
- 3. 一致した場合、そのチェインの中にハッシュ値の元となった平文が含まれている可能性が高い。チェインの開始点から再度ハッシュ関数と還元関数を適用し、ハッシュ値の元となった平文を探索
- 4. チェイン内の適切な位置を特定し、ハッシュ値の元となる平文(元のパスワード)を特定
ここで入手できた平文が、求めていた元のパスワードとなります。攻撃者はハッシュ値から、対応する平文(パスワード)を特定できてしまいます。
4. 一致するハッシュ値が見つかるまで繰り返す
もし、探索中に対応するチェインが見つからない場合は、以下の手順を繰り返します。
- 1. 末尾の1つ前の平文に使用した還元関数を、不正に入手したハッシュ値に適用し、新たな平文を生成
- 2. 生成された平文をハッシュ関数で処理し、新しいハッシュ値を作成
- 3. この新たなハッシュ値に、末尾の平文を生成した還元関数を適用し、新たな平文を得る。
- 4. 得られた平文が、テーブル内の末尾の平文と一致するかを確認
- 5. 一致した場合、そのチェインを復元して、元のパスワードを特定
このプロセスを繰り返すことで、攻撃者はハッシュ値に対応するチェインを効率的に特定し、最終的な平文を割り出すことができます。
レインボーテーブル攻撃とブルートフォース攻撃の違い
ブルートフォース攻撃とは、想定される全てのパスワードのパターンを総当たりで入力し、認証の突破を試みるサイバー攻撃手法です。
特別な知識や高度なツールを必要とせず実行可能であるため、広く利用される手法の一つですが、下記のような欠点もあります。
- ・ 試行回数が膨大になるため、認証突破に長時間を要する
- ・ 何度もログインを試行するため、不審なアクセスとして検知されやすい
そのため、ブルートフォース攻撃に対してはログイン試行回数の制限やアカウントロック機能の導入が、有効な防御策となります。
一方、レインボーテーブル攻撃は、事前に構築されたレインボーテーブルを利用して、ハッシュ値から元の平文(パスワード)を効率的に導き出す手法です。
ブルートフォース攻撃とレインボーテーブル攻撃の比較
項目 | ブルートフォース攻撃 | レインボーテーブル攻撃 |
---|---|---|
攻撃手法 | すべてのパスワードの組み合わせを試行 | 事前に計算されたレインボーテーブルを利用 |
事前準備 | 不要 | レインボーテーブルの作成が必要 |
攻撃速度 | 遅い(試行回数が多いため) | 迅速(ハッシュ値の検索のみ) |
攻撃の検知 | 多数のログイン試行により検知されやすい | ハッシュ値の解析のみで検知が困難 |
ブルートフォース攻撃は試行回数の制限を設けることで一定の防御が可能ですが、レインボーテーブル攻撃は、それだけでは防ぐことができません。
次の章では、レインボーテーブル攻撃に対する具体的な防御策について解説します。
レインボーテーブル攻撃への対策
レインボーテーブル攻撃を防ぐためには、以下の対策を講じることが重要です。
- ・ 強力なパスワードの設定
- ・ ソルト(salt)を用いたハッシュ化
- ・ ペッパー(pepper)を用いたハッシュ化
- ・ ストレッチング(Stretching)の適用
強力なパスワードを設定する
パスワードの強度を高めることで、レインボーテーブル攻撃のリスクを軽減できます。
推奨されるパスワードの要件
- ・ 最低15文字以上
- ・ 大文字・小文字・数字・特殊記号を含める
- ・ 推測されやすい単語(例:password, 123456)を避ける
複雑なパスワードを記憶するためにおすすめの手法が、「パスフレーズ」の活用です。
パスフレーズとは、複数の単語や文字列を組み合わせたパスワードのこと。日常的に使用する単語を組み合わせることで、長くても覚えやすいというメリットがあります。
例:「Coffee_Book$Ra1nbow」(日常的な単語を組み合わせたパスフレーズ)
「o」を「0」に、あるいは「i」を「1」に置き換えるなど、自分なりのルールを設定することでセキュリティを強化できます。
また、同じパスワードを複数のサイトで使い回さないことも重要です。
ソルト(salt)を用いてハッシュ化する
ソルトとは、ランダムな文字列をパスワードに付加し、ハッシュ化することでセキュリティを強化する技術です。
例えば、パスワード「abc123」に対して、ランダムなソルト「Xj9k2」を付加すると、次のようになります。
Xj9k2abc123 → ハッシュ関数適用 → ハッシュ値
例えば、パスワード「abc123」に対して「Xj9k2」というソルトを付加し、「Xj9k2abc123」としてからハッシュ化を行います。
これにより、事前計算されたレインボーテーブルと一致しないハッシュ値が生成され、攻撃を無効化することが可能です。
ただし、ソルトが同じだと、同一のパスワードが同じハッシュ値になるため無効化されてしまいます。パスワードごとに異なるソルトを設定し、また十分な長さとランダム性を持たせることが重要です。
ペッパー(pepper)を用いてハッシュ化する
ソルトを補完する技術として、ペッパー(pepper)の使用が推奨されます。
ペッパーは、ソルトと同様にパスワードに付加するランダムなデータですが、ソルトと異なりデータベース内には保存せず、別の場所(例:環境変数ファイルやアプリケーションコード内)に保存するという点が特徴です。
ペッパーの利点
- ・ データベースが流出した際も、ハッシュ値からパスワードを特定するのが極めて困難になる
- ・ 攻撃者がデータベースを入手しても、ペッパーが別の場所に保存されていれば、パスワードの解読が困難
ペッパーは、ハードウェア・セキュリティ・モジュール(HSM)や環境変数に格納し、外部からのアクセスを制御することが推奨されます。
ストレッチングを行う
ストレッチングとは、ハッシュ化を複数回繰り返すことで計算コストを増大させ、攻撃の難易度を高めるセキュリティ手法です。
1回のハッシュ計算ではなく、何千回、何万回と繰り返しハッシュ化を実施することで、パスワードの解読にかかる時間を増加させることが可能です。
ただし、ストレッチングは計算コストが高く、サーバー負荷も増加するため、適切なバランスを取りながら行うことが必要となります。
認証まわりのセキュリティ強化なら「LANSCOPE プロフェッショナルサービス」にお任せ
レインボーテーブル攻撃は、ハッシュ化されたパスワードが適切に保護されていない場合、成立する攻撃手法です。ハッシュ化や、ソルト・ペッパーの正しい適用を行うことで、レインボーテーブル攻撃による不正アクセスリスクを低減することができます。
また、認証周り自体を強化するため、多要素認証(MFA)を導入し、パスワード単体での認証依存を低減することも重要です。
LANSCOPE プロフェッショナルサービスでは、企業・組織の認証強化を支援する、診断サービスを提供しています。
1.自社システムやサイトの認証まわりの課題に対策する「脆弱性診断」
セキュリティの専門家が、貴社の認証・アクセスまわりのセキュリティリスクを診断し、リスクレベルに基づく脆弱性の優先順位づけや、最適な対策方法について提案します。
LANSCOPE プロフェッショナルサービスが提供する「脆弱性診断」では、お客様のサーバーやネットワーク・Webアプリケーション環境にて、脆弱性の有無や権限設定の見直しなどを弊社専門家が実施。
リスクベース認証の導入が日常的な対策とすれば、脆弱性診断はスポットで定期的に実施する「健康診断」のようなセキュリティ対策です。
▼脆弱性診断:「認証周り」の確認項目の例
- ・ アカウントロックの有無(適切か)
- ・ 多要素認証の有無
- ・ エラーメッセージから認証情報が推測できないか
- ・ パスワードの強度は十分か
脆弱性診断を受けることで、組織の現状環境が「不正アクセス攻撃への耐性があるか」「課題は何か」「セキュリティリスクはどのレベルか」等を明らかにし、脆弱性へ対策を効率的に打つことが可能です。
また、レインボーテーブル攻撃の対策に有効な「ハッシュ化の適用状況」や「ソルト・ペッパーの適用状況」も、脆弱性診断にて評価し、対策することが可能となります。
クラウドサービスへの不正アクセスを防止「クラウドセキュリティ診断」
現在ご利用中のクラウドサービスにおける、認証周りのセキュリティ強化なら、クラウドセキュリティ診断がおすすめです。
CISベンチマークやJPCERT・IPAなどの発信する情報を定期的に収集し、診断ルールに反映することで、常に最新のセキュリティ基準やルールに則った診断をご提供することが可能です。
さらに、対応可能なクラウドサービスは多岐にわたり、幅広いお客様のクラウド環境に関するセキュリティ不安を解消するためのお力添えが可能です。
▼対応可能なクラウドサービスの診断一覧
- ・ Microsoft 365 セキュリティ診断
- ・ Google Workspace セキュリティ診断
- ・ Salesforce セキュリティ診断
- ・ Amazon Web Services(AWS)セキュリティ診断
- ・ Microsoft Azure セキュリティ診断
- ・ Google Cloud Platform (GCP)セキュリティ診断
- ・ Zoom セキュリティ診断
- ・ Box セキュリティ診断
- ・ Slack セキュリティ診断
多要素認証を含む、クラウドサービスのセキュリティ対策に興味のある方は、以下ページをご覧ください。
まとめ
本記事では、レインボーテーブル攻撃の仕組みや、有効な対策について解説しました。
本記事のまとめ
- レインボーテーブルとは、ハッシュ関数で変換されたハッシュ値と、そのハッシュ値に対応する元のパスワード(平文)をペアにして大量に格納したデータ構造
- レインボーテーブル攻撃とは、レインボーテーブルを使用し、不正な方法で入手したハッシュ値から元の平文を解読する攻撃手法
- レインボーテーブル攻撃には、「強力なパスワードを設定」「ソルト(salt)を用いてハッシュ化」「ペッパー(pepper)を用いてハッシュ化」「ストレッチングを行う」といった対策が有効
従来、パスワードをハッシュ化することで、パスワード漏洩のリスクを低減できると考えられていました。しかし、レインボーテーブル攻撃を用いれば、事前計算されたハッシュ値と照合することで、攻撃者に元のパスワードを推測されるリスクがあります。
単なるハッシュ化だけでなく、ソルトやペッパーを適用し、またストレッチングなどを組み合わせることで、攻撃耐性を強化することが重要です。また、不正アクセス対策として認証周りの強化を図る際には、今回紹介した脆弱性診断・クラウドセキュリティ診断など、専門家の知見から現状の評価を行うサービスを取り入れることも、是非ご検討ください。

おすすめ記事