私はウィキから読みました:
攻撃者はハッシュされたパスワードとソルトの両方にアクセスできるため、辞書攻撃を実行すると、攻撃者はパスワードを解読しようとするときに既知のソルトを使用することができます。
2つの質問があります:
攻撃者が(ソルト+パスワードの)ハッシュを取得できる場合、ソルトも取得できると想定されます。これは、通常、同じデータベーステーブルの別の列など、同じ場所に格納されているためです。 、または、たとえば* Nix crypt
関数から表示される単一の複合値として。
そうです、攻撃者はボットにハッシュとソルトを取得します。ただし、塩は(設計上)秘密にする必要がないため、これは問題ではありません。したがって、攻撃者がそれを取得できるという事実は、システムのセキュリティを設計された強度よりも弱めることはありません。
明らかに、攻撃者が保存されたハッシュにアクセスできないようにすることが望ましいです。アクセス拒否が失敗した後の次の防衛線はハッシュです。 when攻撃者がデータベースをダンプした場合、平文を発見するためにハッシュに対して辞書攻撃を実行する必要があります。
ソルトが防ぐのは、事前にコンパイルされた「辞書」、別名「レインボーテーブル」の使用です。ソルトがない場合、または普遍的に一定のソルトがある場合(同じこと)、メッセージとそのハッシュを記憶して保存し、一致するハッシュを検索するだけで、ハッシュを計算するためのこれまでのすべての作業を再利用できます。ただし、ハッシュ値ごとに一意のランダムソルトを使用すると、作業を再利用できなくなります。メッセージにはその特定のソルト値を含める必要があり、攻撃者がレインボーテーブルで機能するメッセージを見つける可能性はほとんどありません。
はい、攻撃者は塩を手に入れることができます。ハッシュを検証しようとするすべてのマシンで利用可能でなければならないため、技術的には「公開」情報です。 Xanderが言ったように、通常は同じデータベースの別の列に格納されるか、ハッシュダイジェスト自体に文字エンコードされたバイト数として先頭に追加されます。