web-dev-qa-db-ja.com

pgcryptoによる暗号化

pgcryptoを使用してpostgreテーブルの列を暗号化しています。 postgreのバージョンは9.5.1です。 pgp_sym_encrypt()を使用して暗号化し、pgp_sym_decrypt()を使用して復号化する方法を理解しました。私の問題は、キーを非表示にしておく方法を理解することです。

返されたデータをアプリケーションで復号化しないようにしています。このテーブルのデータは、誰かがテーブル全体(450,000行)を表示してデータをまとめることができる場合にのみ機密性が高いため、復号化されたアプリケーションにデータを返すことができます。

PgAdminでは、クエリにこれがあります

 SELECT pgp_sym_decrypt(column1,'password')

当然のことながら、アプリケーションが使用するクエリテンプレートにパスワードを格納し、クエリが実行されるたびに渡すようにしたくありません。何かアイデアをいただければ幸いです。

4
Jason

サーバーでの対称暗号化の欠点を回避する方法はありません。

「アプリケーションの復号化を回避する」には、PostgreSQLが鍵と暗号化されたデータにアクセスして復号化する必要があります。それを実行できるソースは2つしかありません。

  1. 消費者
  2. データベース(この場合、ログファイルにも書き込まれます)

もちろん、ウェブサーバーなどのデータへのアクセスポイントが1つしかない場合は、そこでも暗号化を解除して、キーをサーバーから切り離すことができます。

2
Evan Carroll

それで、私は好奇心が強いです、あなたは結局何をしましたか?

上記の好奇心を満たすためにコメントを回答に変換しています... :)


Iiが誤解しない限り:

アプリケーションがそのテーブルに対する行レベルの特権を持っていると仮定すると、使用できます

_SELECT pgp_sym_decrypt( column1, get_pswd(pkey) ) 
_

ここで、get_pswd(pkey)は、特定のpkey行のパスワードを選択します。

また、各行のpkeyとパスワードを、アプリケーションが選択権限を持たない別のテーブルに保存できます。

0
amacvar