Postgresで特定のデータを暗号化された形式で保存する必要があります。明らかに、私はそれを暗号化して保存し、それを読み取って解読できるようにする必要があります。これを行う最良の方法は何ですか?
bestの方法は、クライアントまたはアプリケーションサーバーで暗号化を行うことです。そのため、データベースはキーが何であるかを認識しておらず、データを復号化できません。クライアント/アプリサーバーが別のホスト上にある場合は、なお良いでしょう。
データベースがデータを暗号化および復号化している場合、データベースと共にキーが盗まれる脆弱性があります。
Pgcryptoのデータベース内の暗号化関数を使用する場合、アプリケーションにデータと一緒にキーを送信させることができます。これは、少なくともある程度は役立ちます。ただし、役立つシステム管理者が積極的なステートメントロギングまたは自動プランダンプをオンにすると、キーがログに公開されるリスクがあり、最終的に、キーがデータベースマシンに送信されると、キーが脆弱でない場合よりも脆弱になります。 。データベースマシンを制御する攻撃者は、ログ設定を変更したり、postgresqlバイナリを置き換えたり、トラフィックを傍受して、この方法でキーとデータをキャプチャすることもできます。
Appserverとdbが同じマシン上にあり、同じロールによって管理されている場合、それらを分離することについて心配する必要はほとんどなく、pgcryptoを使用するのが賢明な場合があります。
いずれにせよ、塩を忘れないでください!