サーバーが危険にさらされた場合に安全になるように、サーバーに保存するユーザー データを暗号化したいと考えています。それを行うには、次の方法が適切ですか。
各ユーザーのパスワードは、GPG キーペアへのパスフレーズです。ユーザーのすべてのデータは、データベースに保存される前に公開鍵を使用して暗号化されます。パスワードは破棄され、鍵ペアはセッションの間だけ保持されるため、パスワードが提供された場合にのみデータを復号化できます。
サーバーが危険にさらされた場合に安全になるように、サーバーに保存するユーザー データを暗号化したいと考えています。それを行うには、次の方法が適切ですか。
各ユーザーのパスワードは、GPG キーペアへのパスフレーズです。ユーザーのすべてのデータは、データベースに保存される前に公開鍵を使用して暗号化されます。パスワードは破棄され、鍵ペアはセッションの間だけ保持されるため、パスワードが提供された場合にのみデータを復号化できます。
サーバーを侵害する誰かの観点から見ると、データが安全であることを確認する唯一の方法は、ユーザーが毎回復号化するためのキーを提供する必要がある場合の方法です。
他の手法では、悪用される可能性のある弱点が残ります。
ただし、別の方法 (つまり、ユーザーがパスワードを提供するとき) も安全であることを確認する必要があります。https を使用し、セッション攻撃、クロススクリプティングなどを防止します。
時間に基づいて疑似乱数を生成するとき (銀行のトークンのように) など、追加の保護を行うための特定のハードウェアがない場合は、鍵をユーザーに保管するか、 Azure または Amazon 上の SQL のように、セキュリティが強化されたサード パーティのストレージを使用します。
サーバーが危険にさらされた場合でも、暗号化キーをどこに配置してデータを不明瞭にするかをよく考えた後、同じアプローチを使用しました。私が見つけた唯一の安全な方法は、「ユーザーと一緒に」でした。
あなたのアプローチは、データベースを盗むという 1 つの攻撃だけから保護します (キーを適切に暗号化した場合のみ)。サーバーが侵害された場合、彼らはあなたの ssl 秘密鍵を取得し、ネットワーク トラフィックをリッスンできます (ユーザーの鍵を使用)