web-dev-qa-db-ja.com

暗号化されたデータをPostgresに保存する

Postgresで特定のデータを暗号化された形式で保存する必要があります。明らかに、私はそれを暗号化して保存し、それを読み取って解読できるようにする必要があります。これを行う最良の方法は何ですか?

34
Joe

bestの方法は、クライアントまたはアプリケーションサーバーで暗号化を行うことです。そのため、データベースはキーが何であるかを認識しておらず、データを復号化できません。クライアント/アプリサーバーが別のホスト上にある場合は、なお良いでしょう。

データベースがデータを暗号化および復号化している場合、データベースと共にキーが盗まれる脆弱性があります。

Pgcryptoのデータベース内の暗号化関数を使用する場合、アプリケーションにデータと一緒にキーを送信させることができます。これは、少なくともある程度は役立ちます。ただし、役立つシステム管理者が積極的なステートメントロギングまたは自動プランダンプをオンにすると、キーがログに公開されるリスクがあり、最終的に、キーがデータベースマシンに送信されると、キーが脆弱でない場合よりも脆弱になります。 。データベースマシンを制御する攻撃者は、ログ設定を変更したり、postgresqlバイナリを置き換えたり、トラフィックを傍受して、この方法でキーとデータをキャプチャすることもできます。

Appserverとdbが同じマシン上にあり、同じロールによって管理されている場合、それらを分離することについて心配する必要はほとんどなく、pgcryptoを使用するのが賢明な場合があります。

いずれにせよ、塩を忘れないでください!

37
Craig Ringer