サーバー側でBCryptを使用してパスワードをハッシュしています。 MySQLデータベースに保存する前に、ハッシュされたBCryptパスワードを暗号化するのはやり過ぎですか、またはハッシュをデータベースに直接保存するだけで十分でしょうか?
これ website は、パスワードをハッシュ化した後で暗号化することをお勧めします
攻撃者がハッシュを使用してパスワードの推測が正しいか間違っているかを確認できる限り、ハッシュに対して辞書攻撃またはブルートフォース攻撃を実行できます。次のステップは、ハッシュに秘密鍵を追加して、鍵を知っている人だけがハッシュを使用してパスワードを検証できるようにすることです。これには2つの方法があります。ハッシュは、AESなどの暗号を使用して暗号化するか、HMACなどのキー付きハッシュアルゴリズムを使用してハッシュに秘密鍵を含めることができます。
私はJavaでコーディングしています。ユーザー保護のために追加された保護レイヤーとパスワードの読み取りと取得の速度パフォーマンスの対比が価値があるかどうかを測定しようとしています。
このような追加のシークレットを追加し、理想的には、それを an HSM に安全に保存することは、実際に通常の方法です。 commonではありません。多くのプラットフォームでは、ハッシュだけが使用されています(多くの場合、bcryptよりもハッシュが貧弱です)。しかし、レイヤーを追加すると、攻撃者にとっては間違いなく事態が困難になります。
さらにいくつかのアドバイス:実装のロールはできるだけ少なくしてください。代わりに、できる限り多くの暗号化を実行するために確立されたライブラリを見つけてください(正しく理解するのは難しいため、間違いを犯すことは非常に悪い場合があるためです)。
Bcryptにはいくつかの制限があることに注意してください。特に、プレーンテキストの最大長は72バイトです。また、メモリはハードではないため、多数のコアが並列に接続された(比較的)低コストの専用ハードウェアで攻撃される可能性があります。最新のオプション-scryptとArgon2ファミリー-は、低メモリ並列化に耐性があります。それらのよくできた実装を探してください。また、ユーザー(および予測されるハードウェア)が許容できる限り高い作業要素コストでbcryptを使用します(多くの場合、コスト12は損益分岐点に近づき始めますが、YMMV;ハードウェアでテストします)。