図1 総当たりで計算すると膨大な時間がかかる(イラスト:なかがわ みさこ)
図1 総当たりで計算すると膨大な時間がかかる(イラスト:なかがわ みさこ)
[画像のクリックで拡大表示]
図2 あらかじめ計算済みの結果から答えを見つける(イラスト:なかがわ みさこ)
図2 あらかじめ計算済みの結果から答えを見つける(イラスト:なかがわ みさこ)
[画像のクリックで拡大表示]

 レインボー・クラックとは悪用が懸念されている強力なパスワードの解読手法である。「アルファベットや数字,使えるなら記号も組み合わせて最低でも8文字以上のパスワードを作る」──。パソコンやネットワークへログインする際に使うパスワードは,こんな原則に基づいて作るのが常識となっている。簡単に推測できそうな,人名や地名のような意味のある単語はもちろん使えない。こうした原則に従って作れば,今でも多くのシステムで安全なパスワードとして十分通用する。

 しかし,レインボー・クラックの登場より,一部のシステムではこうした原則が必ずしも通用しなくなりつつある。特に危険なのがWindowsだ。現在主流のWindows XPでは過去との互換性確保のためOSの標準設定がセキュリティ的に弱い状態になっており,このレインボー・クラックによって潜在的にパスワードを盗まれる危険にさらされている。

 レインボー・クラックがどのようなものかを知るには,それ以外のパスワード解読手法についてまず理解しておくことが重要だ。従来からある代表的なパスワード解読手法には,「総当り攻撃」(brute force attack)と「辞書攻撃」(dictionary attack)の二つがある。

 総当り攻撃は,文字通り可能性のありそうなパスワードを一つずつすべての組み合わせについて調べていく解読手法だ。通常,OSやサーバー・ソフトはユーザーのパスワードをそのままの文字列ではなく,ハッシュ値に変換して格納している。ユーザーがログインする際にパスワードを入力すると,ハッシュ値を計算して登録済みのハッシュ値と比較し,一致したらログインを許可するという具合に使う。パスワード解読では,このハッシュ値をパソコンから読み出して解読を試みる。

 総当り攻撃では,パソコンから読み出したハッシュ値と同じ値が得られる元の文字列をひたすら計算して探す。単純で何の工夫もない解読方法だが,時間さえかければ必ず解読できる。

 ただし,「時間さえかければ解読できる」と「実際に解読できる」は別問題である。パスワードが十分長ければ,試す必要がある文字種の組み合わせは膨大な量になる。パソコンの処理能力で解読に何年もかかるなら,現実には解読できないのと同じこと。いくら勉強ができても,夏休みの宿題を最終日にすべて自力で解くのは現実には無理だ(図1)。

 もう一つの辞書攻撃は,あらかじめ用意したさまざまな単語を収めた辞書データを使う。辞書を基にピンポイントでハッシュ値を計算し,パソコンが持っているハッシュ値と比較する。辞書に載っている単語をパスワードとして使っていると,またたく間に解読されてしまう。

 レインボー・クラックも,可能性のあるすべての文字種の組み合わせからパスワードを調べるという点では総当り攻撃と同じ。違うのは,総当り攻撃のようにハッシュ値をその場で計算するのではなく,あらかじめ計算しておいた「レインボー・テーブル」と呼ぶ巨大なファイルを使うという点。

 一般に,コンピュータはハッシュ値を計算するよりも,ファイル中に同じ文字列がないかを照合する作業の方が圧倒的に高速に処理できる。レインボー・クラックはこの特徴を利用している。解答済みの過去の宿題ノートをたくさん用意しておいて同じ問題を探した方が,いちいち解くよりずっと早いというわけだ(図2)。

 確かに,可能な文字種の組み合わせをあまねく収めるため,レインボー・テーブルは非常に大きなサイズになる。ごく単純なアルファベット大文字と数字の組み合わせでも,パスワードの長さによるものの通常数百Mバイト,記号まで含めたフルスペックのテーブルになると数G~数十Gバイトものサイズになる。昔ならこんなデータはとても扱えなかったが,今ではパソコンで普通に扱えるサイズ。技術の進歩がレインボー・クラックの脅威を現実のものにしたわけだ。

 レインボー・クラックの存在により,標準的なWindowsパソコン(Vistaは対応済み)では,ちょっと目を離した隙にパスワードを盗まれてしまう可能性がある。不特定多数が出入りする場所にある普通のWindowsパソコンに重要なデータを入れておくのは非常に危険なのだ。