PostgreSQLのセキュリティーあれこれ
Edit : 2016.10.07
PostgreSQLのセキュリティー
Sunao Kiyosue
資料の背景
•  個⼈情報の漏洩がつづく昨今に、とあるクライアント様から、現在のシ
ステムの暗号化がどうなっているか聞かれて、DBは暗号化していませ
ん。(当時の要件定義にあがってない)と解答したら、暗号化できるか?
できるしたら、いくらかかりますか?と聞かれたのがきっかけ。
PostgreSQLのセキュリティー
Sunao Kiyosue
PostgreSQLでできる暗号化の種類
ここでいう、暗号化は復号化できる変換を指します。
•  pgcrypto
contribにて提供 (encrypt/decrypt pgp_sym_encrypt/
pgp_sym_decrypt)
•  「Transparent Data Encryption for PostgreSQL」
通称 TDE 無償版と有償版がある。NEC社によって開発され
た
•  PowerGres Plus
SRA OSS社の製品
PostgreSQLのセキュリティー
Sunao Kiyosue
暗号化のデメリット
•  Indexが使えない場合がある
使うなら、暗号化した結果をwhere句で指定するとか少し
テクニックが必要。
•  暗号化する分のオーバーヘッド
•  Wallとか、error_logとか、通信経路とかまで気にする必要
がでてきて⾯倒。
•  暗号鍵(salt)が流出したら、無意味。
•  データ移⾏も気を遣う
•  アプリケーションがハックされたら、DBの暗号化は無意味
PostgreSQLのセキュリティー
Sunao Kiyosue
TDE での暗号化
•  裏側でpgcryptoが動いている
•  encrypt_text, encrypt_bytea型を追加
•  透過的暗号化は明⽰的にスタートエンドしてあげる必要が
ある
•  ⽐較演算⼦は、等価演算⼦のみ
•  ハッシュインデックス、完全⼀致検索のみ
•  ⾊々制約あり(外部キー、ルール、トリガー等々)
•  ログへの出⼒の設定値あり
PostgreSQLのセキュリティー
Sunao Kiyosue
TDE 無償版と有償版の違い
•  暗号化の機能は変わらない
•  追加機能
データベース診断機能、データベース復旧機能、暗号鍵管
理機能
PostgreSQLのセキュリティー
Sunao Kiyosue
PowerGres Plus
透過的データ暗号化は PostgreSQL の 暗号化したい列を指定する
pgcypto とは異なり、指定したテーブル空間内の全てのユーザデータを暗
号化します。暗号化されたテーブルやインデックスに対する操作によって
出⼒されるトランザクションログや⼀時ファイルも⾃動的に暗号化されま
す。
物理コピーによるバックアップデータも、暗号化されたまま。
暗号鍵は、キーストアファイルに保存。キーストアファイルは、マスター
暗号化キーで暗号化。(これを忘れると詰む)
PostgreSQLのセキュリティー
Sunao Kiyosue
PostgreSQLでできる暗号化の種類 (要調査中)
version 透過的
暗号化
log Wal index 費⽤(イニ
シャル)
費⽤(ランニ
ング)
pgcrypto
(contrib)
8.3 Over × × × × 無償 無償
TDE for PG
Free Edition
PostgreSQL
9.3, 9.4
△(注2) △(注3) × △(注1) 無償 無償
TDE 製品版 PostgreSQL9
.4 base
△(注2) △(注3) × △(注1) 750,000円〜 ? (調査中)
PowerGres
Plus
PostgreSQL9
.4 base
◎ × ◎ ◎ 228,000円
(1CPU)〜
150,000円
(1CPU) 〜
注1) ハッシュindexのみ使える
注2) 透過的にするために、startとendのコマンド発⾏等必要
注3) logにsqlを出⼒する設定の場合に、暗号鍵の⼊っているSQLは出⼒しない。また、パラメータで出⼒を調整できる。
TDEは、いろいろ注意事項が多いかんじ
PostgreSQLのセキュリティー
Sunao Kiyosue
DBを暗号化しなくても他に⽅法はないのか
•  ファイルシステム⾃体を暗号化。
ハード⾃体の物理的な盗難には対応できる。
アプリケーションに⼿をいれずに暗号化という名⽬は⽴つ。
PostgreSQLのセキュリティー
Sunao Kiyosue
その他暗号化するなら考える事
•  アプリケーションからDBへのアクセスの暗号化は別で解決
する必要がある。
SSLを利⽤するとか、アプリケーション側で暗号化するとか
•  暗号化のkeyの取扱が⼤切。
•  個⼈情報の住所とか電話番号まで暗号化してDBに保存する
意味は何を⽬的にしているのか?⽅法と⼿段のとり違い?
•  Postgres Advanced Security Pack
sql_firewall, tdeforpg, pgaudit
無償で使えるものを組み合わせたものを使う
PostgreSQLのセキュリティー
Sunao Kiyosue
マイナンバーへの対応を考えてみる。
•  ガイドライン資料Q&A
http://www.ppc.go.jp/legal/policy/answer/
Q9-2個⼈番号を暗号化等により秘匿化すれば、個⼈番号に該当しない
と考えてよいですか。
A9-2個⼈番号は、仮に暗号化等により秘匿化されていても、その秘匿
化されたものについても個⼈番号を⼀定の法則に従って変換したものであ
ることから、番号法第2条第8項に規定する個⼈番号に該当します。(平
成27年4⽉追加)
PostgreSQLのセキュリティー
Sunao Kiyosue
マイナンバーへの対応を考えてみる。
•  ガイドライン資料Q&A
http://www.ppc.go.jp/legal/policy/answer/
Q9-3個⼈番号をばらばらの数字に分解して保管すれば、個⼈番号に該
当しないと考えてよいですか。
A9-3個⼈番号関係事務⼜は個⼈番号利⽤事務を処理するに当たっては、
ばらばらに分解した数字を集めて複合し、分解前の個⼈番号に復元して利
⽤することになるため、ばらばらの数字に分解されたものについても全体
として番号法第2条第8項に規定する個⼈番号であると考えられます。
(平成27年4⽉追加)
PostgreSQLのセキュリティー
Sunao Kiyosue
いろいろまとめ
暗号化すればマイナンバーを保持しておいてOKということではない、流
出しない、さわれない、(管理) 体制の⽅が重要って事。
どのように暗号化しても、個⼈情報ってことなら、どれだけ漏れないか、
もれそうか(アタック感知)、アクセスがどうか(ログ等)という全体を
通して考えた⽅が良い。 -> 他のシステムにもいえる
PostgreSQLのセキュリティの具体的な設定とかは
http://www.slideshare.net/uptimejp/postgresql-54761353
アップタイム・テクノロジース 永安様資料
を⾒て頂くのがいいかと思います。

PostgreSQL2016合宿成果資料