私はソルトとパスワードハッシュに関するいくつかの記事を読んでいて、数人の人々がレインボー攻撃について言及していました。レインボーアタックとは正確には何ですか?それを防ぐための最良の方法は何ですか?
7 に答える
ウィキペディアの記事は少し理解しにくいです。一言で言えば、レインボーテーブルは、事前に計算されたハッシュとそれらが計算されたパスワードを備えた大きな辞書と考えることができます。
レインボーテーブルと他のディクショナリの違いは、エントリの保存方法にあります。レインボーテーブルはハッシュとパスワード用に最適化されているため、優れたルックアップ速度を維持しながら、優れたスペース最適化を実現します。しかし、本質的には、それは単なる辞書です。
攻撃者があなたからパスワードハッシュの長いリストを盗んだ場合、攻撃者はそれらのいずれかがレインボーテーブルにあるかどうかをすばやく確認できます。その場合、Rainbow Tableには、ハッシュ元の文字列も含まれます。
もちろん、すべてをレインボーテーブルに格納するにはハッシュが多すぎます。したがって、ハッシュが特定のテーブルにない場合、ハッカーは運が悪いです。ただし、ユーザーが単純な英語の単語を使用していて、それらを1回だけハッシュした場合は、優れたレインボーテーブルにパスワードが含まれている可能性が高くなります。
誰かがRainbowテーブルを使用してパスワードを解読するときです。
これが心配な場合は、Saltを使用する必要があります。ウィキペディアよりも塩を少しよく理解するのに役立つかもしれないスタックオーバーローの質問もあります...
これは、一般の人にとってレインボーテーブルに関する有用な記事です。(あなたが素人であることを示唆しているわけではありませんが、それはよく書かれていて簡潔です。)
パーティーに遅れましたが、RainbowTablesがハッシュ化された/無塩のパスワードに対する攻撃の方法であることも知っていました。ただし、最近Twitterでhttp://codahale.com/how-to-safely-store-a-password/が共有され、ニーズや懸念事項によっては、安全なパスワードストレージへの道を切り開くことができない場合があります。
これがあなたにとって有益であることを願っています。
大まかに言えば、膨大な数の可能な短い平文文字列(つまり、パスワード用)を暗号化し、暗号化された値を平文と一緒に保存します。これにより、暗号化された値がある場合に、プレーンテキストを(比較的)簡単に検索できます。
これは、弱いパスワードハッシュや無塩のパスワードハッシュに最も役立ちます。一般的な例は、LANマネージャーハッシュです。これは、XPまでのバージョンのWindowsでユーザーパスワードを保存するために使用されます。
LMハッシュのような単純なものでも事前に計算されたレインボーテーブルは、生成に多くのCPU時間を要し、かなりのスペース(数十ギガバイトのIIRC)を占有することに注意してください。
レインボーテーブルを使用すると、基本的に、事前に計算された多数のハッシュを実行可能に保存できます。
これにより、ハッシュされたパスワードを簡単に解読できます。これは、ハッシュ関数のヒープ全体を実行する代わりに、作業がすでに完了しており、事実上、データベース検索を実行するだけでよいためです。
この種の攻撃に対する最善の保護は、パスワードにソルト(ランダムな文字)を使用することです。つまり、md5(パスワード)を保存する代わりに、md5(パスワード+ソルト)、またはさらに良いmd5(ソルト+ md5(パスワード))を保存します。
レインボーテーブルを使用しても、可能なすべての塩漬けハッシュを保存することはほぼ不可能になります。
ところで、明らかに、ユーザーを認証できるように、ソルトをハッシュと一緒に保存する必要があります。
ウィキペディアはあなたの友達です: