PostgreSQL暗号化

Posted on 10月 18, 2017

0.はじめに

こんにちは。
キャスレーコンサルティング、SD(システム・デザイン)部の大原です。

私が過去に担当したプロジェクトで、セキュリティ面を考慮して、「登録するデータを暗号化してDBに保存したい」というご要望がございました。
そのプロジェクトで使用するDBがPostgreSQLだったため、PostgreSQLの拡張モジュールを使用する事で、
「登録するデータを暗号化してDBに保存したい」というご要望に応える事ができました。

そこで本ブログでは、PostgreSQLの拡張モジュールを使用して、データの暗号化(復号化)を行い、
DBに保存する方法を、簡単ではございますが、ご紹介させて頂きたいと思います。

1.実行環境と初期状態

1-1 実行環境

OS:windows10
PostgreSQL:9.6

1-2 インストール済み拡張一覧

DB自体作ったばかりなので、拡張モジュールは特に使えません。

postgreSQL1

2.暗号化拡張モジュールアクティベート

2-1 アクティベートと確認

対象のDBにログインして、拡張モジュールをアクティベートします。
この作業はDBごとに適用されます。また管理者権限が必要です。

postgreSQL2

2-2 暗号化関数動作確認

postgreSQLの拡張モジュールは、共通鍵/公開鍵どちらも対応しています。

・共通鍵で暗号化するイメージ

共通鍵

・公開鍵で暗号化するイメージ

公開鍵

今回は、共通鍵にします。

postgreSQL3

暗号化アルゴリズムの指定もできますが、ここでは省略します。デフォルトはAES128だそうです。
アルゴリズムで迷ったら、CRYPTREC暗号リストを参考にしておけば、とりあえず問題ないのではと思います。

3.テーブル作成 ⇒ データ格納 ⇒ データ確認

postgreSQL4

①暗号化したデータを格納するテーブルを用意します。
pgp_sym_encryptの返り値は、バイト配列なのでデータ型はbyteaです。
create table table1(id serial, val bytea);

②暗号化しながらテーブルにデータを挿入します。
insert into table1 (val) values (pgp_sym_encrypt(‘キャスレー’, ‘pass’));

③挿入されたデータを確認します。
select * from table1;

4.復号データ取得

postgreSQL5
①格納した暗号文を復号しながら取り出します。
select id, pgp_sym_decrypt(val, ‘pass’) from table1;

②当然、パスワードを違えれば取り出せません。
select id, pgp_sym_decrypt(val, ‘password‘) from table1;

③復号しながら検索条件としても使えます。
オーバーヘッドはかかりますが、GroupBy, OrderByの条件としても使えます。
select id, pgp_sym_decrypt(val, ‘pass’) from table1 where pgp_sym_decrypt(val, ‘pass’) = ‘コンサルティング’;

5.さいごに

・鍵の扱いについて
・パフォーマンスについて 等
業務で使用する場合には他にも色々考える必要があるかとは思いますが、
よりセキュアなシステムのためには、このようなモジュールを使うことも一つの手段かと思います。

最後まで、お読みいただきありがとうございます。


はじめに

初めまして、キャスレーコンサルティング SI(システム・インテグレーション)部の松本です。

業界3年目にして、実行計画を一度も見たことがなかった私が、
「実行計画とは何か、どのように取得するのか。」について調べた結果をまとめました。

※本ブログでは、PostgreSQL Tutorialより提供されているdvdrentalというDBをサンプルに用いております。 (続きを読む…)


お疲れ様です!
キャスレーコンサルティングのSI(システム・インテグレーション)部の栗田です。

ここ最近、何となくウェブサーバーを立ててみたいと思い、今回のテーマを思いつきました。
(ざっくりすぎですが…。)

ただ立てるだけでは味気なく思い、方向音痴な自分へのプレゼントも兼ねて、
「今回は地図上の最短ルートを検索するサイトも作成してみよう!」
と思います。

map
(こんな感じのよくあるものです。) (続きを読む…)



  • Profile
    キャスレーコンサルティングの技術ブログです。
    当社エンジニアが技術面でのTips、技術系イベント等についてご紹介いたします。
  • CSV社長ブログ
  • チーム・キャスレーブログ