オンライン システム (PHP で記述されたフロント エンドですが、あまり関連性がありません) は、ローカルのシステム管理者がデータを表示できないように、またデータベースが盗まれた場合にデータを表示できないように、暗号化された MySQL データベースにテキストを格納する必要があります。システムには、データにアクセスする必要がある複数のユーザーがいます。これらのユーザーは、標準のセットアップ (つまり、同じデータベース内のユーザー名とハッシュ化されたパスワード) を介してログイン/認証します。
保存されたデータは、認証されたユーザーに表示するためにシステムによって復号化される必要がありますが、ローカルのシステム管理者は同じデータを復号化する方法を持ってはならないため、明らかな方法は、保存されたデータを暗号化/復号化するために使用される秘密鍵を持つことです。対称暗号を使用したデータ。問題 (実際に私がアドバイスを求めている質問) は、このキーをどのように/どこに保管するかです。
認証されたユーザーはキーに直接アクセスできないため、何らかの方法でシステム内に保存し、保存されたファイルをオンデマンドで復号化するためにソフトウェアで使用する必要がありますが、ローカルのシステム管理者はこのキーを学習できてはなりません。それを使用して、保存されたデータを復号化します。
そのため、キーを暗号化してデータベースに保存する方法もありますが、システムがキーを解読してユーザーごとに使用するには、認証されたユーザーに固有のもの (パスワードなど) に対してキーを暗号化する必要があります。さて、ここまでは順調ですが、問題があります...
キーを変更する必要がある場合はどうすればよいですか? キーを変更する人は、すべてのユーザー アカウントに対して新しいキーを暗号化できるように全員のパスワードを知っている必要があるか (非現実的)、新しいキーを各ユーザーに渡して再入力するように依頼する必要があります (オプション)。
また、セキュリティの観点から、このキーをデータベースに n 回 (n はユーザー数) 効果的に保存し、異なるキー (ユーザー パスワード) で暗号化することは良い考えですか? つまり、潜在的なハッカーに同じ暗号化されたデータの複数の例を提供することで、鍵がさらに公開されるのでしょうか?
より良い方法はありますか?