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