0

パスワードごとに異なるソルトでパスワードを保存する方が安全なのはなぜですか?パスワードはソルトされた後にハッシュされるため、別のソルトを使用する理由はありません。

既知のソルトなどを使用してパスワードをブルートフォースする方が簡単ですか?それとも、ハッカーは塩を知ったら自分でレインボーテーブルを作りますか?

敬具

4

3 に答える 3

3

各パスワードに独自のソルトを与えると、すべてのパスワードのすべてのソルト間に共通の結合はありません。したがって、「ハッカー」が1つのパスワードを解読したとしても、他のパスワードのソルトはありません。

PHPを使用してパスワードをソルトする場合は、cryptなどの低速の暗号化を使用する必要があります。何かを暗号化する速度が速いほど、「ハッカー」はそれを復号化する方法をすばやく見つけることができます。

単純に、ユーザー名、電子メール、またはいくつかの組み合わせに基づいて新しいソルトを作成する関数を作成できます。

于 2012-07-04T15:07:53.990 に答える
2

ソルトを1つだけ使用する場合、ハッカーはレインボーテーブルを1回再構築するだけで、データベース全体に使用できます。重複するパスワードも見つけやすくなります。

個別のハッシュと高価なアルゴリズム(bcrypt、scrypt)を使用します。

于 2012-07-04T15:12:35.503 に答える
1

わかりました。1つ簡単に説明しましょう。塩漬けはレインボーテーブルとは何の関係もありません。はい。もう一度言ってください。塩漬けはレインボーテーブルとは何の関係もありません。

まあ、それは完全に真実ではありません。ソルトは、1つのハッシュを攻撃するコストを他のハッシュのコストに対して償却することにより、時間とメモリのトレードオフを防ぐために使用されます。

レインボーテーブルの場合、ソルトを使用すると、テーブル全体が無効になります。

ただし、テーブル全体を無効にする方法は他にもあります。各パスワードに静的な文字列を追加できます(これはソルトではありません)。それはレインボーテーブルを打ち負かすでしょう...

本当の敵

ここでの本当の敵はレインボーテーブルではありません。本当の敵はブルートフォースです。現代のマシンはブルートフォーシングが非常に高速であるため、低速のディスクアクセスに見合うだけの十分なレインボーテーブルを格納するよりも、巨大なGPUクラスターを構築して高度なブルートフォーシングを実行する方が安価です。

塩はユニークなので、ブルートフォーシングを打ち負かすのに役立ちます。パスワードごとではありません。ユーザーごとではありませんが、(少なくとも統計的には)ユニバースで一意です。これが、ユーザー名、電子メール、または予測可能なものではなく、乱数を使用する理由です。

繰り返しますが、予測可能性が必要ないからではありません。しかし、統計的な一意性が必要なためです。攻撃者が両方ともユーザー名をソルトとして使用する2つのサイトを攻撃した場合、攻撃者は両方のハッシュに対する攻撃を同時に償却できます(両方が異なるパスワードを使用している場合でも)。

ソルトはランダムで、ユーザーごとに設定する必要があります。

于 2013-06-21T01:41:55.017 に答える