内部犯行による漏えいを防ぐ
PostgreSQLの透過的暗号化機能の実装と利用方法
~「PostgreSQLあんしんソリューション」のご提案~
2015年6月11日
日本電気株式会社
Page 2 © NEC Corporation 2015
アジェンダ
1. DBを取り巻く環境
2. 情報漏えい対策と暗号化
3. PostgreSQLのデータ暗号化とアプリケーション開発者の要望
4. Transparent Data Encryption for PostgreSQL
5. 鍵管理とAmazon Web Services(以下、AWS)
Key Management Service (以下、KMS)の利用
6. メンテナンスツール(PostgreSQLデータ保全ツール)の機能
DBを取り巻く環境
Page 4 © NEC Corporation 2015
DBを取り巻く環境
DB
各種システムが収集する
個人情報や秘密情報が増大
DBサーバを含む情報システムの
運用を第三者に委託することが
一般化しつつある
個人情報を含む
多くの秘密情報を
保持
組織内外からの
不正アクセスに対し
データ保全の仕組みが必要
DBMS運用環境は常に危険にさらされています
システム開発環境
• 情報システム投資の圧縮
• 開発期間の短縮化
• クラウド環境の利用拡大
社会環境
• 電子商取引、電子マネー
• スマートフォン、ICカード/
RFID等電子デバイスの利用拡大
• 各種センサ
Page 5 © NEC Corporation 2015
DBを取り巻く環境
「2013年 情報セキュリティインシデントに関する調査報告書 ~個人情報漏えい編~」
NPO日本ネットワークセキュリティ協会
情報漏えいの影響範囲は広範にわたり、
事業の継続に多大なインパクトを与える
情報漏えい対策と暗号化
Page 7 © NEC Corporation 2015
情報漏えい対策と暗号化
DBアクセス権限の所有者や
DBファイル、通信からの情報漏えい対策としては不十分
• 適切なセキュリティフィックスの適用
• SQLインジェクション対策など、
アプリケーションによる漏えい対策
アプリケーション
サーバ
• 認証による接続制限
• データベースオブジェクトへの各種アクセス権
設定による参照制限
DBMS
DBMSを利用するシステムの情報漏えい対策と問題点
Page 8 © NEC Corporation 2015
情報漏えい対策と暗号化
アプリケーション
サーバ DB
通信の傍受
DBファイルの
持ち出し
データベースファイル
DBのアクセス権やアプリケーションでの対策では不十分
バック
アップ
ファイル
バックアップファイル
(物理/論理データ)の
持ち出し
権限所有者による
不正なデータ抽出
Page 9 © NEC Corporation 2015
情報漏えい対策と暗号化
アプリケーション
サーバ DB
通信の暗号化
(SSL)
データの暗号化
データベースファイル
ネットワークやOS、HWレベルでのデータ漏えいに対する対策
バック
アップ
ファイル
バックアップファイルの
暗号化
DB管理者と
復号用の鍵管理者の
分離
Page 10 © NEC Corporation 2015
情報漏えい対策と暗号化
「「DBA 1,000 人に聞きました」アンケート調査報告書」第1.0 版
2014年9月10日データベース・セキュリティ・コンソーシアム
内部からの情報漏えいの可能性は常に存在し、
全データにアクセス可能な権限者の存在はリスクをともなう
DBAによる情報売却の
可能性を否定できない
POSTGRESQLのデータ暗号化と
アプリケーション開発者の要望
Page 12 © NEC Corporation 2015
postgres=# create extension pgcrypto;
CREATE EXTENSION
postgres=# create table testtbl (c1 bytea);
CREATE TABLE
postgres=# insert into testtbl values (pgp_sym_encrypt('testdata', 'password'));
INSERT 0 1
postgres=# select * from testtbl;
c1
------------------------------------------------------------------------------------------------------------
--------------------------------------------
¥xc30d0407030259fe70ee2960fd7665d239015fab8e8ba8c952023ed7a78822f7478f7624b5eb7695ac868e712e8faae05a1d78dfc6
9ef196d69106e45974002b0c8533c3764e41a76ae2
(1 row)
postgres=# select pgp_sym_decrypt(c1, 'password') from testtbl;
pgp_sym_decrypt
-----------------
testdata
(1 row)
PostgreSQLにおけるデータ暗号化
▌pgcrypto
貢献パッケージ(contrib)として提供される暗号化関数
列に格納するデータをTEXT、BYTEA型のデータとして出力
pgpを組み合わせた高度な暗号化も可能
データ挿入
pgcrypto導入
検索
関数による暗号化
関数による復号
Page 13 © NEC Corporation 2015
アプリケーション開発者の要望
• 関数実行による暗号/復号処理
• 列単位でのデータ暗号化
• 関数実行時に暗号鍵を指定
pgcryptoの
特徴
アプリケーション開発者の要望
• 移行性が低下するため、PostgreSQL専用の
クエリを発行したくない
• APサーバ上に暗号鍵を置きたくない
• 鍵管理はアプリケーション側で行いたくない
関数による暗号化の
実装は好まれない
Page 14 © NEC Corporation 2015
アプリケーション開発者の要望
「「DBA 1,000 人に聞きました」アンケート調査報告書」第1.0 版
2014年9月10日 データベース・セキュリティ・コンソーシアム
アプリケーション開発に負担をかけない暗号化手段が必要
アプリケーション改修が必要な
暗号化手法は、
データ暗号化導入の妨げとなる
Page 15 © NEC Corporation 2015
アプリケーション開発者の要望
▌商用DBMSにおける対応
商用DBMSはアプリケーション開発者に負担をかけない「透過的暗号化」
機能を提供している
DBMS側の設定や準備だけで、アプリケーションの改造が不要
暗号化の対象
• データベース、テーブルスペース、列単位に暗号化を行う
• 大小比較を含む一連の検索処理を問題無く行うことができる
暗号鍵管理
• 暗号鍵は各RDBMS製品に固有な鍵管理の仕組みを持つ
• データの暗号鍵が流出しないよう暗号鍵は2重、3重に暗号化されている
OSS DBMSにも透過的暗号化機能が必要
Page 16 © NEC Corporation 2015
Oracle Advanced Security (TDE)
• 表領域、列暗号化の対象
• 二種類の鍵を使用
• Oracle Walletでマスター鍵を管理
• マスター鍵をソフトウェア/ハードウェア・キーストアに格納
暗号鍵の管理方法
•AES(キー長:128,192,256bit)
•トリプルDES
暗号アルゴリズム
Oracle Wallet
マスター鍵 データ暗号化鍵
DB
データ暗号化鍵は
マスター鍵で暗号化
データは
データ暗号化鍵で
暗号化
Page 17 © NEC Corporation 2015
SQL Server 透過的暗号化機能
• データベース暗号化の対象
•三種類の鍵を使用
•サービスキーを使用してデータベースマスターキーを暗号化
•データベース暗号化キーは、データベースマスターキーを使用して暗号化
暗号鍵の管理方法
•AES(キー長:128,192,256bit)
•トリプルDES
暗号アルゴリズム
サービスマスターキー
データベースマスターキー
DB
サービスマスターキーで
暗号化し、
masterデータベースに
格納される
インストール時に生成
データベース暗号化キー
データベースマスターキー
で暗号化され、
データベースの暗号化に
使用する
TRANSPARENT DATA
ENCRYPTION FOR
POSTGRESQL
Page 19 © NEC Corporation 2015
Transparent Data Encryption for PostgreSQL
▌PostgreSQLの透過的暗号化機能
2015年6月、弊社はTransparent Data Encryption for PostgreSQL
(TDE for PostgreSQL)を公開しました。
http://jpn.nec.com/press/201506/20150605_01.html
Page 20 © NEC Corporation 2015
Transparent Data Encryption for PostgreSQL
▌NECが提供するPostgreSQL向け透過的暗号化機能
暗号化列属性をEXTENTIONとして実装
基本的な機能を提供するFree Edition(OSS版)とデータ保全機能、鍵
管理機能(AWS KMS利用)を加えたEnterprise Editionをリリース
•ソースからコンパイル
•暗号化列属性追加
•暗号鍵はクライアントAPから
専用関数(ストアドプロシージャ)を使用し平文で通知
• https://github.com/nec-postgres/tdeforpg/
Free Edition
(OSS版)
•インストーラ
•暗号化列属性追加(NUMERIC、TIMESTAMP)
•運用コマンド提供
•複数バージョンの暗号鍵に対応
•AWS KMSを利用した鍵管理
Enterprise Editionの
強化項目
Page 21 © NEC Corporation 2015
Transparent Data Encryption for PostgreSQL
▌暗号化列属性
暗号化が必要になると想定されるTEXT、BYTEA(バイナリ)、
NUMERIC、TIMESTAMP属性に対し、暗号化列属性を追加。
TEXT
BYTEA
NUMERIC
TIMESTAMP
ENCRYPT_TEXT
ENCRYPT_BYTEA
ENCRYPT_NUMERIC ※
ENCRYPT_TIMESTAMP ※
暗号化列属性
※ NUMERIC、TIMESTAMPの暗号化列属性はEnterprise Editionのみの機能です。
Page 22 © NEC Corporation 2015
Transparent Data Encryption for PostgreSQL
▌PostgreSQLにおける属性追加
暗号化列属性追加
入出力関数の実装
比較用関数の実装
CASTの実装
カタログ登録
属性追加の際、各属性の入出力関数、インデックス検索用の比較関数、
属性変換処理、カタログ情報の追加を行います
Page 23 © NEC Corporation 2015
Transparent Data Encryption for PostgreSQL
▌TDE for PostgreSQL Free Editionの利用手順
OSS版TDEをコンパイル
PostgreSQL設定変更(TDEのライブラリ読み込み)
セットアップ用スクリプト実行(属性追加)
鍵をDBに登録
暗号化列を使用したテーブル定義
DBに接続
専用関数でセッション開始を宣言
SQL文発行
専用関数でセッション終了を宣言
TDE
利用環境の
準備
TDEの利用
Page 24 © NEC Corporation 2015
Transparent Data Encryption for PostgreSQL
$ cd $PGSRC/contrib/pgcrypto
$ make
$ make install
$ psql << EOF
> CREATE EXTENSION pgcrypto;
> EOF
$ $ sudo ln –s$PGHOME/lib/pgcrypto.so /usr/lib64/libpgcrypto.so
$ cd $PGSRC
$ ./configure
$ cd $TDEHOME/SOURCES/data_encryption
$ sh makedencryption.sh 93 $PGSRC
$ sudo ln -s $TDEHOME/SOURCES/data_encryption/93/data_encryption93.so /usr/lib64/data_encryption.so
$ echo “shared_preload_libraries=‘/usr/lib64/data_encryption.so’” >> postgresql.conf
$ pg_ctl restart
$ cd $TDEHOME/SOURCES
$ sh bin/cipher_setup.sh $PGHOME
Transparent data encryption feature setup script
Please select from the setup menu below
Transparent data encryption feature setup menu
1: activate the transparent data encryption feature
2: inactivate the transparent data encryption feature
select menu [1 - 2] > 1
Please enter database server port to connect : <port_number>
Please enter database user name to connect : <user_name>
Please enter password for authentication : <password>
Please enter database name to connect : <db_name>
pgcryptoのインストール
TDE for PostgreSQLのビルド
TDE for PostgreSQLの導入
DBへのTDE機能導入
Free Editionの導入
Page 25 © NEC Corporation 2015
Transparent Data Encryption for PostgreSQL
-- CREATE TABLE
CREATE TABLE Employee(
EmployeeID Integer PRIMARY KEY,
Name TEXT,
Address ENCRYPT_TEXT,
TelephoneNumber ENCRYPT_TEXT
);
-- START SESSION
select pgtde_begin_session('cipherkey');
-- INSERT DATA
insert into Employee values(1,'従業員1','滋賀','003-0001-0001');
-- SELECT ALL
select * from Employee ;
-- END SESSION
select pgtde_end_session();
暗号化列属性を指定したテーブル定義
Free Editionの利用
暗号・復号セッション開始
(データ鍵をDBに通知)
データの挿入(通常のSQL文)
データの検索(通常のSQL文)
暗号・復号セッション終了
Page 26 © NEC Corporation 2015
Transparent Data Encryption for PostgreSQL
▌Free Editionのメリット・デメリット
• 暗号化関数が不要でアプリケーション開発が容易に
• 検索、更新を行うためにSQL文を発行するたびに鍵を
送信する必要がなくなる
メリット
• 鍵をアプリケーション側で管理する必要がある
• TDEの利用開始時に鍵を送信しなければならない
• 鍵の更新の際にはデータの再暗号化が必要
デメリット
Enterprise Editionでは鍵管理と鍵の更新に対する機能を追加
鍵管理とAWS KMSの利用
Page 28 © NEC Corporation 2015
鍵管理とAWS KMSの利用
アプリケーション
サーバ
鍵管理機能
暗号化した
DB暗号化用の鍵を
提供
復号した鍵で
データを暗号・復号化
機密性確保のため、暗号・復号に使用する鍵は
AP、DBサーバから独立して管理されることが望ましい
復号した
DB暗号化用の鍵を
提供
Page 29 © NEC Corporation 2015
鍵管理とAWS KMSの利用
▌鍵管理の方法
OSS-DBMSと連携する鍵管理機能としては
クラウドサービス上の鍵管理が適している
•導入は容易だが、鍵管理のしくみはつくり込が必要
•鍵を格納したファイルをDBサーバ上に置くため、機密性に
不安がある
ファイルによる
暗号鍵管理
•高度な鍵管理の仕組みを提供可能
•導入費が高額であるため、OSS-DBMSを利用するシステム
での採用は難しい
専用HW
(Hardware Security
Module)による暗号鍵管理
•高度な鍵管理の仕組みを提供可能
•ランニングの費用はかかるが、導入費は抑えられる
クラウドサービス上の
鍵管理
Page 30 © NEC Corporation 2015
鍵管理とAWS KMSの利用
2014年11月
アマゾン ウェブ サービス(AWS)による鍵管理サービスの開始
Page 31 © NEC Corporation 2015
鍵管理とAWS KMSの利用
AWS KMS(Key Management Service)とは
データの暗号化に使用される暗号化キーの作成と管理機能を提供
するサービス。
• キーの作成、説明、リスト表示
• キーの有効化と無効化
• キーの使用ポリシーの設定と取得
• キーエイリアスの作成、削除、リスト表示
• データの暗号化、復号化、再暗号化
• プレーンテキストでサービスからエクスポートできるか、サービスをそのま
まにしないキーで暗号化できるデータキーの生成
• 暗号化アプリケーションに適したランダムな数値の生成
参考:http://docs.aws.amazon.com/ja_jp/kms/latest/developerguide/overview.html
AWS KMSを利用し、
DB-クライアント外に
暗号鍵生成、暗号化、復号機能を
持つことが可能
TDE for PostgreSQL Enterprise Editionは
AWS KMSを利用した鍵管理機能を提供
Page 32 © NEC Corporation 2015
鍵管理とAWS KMSの利用
▌TDE for PostgreSQL Enterprise Editionでは3種類の鍵を使用
• データ鍵を暗号化するための鍵
• セキュリティ管理者が生成(AWS KMS)
CMK
(Customer Master Key )
• データを暗号化するための鍵
• 暗号鍵をAWS KMSで復号して取得
データ鍵
• 暗号化されたデータ鍵
• APサーバ上に保有し、透過的暗号化利用時に
DBに提示
暗号鍵
Page 33 © NEC Corporation 2015
鍵管理とAWS KMSの利用
▌AWS KMSを利用したTDE for PostgreSQLの登場人物と保有情報
• AWSアクセス用の情報
• 復号権限のあるユーザアカウント
DBA
• セキュリティ管理者が発行した暗号化された鍵
(暗号鍵)
AP開発・
運用者
•AWS IAMの利用権
•鍵作成・管理用権限のあるユーザアカウント
•CMK(Customer Master Key)
→ データ鍵および暗号鍵の作成
セキュリティ
管理者
データの復号に必要な情報や権限は分散して管理され、
「データ鍵」を常時保有する登場人物は存在しない
Page 34 © NEC Corporation 2015
鍵管理とAWS KMSの利用
▌TDE for PostgreSQL Enterprise Editionの鍵バージョン管理
鍵の更新時に全暗号化データの再暗号化は不要/
データ更新時に最新の鍵で暗号化する
DB内に暗号化した複数バージョンのデータ鍵を持ち、
利用時に復号しメモリ展開したデータ鍵を使用する
バージョン 暗号化データバージョン データ鍵
バージョン データ鍵
バージョン データ鍵
暗号化列の構造鍵管理テーブル
メモリ展開した
鍵テーブル
参照時に
過去のバージョンの鍵で復号可能
※ 鍵のバージョン管理はAWS KMS無しでも利用可能
Page 35 © NEC Corporation 2015
鍵管理とAWS KMSの利用(準備)
▌TDE for PostgreSQL Enterprise EditionからのAWS KMS利用
(準備)
暗号鍵受領
AP開発・運用者 セキュリティ管理者 DBA
IAMアクセス(管理者)
復号用ユーザ追加
CMK作成
CMKのキーIDを指定し
データ鍵・暗号鍵を生成
TDE導入
AWSアクセス情報作成
(設定ファイル)
DB
暗号化したデータ鍵を
DBに格納
Page 36 © NEC Corporation 2015
鍵管理とAWS KMSの利用(利用)
▌TDE for PostgreSQL Enterprise EditionからのAWS KMS利用
(利用)
DBアクセス時に暗号鍵提示
クエリ発行
AP AWS KMSDB
APから暗号鍵取得
AWSに接続し暗号鍵を復号
(データ鍵)
鍵管理テーブルを復号し
メモリ展開
データ鍵を利用した暗号・復号
DBセッション内での
暗号・復号に利用
暗号鍵の復号
KeyID、暗号鍵
データ鍵
Page 37 © NEC Corporation 2015
AWS Management Consoleで暗号化キー作成を行う
① IAM
② 暗号化キー作成
画面へ
AWS KMSの機能は、
AWS IAM(Identity &
Access Management)から
利用します
Page 38 © NEC Corporation 2015
CMKを作成する
③ CMK作成
Page 39 © NEC Corporation 2015
KeyIdを確認する
④ KeyIDを確認
KeyIDはCMKを
一意に指定します。
Page 40 © NEC Corporation 2015
データ鍵/暗号鍵生成
⑤ DBサーバで登録用コマンド実行
⑦ AWS接続情報入力
⑧ KeyID入力
⑨ 暗号化アルゴリズム選択
⑥ KMSを使用するか選択
Page 41 © NEC Corporation 2015
psqlでの利用例
⑪ 暗号化鍵をDBに提示
⑩ 暗号化鍵を渡さずテーブル参照
(エラー)
⑫ データの復号に成功
Page 42 © NEC Corporation 2015
Transparent Data Encryption for PostgreSQL
▌Free Edition、Enterprise Edition共通の利用上の注意
一部ではありますが、アプリケーション改造
(透過的暗号化セッションの開始/終了宣言)が必要です
Hashインデックスにのみ対応しています
(B-Treeインデックスには未対応です)
大小比較やソートは可能ですが、全データの復号が必要となるため、
DBサーバに大きな負荷がかかります
▌Enterprise Editionの利用上の注意
AWS KMS利用時に「pgtde_begin_session」関数の応答時間が数秒か
かることがあります。
メンテナンスツール
(POSTGRESQLデータ保全ツール)の機能
Page 44 © NEC Corporation 2015
メンテナンスツール(PostgreSQLデータ保全ツール)の機能
▌データ破壊発生後の復旧作業
バックアップ後のDB更新箇所を復旧するには、膨大な作業が必要となる。
• 破壊箇所の確認やデータの救出作業は工数がかかる
• エラー発生個所以外にDB壊れていないことを確認するには、
全DBオブジェクトのチェックが必要
•データ破壊が発生しエラーとなる箇所の特定
•アクセス不能なレコードを回避しつつ、参照可能なレ
コードを抽出
•救出データのリストア
•インデックスの再作成
•他に破壊されたファイルが無いか、全レコードの抽出
および正常性確認
•ファイルをダンプし、破壊箇所の復旧…Etc.Etc.
データ破壊からの
復旧作業
Page 45 © NEC Corporation 2015
▌TDE for PostgreSQL Enterprise Editionは、
TDE機能に加えPostgreSQLのメンテナンスツールを提供します
Verify機能
テーブルの構造やデータとインデックスの整合性チェック
Salvage/Revive機能
起動しないDBからのデータ救出/リストア
メンテナンスツール(PostgreSQLデータ保全ツール)の機能
root
branch
leaf
leaf
branch
Leaf
leaf
インデックスとデータの整合性チェック
テーブル
データの構造チェック
データブロック
破損
…
起動不能なDB
破損
データ救出 救出データのリストア
整合性
インデックス
FREE・ENTERPRISE EDITION
機能一覧
Page 47 © NEC Corporation 2015
Transparent Data Encryption for PostgreSQL
▌Edition別の比較一覧
機能/サービス Enterprise Edition Free Edition
Transparent Data Encryption機能
列単位の
暗号化機能
テキスト 〇 〇
バイト列(画像など) 〇 〇
数値 〇 ×
日付・時刻 〇 ×
鍵の更新、バージョン管理機能 〇
△
暗号鍵のバージョン管理機能なし
一括更新のみ可
Amazon Web Service 鍵管理機能
(Key Management Service)とのシームレスな連携
〇 ×
Maintenace機能
データベース診断・復旧機能 〇 ×
サポート・サービス
Transparent Data Encryption for PostgreSQLの
PPサポートサービス
〇 ×
PostgreSQL本体のサポートサービス 〇 ×
Transparent Data Encryption for PostgreSQL
Free Editionから
PostgreSQLの透過的暗号化機能を
是非ご体験ください
https://github.com/nec-postgres/tdeforpg/
鍵管理機能をご要望の皆様には、
Enterprise Editionをご検討ください
[db tech showcase Tokyo 2015] A26:内部犯行による漏えいを防ぐPostgreSQLの透過的暗号化機能に関する実装と利用方法 by 日本電気株式会社 黒澤彰
[db tech showcase Tokyo 2015] A26:内部犯行による漏えいを防ぐPostgreSQLの透過的暗号化機能に関する実装と利用方法 by 日本電気株式会社 黒澤彰

