私が行っていたのは、実際にはパスワードをソルトするのではなく、パスワードをペッパー化することであることがわかったという議論に出くわしました。
hash_function($salt.hash_function($pepper.$password)) [multiple iterations]
選択したハッシュ アルゴリズムを無視する (特定のアルゴリズムではなく、塩とコショウについての議論にしたいのですが、安全なアルゴリズムを使用しています)、これは安全なオプションですか、それとも別のことをする必要がありますか? 用語に慣れていない人のために:
ソルトはランダムに生成された値で、通常はハッシュ テーブルを使用してパスワードをクラックできないように設計されたデータベースに文字列と共に格納されます。各パスワードには独自のソルトがあるため、解読するには、すべてのパスワードを個別に総当たり攻撃する必要があります。ただし、salt はパスワード ハッシュと共にデータベースに保存されるため、データベースの侵害は両方を失うことを意味します。
ペッパーは、データベース (通常はアプリケーションのソース コードにハードコードされている) とは別に保存されるサイト全体の静的な値であり、秘密にすることを目的としています。これは、データベースが侵害されても、アプリケーションのパスワード テーブル全体がブルート フォース可能にならないようにするために使用されます。
不足しているものはありますか? ユーザーのセキュリティを保護するための最良のオプションは、パスワードのソルティング & ペッパーですか? このようにすることで潜在的なセキュリティ上の欠陥はありますか?
注: アプリケーションとデータベースは別々のマシンに保存され、パスワードなどを共有しないことを前提として説明します。したがって、データベース サーバーの侵害が自動的にアプリケーション サーバーの侵害を意味するわけではありません。