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