[db tech showcase Tokyo 2015] A26:内部犯行による漏えいを防ぐPostgreSQLの透過的暗号化機能に関する実装と利用方法 by 日本電気株式会社 黒澤彰

  • 1.
  • 2.
    Page 2 ©NEC Corporation 2015 アジェンダ 1. DBを取り巻く環境 2. 情報漏えい対策と暗号化 3. PostgreSQLのデータ暗号化とアプリケーション開発者の要望 4. Transparent Data Encryption for PostgreSQL 5. 鍵管理とAmazon Web Services(以下、AWS) Key Management Service (以下、KMS)の利用 6. メンテナンスツール(PostgreSQLデータ保全ツール)の機能
  • 3.
  • 4.
    Page 4 ©NEC Corporation 2015 DBを取り巻く環境 DB 各種システムが収集する 個人情報や秘密情報が増大 DBサーバを含む情報システムの 運用を第三者に委託することが 一般化しつつある 個人情報を含む 多くの秘密情報を 保持 組織内外からの 不正アクセスに対し データ保全の仕組みが必要 DBMS運用環境は常に危険にさらされています システム開発環境 • 情報システム投資の圧縮 • 開発期間の短縮化 • クラウド環境の利用拡大 社会環境 • 電子商取引、電子マネー • スマートフォン、ICカード/ RFID等電子デバイスの利用拡大 • 各種センサ
  • 5.
    Page 5 ©NEC Corporation 2015 DBを取り巻く環境 「2013年 情報セキュリティインシデントに関する調査報告書 ~個人情報漏えい編~」 NPO日本ネットワークセキュリティ協会 情報漏えいの影響範囲は広範にわたり、 事業の継続に多大なインパクトを与える
  • 6.
  • 7.
    Page 7 ©NEC Corporation 2015 情報漏えい対策と暗号化 DBアクセス権限の所有者や DBファイル、通信からの情報漏えい対策としては不十分 • 適切なセキュリティフィックスの適用 • SQLインジェクション対策など、 アプリケーションによる漏えい対策 アプリケーション サーバ • 認証による接続制限 • データベースオブジェクトへの各種アクセス権 設定による参照制限 DBMS DBMSを利用するシステムの情報漏えい対策と問題点
  • 8.
    Page 8 ©NEC Corporation 2015 情報漏えい対策と暗号化 アプリケーション サーバ DB 通信の傍受 DBファイルの 持ち出し データベースファイル DBのアクセス権やアプリケーションでの対策では不十分 バック アップ ファイル バックアップファイル (物理/論理データ)の 持ち出し 権限所有者による 不正なデータ抽出
  • 9.
    Page 9 ©NEC Corporation 2015 情報漏えい対策と暗号化 アプリケーション サーバ DB 通信の暗号化 (SSL) データの暗号化 データベースファイル ネットワークやOS、HWレベルでのデータ漏えいに対する対策 バック アップ ファイル バックアップファイルの 暗号化 DB管理者と 復号用の鍵管理者の 分離
  • 10.
    Page 10 ©NEC Corporation 2015 情報漏えい対策と暗号化 「「DBA 1,000 人に聞きました」アンケート調査報告書」第1.0 版 2014年9月10日データベース・セキュリティ・コンソーシアム 内部からの情報漏えいの可能性は常に存在し、 全データにアクセス可能な権限者の存在はリスクをともなう DBAによる情報売却の 可能性を否定できない
  • 11.
  • 12.
    Page 12 ©NEC Corporation 2015 postgres=# create extension pgcrypto; CREATE EXTENSION postgres=# create table testtbl (c1 bytea); CREATE TABLE postgres=# insert into testtbl values (pgp_sym_encrypt('testdata', 'password')); INSERT 0 1 postgres=# select * from testtbl; c1 ------------------------------------------------------------------------------------------------------------ -------------------------------------------- ¥xc30d0407030259fe70ee2960fd7665d239015fab8e8ba8c952023ed7a78822f7478f7624b5eb7695ac868e712e8faae05a1d78dfc6 9ef196d69106e45974002b0c8533c3764e41a76ae2 (1 row) postgres=# select pgp_sym_decrypt(c1, 'password') from testtbl; pgp_sym_decrypt ----------------- testdata (1 row) PostgreSQLにおけるデータ暗号化 ▌pgcrypto 貢献パッケージ(contrib)として提供される暗号化関数 列に格納するデータをTEXT、BYTEA型のデータとして出力 pgpを組み合わせた高度な暗号化も可能 データ挿入 pgcrypto導入 検索 関数による暗号化 関数による復号
  • 13.
    Page 13 ©NEC Corporation 2015 アプリケーション開発者の要望 • 関数実行による暗号/復号処理 • 列単位でのデータ暗号化 • 関数実行時に暗号鍵を指定 pgcryptoの 特徴 アプリケーション開発者の要望 • 移行性が低下するため、PostgreSQL専用の クエリを発行したくない • APサーバ上に暗号鍵を置きたくない • 鍵管理はアプリケーション側で行いたくない 関数による暗号化の 実装は好まれない
  • 14.
    Page 14 ©NEC Corporation 2015 アプリケーション開発者の要望 「「DBA 1,000 人に聞きました」アンケート調査報告書」第1.0 版 2014年9月10日 データベース・セキュリティ・コンソーシアム アプリケーション開発に負担をかけない暗号化手段が必要 アプリケーション改修が必要な 暗号化手法は、 データ暗号化導入の妨げとなる
  • 15.
    Page 15 ©NEC Corporation 2015 アプリケーション開発者の要望 ▌商用DBMSにおける対応 商用DBMSはアプリケーション開発者に負担をかけない「透過的暗号化」 機能を提供している DBMS側の設定や準備だけで、アプリケーションの改造が不要 暗号化の対象 • データベース、テーブルスペース、列単位に暗号化を行う • 大小比較を含む一連の検索処理を問題無く行うことができる 暗号鍵管理 • 暗号鍵は各RDBMS製品に固有な鍵管理の仕組みを持つ • データの暗号鍵が流出しないよう暗号鍵は2重、3重に暗号化されている OSS DBMSにも透過的暗号化機能が必要
  • 16.
    Page 16 ©NEC Corporation 2015 Oracle Advanced Security (TDE) • 表領域、列暗号化の対象 • 二種類の鍵を使用 • Oracle Walletでマスター鍵を管理 • マスター鍵をソフトウェア/ハードウェア・キーストアに格納 暗号鍵の管理方法 •AES(キー長:128,192,256bit) •トリプルDES 暗号アルゴリズム Oracle Wallet マスター鍵 データ暗号化鍵 DB データ暗号化鍵は マスター鍵で暗号化 データは データ暗号化鍵で 暗号化
  • 17.
    Page 17 ©NEC Corporation 2015 SQL Server 透過的暗号化機能 • データベース暗号化の対象 •三種類の鍵を使用 •サービスキーを使用してデータベースマスターキーを暗号化 •データベース暗号化キーは、データベースマスターキーを使用して暗号化 暗号鍵の管理方法 •AES(キー長:128,192,256bit) •トリプルDES 暗号アルゴリズム サービスマスターキー データベースマスターキー DB サービスマスターキーで 暗号化し、 masterデータベースに 格納される インストール時に生成 データベース暗号化キー データベースマスターキー で暗号化され、 データベースの暗号化に 使用する
  • 18.
  • 19.
    Page 19 ©NEC Corporation 2015 Transparent Data Encryption for PostgreSQL ▌PostgreSQLの透過的暗号化機能 2015年6月、弊社はTransparent Data Encryption for PostgreSQL (TDE for PostgreSQL)を公開しました。 http://jpn.nec.com/press/201506/20150605_01.html
  • 20.
    Page 20 ©NEC Corporation 2015 Transparent Data Encryption for PostgreSQL ▌NECが提供するPostgreSQL向け透過的暗号化機能 暗号化列属性をEXTENTIONとして実装 基本的な機能を提供するFree Edition(OSS版)とデータ保全機能、鍵 管理機能(AWS KMS利用)を加えたEnterprise Editionをリリース •ソースからコンパイル •暗号化列属性追加 •暗号鍵はクライアントAPから 専用関数(ストアドプロシージャ)を使用し平文で通知 • https://github.com/nec-postgres/tdeforpg/ Free Edition (OSS版) •インストーラ •暗号化列属性追加(NUMERIC、TIMESTAMP) •運用コマンド提供 •複数バージョンの暗号鍵に対応 •AWS KMSを利用した鍵管理 Enterprise Editionの 強化項目
  • 21.
    Page 21 ©NEC Corporation 2015 Transparent Data Encryption for PostgreSQL ▌暗号化列属性 暗号化が必要になると想定されるTEXT、BYTEA(バイナリ)、 NUMERIC、TIMESTAMP属性に対し、暗号化列属性を追加。 TEXT BYTEA NUMERIC TIMESTAMP ENCRYPT_TEXT ENCRYPT_BYTEA ENCRYPT_NUMERIC ※ ENCRYPT_TIMESTAMP ※ 暗号化列属性 ※ NUMERIC、TIMESTAMPの暗号化列属性はEnterprise Editionのみの機能です。
  • 22.
    Page 22 ©NEC Corporation 2015 Transparent Data Encryption for PostgreSQL ▌PostgreSQLにおける属性追加 暗号化列属性追加 入出力関数の実装 比較用関数の実装 CASTの実装 カタログ登録 属性追加の際、各属性の入出力関数、インデックス検索用の比較関数、 属性変換処理、カタログ情報の追加を行います
  • 23.
    Page 23 ©NEC Corporation 2015 Transparent Data Encryption for PostgreSQL ▌TDE for PostgreSQL Free Editionの利用手順 OSS版TDEをコンパイル PostgreSQL設定変更(TDEのライブラリ読み込み) セットアップ用スクリプト実行(属性追加) 鍵をDBに登録 暗号化列を使用したテーブル定義 DBに接続 専用関数でセッション開始を宣言 SQL文発行 専用関数でセッション終了を宣言 TDE 利用環境の 準備 TDEの利用
  • 24.
    Page 24 ©NEC Corporation 2015 Transparent Data Encryption for PostgreSQL $ cd $PGSRC/contrib/pgcrypto $ make $ make install $ psql << EOF > CREATE EXTENSION pgcrypto; > EOF $ $ sudo ln –s$PGHOME/lib/pgcrypto.so /usr/lib64/libpgcrypto.so $ cd $PGSRC $ ./configure $ cd $TDEHOME/SOURCES/data_encryption $ sh makedencryption.sh 93 $PGSRC $ sudo ln -s $TDEHOME/SOURCES/data_encryption/93/data_encryption93.so /usr/lib64/data_encryption.so $ echo “shared_preload_libraries=‘/usr/lib64/data_encryption.so’” >> postgresql.conf $ pg_ctl restart $ cd $TDEHOME/SOURCES $ sh bin/cipher_setup.sh $PGHOME Transparent data encryption feature setup script Please select from the setup menu below Transparent data encryption feature setup menu 1: activate the transparent data encryption feature 2: inactivate the transparent data encryption feature select menu [1 - 2] > 1 Please enter database server port to connect : <port_number> Please enter database user name to connect : <user_name> Please enter password for authentication : <password> Please enter database name to connect : <db_name> pgcryptoのインストール TDE for PostgreSQLのビルド TDE for PostgreSQLの導入 DBへのTDE機能導入 Free Editionの導入
  • 25.
    Page 25 ©NEC Corporation 2015 Transparent Data Encryption for PostgreSQL -- CREATE TABLE CREATE TABLE Employee( EmployeeID Integer PRIMARY KEY, Name TEXT, Address ENCRYPT_TEXT, TelephoneNumber ENCRYPT_TEXT ); -- START SESSION select pgtde_begin_session('cipherkey'); -- INSERT DATA insert into Employee values(1,'従業員1','滋賀','003-0001-0001'); -- SELECT ALL select * from Employee ; -- END SESSION select pgtde_end_session(); 暗号化列属性を指定したテーブル定義 Free Editionの利用 暗号・復号セッション開始 (データ鍵をDBに通知) データの挿入(通常のSQL文) データの検索(通常のSQL文) 暗号・復号セッション終了
  • 26.
    Page 26 ©NEC Corporation 2015 Transparent Data Encryption for PostgreSQL ▌Free Editionのメリット・デメリット • 暗号化関数が不要でアプリケーション開発が容易に • 検索、更新を行うためにSQL文を発行するたびに鍵を 送信する必要がなくなる メリット • 鍵をアプリケーション側で管理する必要がある • TDEの利用開始時に鍵を送信しなければならない • 鍵の更新の際にはデータの再暗号化が必要 デメリット Enterprise Editionでは鍵管理と鍵の更新に対する機能を追加
  • 27.
  • 28.
    Page 28 ©NEC Corporation 2015 鍵管理とAWS KMSの利用 アプリケーション サーバ 鍵管理機能 暗号化した DB暗号化用の鍵を 提供 復号した鍵で データを暗号・復号化 機密性確保のため、暗号・復号に使用する鍵は AP、DBサーバから独立して管理されることが望ましい 復号した DB暗号化用の鍵を 提供
  • 29.
    Page 29 ©NEC Corporation 2015 鍵管理とAWS KMSの利用 ▌鍵管理の方法 OSS-DBMSと連携する鍵管理機能としては クラウドサービス上の鍵管理が適している •導入は容易だが、鍵管理のしくみはつくり込が必要 •鍵を格納したファイルをDBサーバ上に置くため、機密性に 不安がある ファイルによる 暗号鍵管理 •高度な鍵管理の仕組みを提供可能 •導入費が高額であるため、OSS-DBMSを利用するシステム での採用は難しい 専用HW (Hardware Security Module)による暗号鍵管理 •高度な鍵管理の仕組みを提供可能 •ランニングの費用はかかるが、導入費は抑えられる クラウドサービス上の 鍵管理
  • 30.
    Page 30 ©NEC Corporation 2015 鍵管理とAWS KMSの利用 2014年11月 アマゾン ウェブ サービス(AWS)による鍵管理サービスの開始
  • 31.
    Page 31 ©NEC Corporation 2015 鍵管理とAWS KMSの利用 AWS KMS(Key Management Service)とは データの暗号化に使用される暗号化キーの作成と管理機能を提供 するサービス。 • キーの作成、説明、リスト表示 • キーの有効化と無効化 • キーの使用ポリシーの設定と取得 • キーエイリアスの作成、削除、リスト表示 • データの暗号化、復号化、再暗号化 • プレーンテキストでサービスからエクスポートできるか、サービスをそのま まにしないキーで暗号化できるデータキーの生成 • 暗号化アプリケーションに適したランダムな数値の生成 参考:http://docs.aws.amazon.com/ja_jp/kms/latest/developerguide/overview.html AWS KMSを利用し、 DB-クライアント外に 暗号鍵生成、暗号化、復号機能を 持つことが可能 TDE for PostgreSQL Enterprise Editionは AWS KMSを利用した鍵管理機能を提供
  • 32.
    Page 32 ©NEC Corporation 2015 鍵管理とAWS KMSの利用 ▌TDE for PostgreSQL Enterprise Editionでは3種類の鍵を使用 • データ鍵を暗号化するための鍵 • セキュリティ管理者が生成(AWS KMS) CMK (Customer Master Key ) • データを暗号化するための鍵 • 暗号鍵をAWS KMSで復号して取得 データ鍵 • 暗号化されたデータ鍵 • APサーバ上に保有し、透過的暗号化利用時に DBに提示 暗号鍵
  • 33.
    Page 33 ©NEC Corporation 2015 鍵管理とAWS KMSの利用 ▌AWS KMSを利用したTDE for PostgreSQLの登場人物と保有情報 • AWSアクセス用の情報 • 復号権限のあるユーザアカウント DBA • セキュリティ管理者が発行した暗号化された鍵 (暗号鍵) AP開発・ 運用者 •AWS IAMの利用権 •鍵作成・管理用権限のあるユーザアカウント •CMK(Customer Master Key) → データ鍵および暗号鍵の作成 セキュリティ 管理者 データの復号に必要な情報や権限は分散して管理され、 「データ鍵」を常時保有する登場人物は存在しない
  • 34.
    Page 34 ©NEC Corporation 2015 鍵管理とAWS KMSの利用 ▌TDE for PostgreSQL Enterprise Editionの鍵バージョン管理 鍵の更新時に全暗号化データの再暗号化は不要/ データ更新時に最新の鍵で暗号化する DB内に暗号化した複数バージョンのデータ鍵を持ち、 利用時に復号しメモリ展開したデータ鍵を使用する バージョン 暗号化データバージョン データ鍵 バージョン データ鍵 バージョン データ鍵 暗号化列の構造鍵管理テーブル メモリ展開した 鍵テーブル 参照時に 過去のバージョンの鍵で復号可能 ※ 鍵のバージョン管理はAWS KMS無しでも利用可能
  • 35.
    Page 35 ©NEC Corporation 2015 鍵管理とAWS KMSの利用(準備) ▌TDE for PostgreSQL Enterprise EditionからのAWS KMS利用 (準備) 暗号鍵受領 AP開発・運用者 セキュリティ管理者 DBA IAMアクセス(管理者) 復号用ユーザ追加 CMK作成 CMKのキーIDを指定し データ鍵・暗号鍵を生成 TDE導入 AWSアクセス情報作成 (設定ファイル) DB 暗号化したデータ鍵を DBに格納
  • 36.
    Page 36 ©NEC Corporation 2015 鍵管理とAWS KMSの利用(利用) ▌TDE for PostgreSQL Enterprise EditionからのAWS KMS利用 (利用) DBアクセス時に暗号鍵提示 クエリ発行 AP AWS KMSDB APから暗号鍵取得 AWSに接続し暗号鍵を復号 (データ鍵) 鍵管理テーブルを復号し メモリ展開 データ鍵を利用した暗号・復号 DBセッション内での 暗号・復号に利用 暗号鍵の復号 KeyID、暗号鍵 データ鍵
  • 37.
    Page 37 ©NEC Corporation 2015 AWS Management Consoleで暗号化キー作成を行う ① IAM ② 暗号化キー作成 画面へ AWS KMSの機能は、 AWS IAM(Identity & Access Management)から 利用します
  • 38.
    Page 38 ©NEC Corporation 2015 CMKを作成する ③ CMK作成
  • 39.
    Page 39 ©NEC Corporation 2015 KeyIdを確認する ④ KeyIDを確認 KeyIDはCMKを 一意に指定します。
  • 40.
    Page 40 ©NEC Corporation 2015 データ鍵/暗号鍵生成 ⑤ DBサーバで登録用コマンド実行 ⑦ AWS接続情報入力 ⑧ KeyID入力 ⑨ 暗号化アルゴリズム選択 ⑥ KMSを使用するか選択
  • 41.
    Page 41 ©NEC Corporation 2015 psqlでの利用例 ⑪ 暗号化鍵をDBに提示 ⑩ 暗号化鍵を渡さずテーブル参照 (エラー) ⑫ データの復号に成功
  • 42.
    Page 42 ©NEC Corporation 2015 Transparent Data Encryption for PostgreSQL ▌Free Edition、Enterprise Edition共通の利用上の注意 一部ではありますが、アプリケーション改造 (透過的暗号化セッションの開始/終了宣言)が必要です Hashインデックスにのみ対応しています (B-Treeインデックスには未対応です) 大小比較やソートは可能ですが、全データの復号が必要となるため、 DBサーバに大きな負荷がかかります ▌Enterprise Editionの利用上の注意 AWS KMS利用時に「pgtde_begin_session」関数の応答時間が数秒か かることがあります。
  • 43.
  • 44.
    Page 44 ©NEC Corporation 2015 メンテナンスツール(PostgreSQLデータ保全ツール)の機能 ▌データ破壊発生後の復旧作業 バックアップ後のDB更新箇所を復旧するには、膨大な作業が必要となる。 • 破壊箇所の確認やデータの救出作業は工数がかかる • エラー発生個所以外にDB壊れていないことを確認するには、 全DBオブジェクトのチェックが必要 •データ破壊が発生しエラーとなる箇所の特定 •アクセス不能なレコードを回避しつつ、参照可能なレ コードを抽出 •救出データのリストア •インデックスの再作成 •他に破壊されたファイルが無いか、全レコードの抽出 および正常性確認 •ファイルをダンプし、破壊箇所の復旧…Etc.Etc. データ破壊からの 復旧作業
  • 45.
    Page 45 ©NEC Corporation 2015 ▌TDE for PostgreSQL Enterprise Editionは、 TDE機能に加えPostgreSQLのメンテナンスツールを提供します Verify機能 テーブルの構造やデータとインデックスの整合性チェック Salvage/Revive機能 起動しないDBからのデータ救出/リストア メンテナンスツール(PostgreSQLデータ保全ツール)の機能 root branch leaf leaf branch Leaf leaf インデックスとデータの整合性チェック テーブル データの構造チェック データブロック 破損 … 起動不能なDB 破損 データ救出 救出データのリストア 整合性 インデックス
  • 46.
  • 47.
    Page 47 ©NEC Corporation 2015 Transparent Data Encryption for PostgreSQL ▌Edition別の比較一覧 機能/サービス Enterprise Edition Free Edition Transparent Data Encryption機能 列単位の 暗号化機能 テキスト 〇 〇 バイト列(画像など) 〇 〇 数値 〇 × 日付・時刻 〇 × 鍵の更新、バージョン管理機能 〇 △ 暗号鍵のバージョン管理機能なし 一括更新のみ可 Amazon Web Service 鍵管理機能 (Key Management Service)とのシームレスな連携 〇 × Maintenace機能 データベース診断・復旧機能 〇 × サポート・サービス Transparent Data Encryption for PostgreSQLの PPサポートサービス 〇 × PostgreSQL本体のサポートサービス 〇 ×
  • 48.
    Transparent Data Encryptionfor PostgreSQL Free Editionから PostgreSQLの透過的暗号化機能を 是非ご体験ください https://github.com/nec-postgres/tdeforpg/ 鍵管理機能をご要望の皆様には、 Enterprise Editionをご検討ください