web-dev-qa-db-ja.com

レインボーテーブルとは何ですか?どのように使用されますか?

どこにありますか?最後に金の壺はありますか?
それらからどのように保護しますか?


Area51プロポーザル から

この質問は今週のITセキュリティ質問でした。
詳細については、2011年9月9日ブログエントリをお読みください。または自分で送信今週の質問。

149
AviD

レインボーテーブルは、パスワードの回復における計算時間とストレージのトレードオフであるハッシュテーブルを活用する別の簡単な手法と混同されることがよくあります。

ハッシュテーブルは、各ワードをパスワードディクショナリでハッシュすることによって構築されます。パスワードとハッシュのペアは、ハッシュ値でソートされたテーブルに格納されます。ハッシュテーブルを使用するには、ハッシュを取得し、テーブルでバイナリ検索を実行して、元のパスワードが存在する場合はそれを見つけます。

レインボーテーブルはより複雑です。レインボーテーブルを作成するには、ハッシュ関数とリダクション関数の2つが必要です。レインボーテーブルの特定のセットのハッシュ関数は、回復するハッシュ化されたパスワードと一致する必要があります。リダクション関数は、ハッシュをパスワードとして使用可能なものに変換する必要があります。単純なリダクション関数は、ハッシュをBase64エンコードし、特定の文字数に切り捨てます。

レインボーテーブルは、特定の長さ(たとえば100,000)の「チェーン」で構成されています。チェーンを構築するには、ランダムなシード値を選択します。次に、このシードとその出力にハッシュ関数と削減関数を適用し、100,000回繰り返します。シードと最終値のみが保存されます。このプロセスを繰り返して、必要な数のチェーンを作成します。

Rainbow Tablesを使用してパスワードを回復するために、パスワードハッシュは同じ長さの上記のプロセスを受けます。この場合、100,000ですが、チェーン内の各リンクは保持されます。チェーン内の各リンクは、各チェーンの最終的な値と比較されます。一致がある場合、チェーンは再構築され、各ハッシュ関数の出力と各リダクション関数の出力の両方が保持されます。その再構築されたチェーンには、問題のパスワードのハッシュと、それを生成したパスワードが含まれます。

ハッシュテーブルの強みは、パスワードの回復が非常に速く(バイナリ検索)、ハッシュテーブルを作成する人は、上位10,000個のパスワードなど、それに入るものを選択できることです。レインボーテーブルと比較した場合の弱点は、ハッシュテーブルがすべてのハッシュとパスワードのペアをすべて格納する必要があることです。

レインボーテーブルには、各チェーンのリンク数を選択することで、テーブルを作成する人が必要なストレージの量を選択できるという利点があります。シードと最終値の間のリンクが多いほど、より多くのパスワードがキャプチャされます。弱点の1つは、チェーンを作成する人がキャプチャしたパスワードを選択しないため、レインボーテーブルを一般的なパスワード用に最適化できないことです。また、パスワードの回復には、ハッシュの長いチェーンの計算が含まれるため、回復にコストがかかります。チェーンが長くなるほど、より多くのパスワードがチェーンに取り込まれますが、内部でパスワードを見つけるのに時間がかかります。

ハッシュテーブルは一般的なパスワードに適しており、レインボーテーブルは厳しいパスワードに適しています。最善の方法は、ハッシュテーブルや、上位N個のパスワードの辞書を使用した従来のクラッキングを使用して、できるだけ多くのパスワードを回復することです。残っている場合は、レインボーテーブルを使用してください。

180
Crunge

Rainbowテーブルが何であるかについては多くの良い説明がありますが、これは Rainbow Tableのしくみ が特に優れています。また Wikipediaの記事 にも非常に良い説明があります。もう少し詳しくは、このテーマに関する決定的な論文を 高速な暗号化時間とメモリのトレードオフにする を参照してください。

レインボーテーブルの簡単な説明は、時間メモリのトレードオフ手法を利用していることです。ターゲットのハッシュ値と単語の辞書を取得して各単語をハッシュし、その場で比較を行う(つまり John のようなものを使用したブルートフォースアプローチ)代わりに、辞書のすべての値をハッシュします事前(辞書のサイズによっては非常に長い時間がかかる場合があります)。しかし、それが完了すると、Rainbowテーブルの事前にハッシュされた値に対して必要な数のハッシュを比較できます。これは、ハッシュを再度計算するよりもはるかに高速です。

簡潔にするためにここで以前に書いた説明は、Rainbowテーブルが使用するリダクションの使用を説明していなかったため、誤解を招くものでした。このビットを書き換えるまでのより良い説明については @ Crunge answer を参照してください。

RainbowCrack のようなアプリケーションを使用してレインボーテーブルを自分で生成するか、または The Shmoo GroupFree Rainbow Tables プロジェクトのようなソースからダウンロードすることができます。ウェブサイト、 Ophcrack プロジェクト、およびテーブルが必要なハッシュのタイプに応じて、他の多くの場所。

レインボーテーブルベースの攻撃から保護するための最も効果的な方法は、システム内のすべてのハッシュが salted であることを確認することです。これにより、事前に生成されたRainbowテーブルが役に立たなくなり、攻撃者はターゲットのハッシュに対して使用するカスタムテーブルセットを生成する必要があります。これは、ソルトを知っている場合にのみ可能です。

15
Mark Davidson