2

オンライン システム (PHP で記述されたフロント エンドですが、あまり関連性がありません) は、ローカルのシステム管理者がデータを表示できないように、またデータベースが盗まれた場合にデータを表示できないように、暗号化された MySQL データベースにテキストを格納する必要があります。システムには、データにアクセスする必要がある複数のユーザーがいます。これらのユーザーは、標準のセットアップ (つまり、同じデータベース内のユーザー名とハッシュ化されたパスワード) を介してログイン/認証します。

保存されたデータは、認証されたユーザーに表示するためにシステムによって復号化される必要がありますが、ローカルのシステム管理者は同じデータを復号化する方法を持ってはならないため、明らかな方法は、保存されたデータを暗号化/復号化するために使用される秘密鍵を持つことです。対称暗号を使用したデータ。問題 (実際に私がアドバイスを求めている質問) は、このキーをどのように/どこに保管するかです。

認証されたユーザーはキーに直接アクセスできないため、何らかの方法でシステム内に保存し、保存されたファイルをオンデマンドで復号化するためにソフトウェアで使用する必要がありますが、ローカルのシステム管理者はこのキーを学習できてはなりません。それを使用して、保存されたデータを復号化します。

そのため、キーを暗号化してデータベースに保存する方法もありますが、システムがキーを解読してユーザーごとに使用するには、認証されたユーザーに固有のもの (パスワードなど) に対してキーを暗号化する必要があります。さて、ここまでは順調ですが、問題があります...

キーを変更する必要がある場合はどうすればよいですか? キーを変更する人は、すべてのユーザー アカウントに対して新しいキーを暗号化できるように全員のパスワードを知っている必要があるか (非現実的)、新しいキーを各ユーザーに渡して再入力するように依頼する必要があります (オプション)。

また、セキュリティの観点から、このキーをデータベースに n 回 (n はユーザー数) 効果的に保存し、異なるキー (ユーザー パスワード) で暗号化することは良い考えですか? つまり、潜在的なハッカーに同じ暗号化されたデータの複数の例を提供することで、鍵がさらに公開されるのでしょうか?

より良い方法はありますか?

4

2 に答える 2

3

Tom Leak の投稿を教えてくれた jonrsharpe に感謝します: https://security.stackexchange.com/a/71915

次のように、この方法に基づいてシステムを構築します。

  • ドキュメントは、対称暗号を使用して暗号化されたテーブルに格納されます。

  • 上記の対称暗号の秘密鍵は、ドキュメントにアクセスできるユーザーごとに 1 回、別のテーブルに格納され、ユーザーの公開鍵を使用して非対称暗号を使用して暗号化されます。

  • ユーザーの秘密鍵は、対称暗号を使用して暗号化された別のテーブルに格納されます。この鍵は、ユーザーのパスワードです。

これは、ドキュメント キー テーブル内のそのユーザーのエントリを削除するだけで、ドキュメントへのアクセスを取り消すことができることを意味します。ドキュメントが変更された場合、システムはキー テーブル内のドキュメントのすべてのエントリを削除してから、各ユーザーの公開鍵で暗号化してそれらを再度追加する必要があります。ユーザーの公開鍵を使用して暗号化するドキュメント キー テーブルにエントリを追加するだけで、追加のユーザーにアクセス権を付与できます。ドキュメントにアクセスできるユーザーは、自分の秘密鍵を使用してドキュメントの秘密鍵を解読できます。この秘密鍵は、自分のパスワードを使用して解読されます。

必要なものだけです!

于 2017-07-05T15:15:20.220 に答える