サイト内の現在位置

PostgreSQL

PostgreSQLの暗号化を手軽に実現する方法とは?

~アプリケーションの改修コストを抑えてPostgreSQL内のデータを暗号化する透過的暗号化製品について~

近年、重要なシステムでも使われることの増えてきたPostgreSQL 。
格納されるデータも機密性の高いものになり、PostgreSQLにおける情報漏洩対策の必要性が高まっています。
いくつかある情報漏洩対策の中でも、法改正や内部犯行による情報漏洩事件の増加から、暗号化の対応が求めらるケースが増えています。

「データベースにPostgreSQLを採用すると決めたものの、情報漏洩対策はどうすればいいのか?」
また「利用しているPostgreSQLに対して暗号化をする必要が出てきたが、どんな方法があるのか?」といったお悩みをお持ちではありませんか?

この記事ではPostgreSQLにおける暗号化方法の比較と、アプリケーションの修正コストを抑えた暗号化を実現する透過的暗号化製品についてご説明しています。

目次

PostgreSQLを暗号化する必要性

情報漏洩対策の中でも暗号化が重要視される理由

情報漏洩対策の必要性は言うまでもありませんが、2022年4月より「改正個人情報保護法」が全面施行されたことでデータの暗号化に対する関心が高まっています。
今回の法改正により、個人情報を扱う事業者はデータの暗号化が義務付けられたためです。
また、高度な暗号化技術を施している場合、情報漏洩事故が起きても報告義務が発生しないことになっているため、情報漏洩対策として暗号化を検討する方が増えています。

PostgreSQLの暗号化の必要性

PostgreSQLの情報漏洩対策としても暗号化は有効です。
データベースのセキュリティ対策としては、監査やアクセス管理など様々な観点がありますが、暗号化はデータベース管理者によるデータの持ち出しや、物理的なディスクの盗難などからも大切なデータを守ることができます。
重要なシステムでの採用が進むPostgreSQLにおいても、個人情報など機密性の高いデータを扱う場合は暗号化が必須要件となることも少なくありません。

PostgreSQLの暗号化方法の比較

OSSのPostgreSQLの暗号化手法としては、PostgreSQLのcontribパッケージをインストールすることで利用できる拡張機能のpgcryptoを使用する方法と、Transparent Data Encryption for PostgreSQL(以下TDE for PGとします)というソフトウェアを使用する方法があります。
pgcryptoは、アプリケーション側に大きく修正を入れる必要があり対応コストがかかるほか、暗号キーの管理などの手間もかかります。
一方でTDE for PGは暗号化・復号処理のほとんどがデータベース内で完結するため、アプリケーションの改修を最小限に抑えつつ、セキュリティ対策を行うことが可能です。

pgcryptoとの比較

比較項目 pgcrypto TDE for PG
列単位 行単位
暗号化方式 関数型暗号 透過的暗号
暗号化の単位
アプリケーションの変更 SQLが対象列を操作する箇所で関数実行するよう変更が必要 最初に暗号キーの設定を行えば、SQLを変更せず透過的に暗号化・複合処理が可能
暗号キー管理 アプリケーション側で管理 AWS KMS連携機能 アプリケーション側で管理
インデックス制約 大小比較・キー順処理不可 大小比較・キー順処理不可
ハッシュインデックスのみ定義可(一本釣り化)
大小比較・キー順処理可能
インデックスの暗号化不可
処理オーバーヘッド 暗号化列数に依存 暗号化列数に依存 行全体を暗号化するため範囲は広くなるが、処理回数は抑えられる

TDE for PGとは

透過的暗号化機能とは、PostgreSQL内 のデータの暗号化・復号処理をアプリケーションから透過的に行う機能です。
暗号キーを渡して接続した利用者だけが復号されたデータを使用できるため、暗号キー情報を持たない人への情報漏洩を防ぐことができます。
 TDE for PG Webサイト:https://jpn.nec.com/postgresql/tde-top.html

TDE for PGの特長
OSSのPostgreSQLで利用可能

NECのTDE for PGはOSSのPostgreSQLに対して透過的暗号化機能を付与することができる製品です。
すでに稼働中のPostgreSQLにもアドオンして利用することができ、PostgreSQLのパラメータの設定のみで簡単に導入することが可能です。

アプリケーション修正不要な簡易動作モード

簡易動作モードの利用で、アプリケーションの修正がなくても暗号化が可能です。
DB内部に鍵を保持し、DBに接続したユーザーに対して自動で暗号化・復号処理を実施しています。
なお、DBアクセス可能なユーザーはそのまま復号して参照が可能な点は留意が必要です。

行単位暗号化によりテーブル全体の暗号化が可能

TDE for PGでは暗号化要件に合わせた細かい設定が可能です。
暗号化手法は列単位と行単位の二種類あります。
列単位はテーブルの列ごとに暗号化でき、さまざまなデータ型に対応できます。
行単位暗号化はデータ型を問わず、全てのデータを暗号化可能です。

列単位暗号化と行単位暗号化の比較
列単位暗号化
  • 暗号化したい列を指定(複数列を指定可)
  • 暗号化対象列に対してB-treeインデックスが使用不可
    B-treeインデックスを用いた大小比較やキー準処理が行えない為、検索処理が遅くなる
    一本釣りに対しては、ハッシュインデックスが定義可能
行単位暗号化
  • テーブル全体能暗号化が可能
  • すべての列に対してB-treeインデックスが使用可
    B-treeインデックス部分は暗号化されていない
TDE for PG動作環境

Linuxの他、Windows Serverも対応しております。
TDE for PG最新バージョンv2.3.2 の動作環境

より安全にお使いいただくために

安心してご利用いただくために、NECではTDE for PGだけでなくPostgreSQL自体のサポートを提供しております。24時間365日の技術者が対応するメニューからマニュアルに関するお問い合わせまで、さまざまなメニューをご用意しております。 PostgreSQL保守サポートについてはこちらをご参照ください。

TDE for PGの現状

TDE for PGは2015年の提供開始以来、導入の簡単さ、設定の柔軟さによりPostgreSQLの情報漏洩対策製品として多くのお客様に採用されています。
PostgreSQLを利用中のお客様、新規で利用する予定があるお客様、今後PostgreSQLへ移行する予定があるお客様は是非NECへお気軽に問い合わせください。

TDE for PGは、NECが開発したPostgreSQLに透過的暗号化機能を付与する製品です。
この製品を使用することにより、指定したテーブルを暗号化してPostgreSQLに格納し、暗号キーを渡して接続した利用者だけが復号されたデータを使用できるようになります。
※PostgreSQLの概要については以下の外部サイトで解説されています。
https://www.postgresql.jp/
※TDE for PGの詳細につきましては以下の専用サイトよりご覧ください。
https://jpn.nec.com/postgresql/tde-top.html