MySQLを使用してDjangoWebサイトを構築しています。ユーザーのパスワードを保存するために、ランダムに生成されたソルトハッシュを備えたDjangoの組み込みpbkdf2-sha256を使用することをすでに決定しました。
ただし、このWebサイトには、他の多くのWebサイト(oauthを使用しない)のサードパーティのログイン資格情報も保存する必要があります。そこで私はAES-256暗号化を検討していましたが、もちろん問題は暗号化キーを安全に保管する場所になります。
これが私の解決策です。各暗号化キー=ユーザーの実際のパスワードのハッシュとランダムに生成されたソルト(パスワードに保存されたハッシュにすでに使用されているソルトとは異なります)とします。ソルトはテーブルに保存されますが、実際のパスワードとそのハッシュは明らかに保存されません。したがって、暗号化キーはログイン時に生成され、一時的に保存されますが、ログアウト時に期限切れになります。さらに、サーバーを危険にさらす誰かが、元のpbkdf2-sha256ハッシュを解読せずに暗号化キーを生成することはできません。それでも、ユニバーサルキーではなく、その1人のユーザーのみが使用できます。
欠点は、パスワードを変更/リセットした場合、サイトごとに資格情報を再入力する必要があることです。しかし、それは大したことではなく、サーバーのどこかにキーを保存したり、別のサーバーに保存したりするよりもはるかに安全なようです。
しかし、私は24時間前にハッシュが何であるかを知っただけなので、私は何を知っていますか。私は何かを見落としていますか、それともこれはかなり安全ですか?それとももっと良い方法はありますか?