2009-07-13 9 views
1

ユーザーがあなたのサイトに登録したとすると、選択したパスワードをハッシュし、そのハッシュをソルトとして使用し、そのソルトでパスワードを再ハッシュします。あなたは塩としてハッシュしているもののハッシュを使用していますか?

例:

String hash1 = MD5(password); 
String endHash = MD5(hash1 + password); 

その後、データベースに格納さendHash。私のデータベースが妥協した場合、この効果的なレインボーテーブルが攻撃を受けますか?それとも、簡単に壊すことができるものがないのでしょうか?

+0

考えられているこれが最初のルールでなければなりませんセキュリティプロトコルを扱う:巧みにしようとしないでください、あなたはそれを壊すだけです。 ランダムな塩を使用してください。ユーザー名ではありません。何のハッシュでもありません。ちょうどランダムなデータ。 – Nefrubyr

答えて

7

これはキーの強化(http://en.wikipedia.org/wiki/Key_strengthening)ですが、実際の塩の代わりに使用することはできません。このダブルハッシュ関数で書かれた虹のテーブルからあなたを守ることはできません。

+0

情報をありがとう、そこに塩を追加します。 –

0

違いはありません:保存されているデータは、依然としてパスワードのみに基づいているため、追加の保護はありません。

+2

従来のレインボーテーブルが失敗し、カスタムテーブルが生成するのに2倍の時間がかかるという点で、いくつかの追加の保護があります。しかし、もちろん、あなたはそれが塩のやり方を保護していないのは正しいと思います。 –

5

ソルトのポイントは、巨大な事前計算テーブルの使用を防ぐことです。この方法では、データベースにアクセスする必要なく、すべてのパスワードのハッシュを計算することができます。ランダムな値を格納し、パスワードとその値を一緒にハッシュする必要があります。

0

また、SHA1、SHA-256、SHA-512など、現在強力なハッシュアルゴリズムを使用するMD5を避ける必要があります。

+0

私は、MD5を例として使っています。これは最も広く知られているためです。 –

1

ハッシュ化されたパスワードの弱点は、ハッシュ関数の攻撃者の知識です。彼らがあなたのハッシュ関数を知っていてもあなたの塩は知っていなければ、塩はあなたのパスワードを保護しています。彼らがハッシュ関数とあなたの塩の両方を知っているなら、あなたのデータは危険にさらされています。

これはあなたの質問にも当てはまります - ダイナミックソルトを使用すると、一般的にあなたの塩を把握することが難しくなります。これによりセキュリティが強化されますが、誰かがあなたのアルゴリズムを知っていれば助けになりません。

このように複雑さを増やすと、システムをクラッキングするのが難しくなります。しかし、十分な資源を与えられれば、何の不利益もありません。

+1

この塩は、選択したパスワードスキームのセキュリティを損なうことなく、完全に公開することができます。このソルトの主な仕事は、事前生成されたレインボーテーブルの使用を防ぎ、パスワードごとに新しいカスタムレインボーテーブルの生成を防止することではありません。 – RoadWarrior

1

の代わりに、関数のための塩としてユーザー名を使用する必要があります2回のハッシング:あなたはまた、MD5などさまざまな機能を使用することを検討すべきである

String hash = MD5(username + password) 

が壊れMD5

関連する問題