GTM-MML4VXJ
Skip to main content
  1. ホーム >
  2. 製品 >
  3. ソフトウェア >
  4. ライブラリー >
  5. 特集 >
  6. 情報漏えいに備えよ!PostgreSQLで透過的暗号化を実現(1/2)

富士通の技術者に聞く!PostgreSQL最新技術
情報漏えいに備えよ!PostgreSQLで透過的暗号化を実現(1/2)
PostgreSQLインサイド

富士通の技術者に聞く!PostgreSQL最新技術情報漏えいに備えよ!PostgreSQLで透過的暗号化を実現(1/2) PostgreSQLのエキスパート 綱川貴之 入社以来、データベース管理システムの開発・保守・サポートに従事。富士通ではPostgreSQLに最も精通していると技術者の一人。

近年メディアで数多く取り上げられる情報漏えい問題やマイナンバー制度のスタートに伴い、企業のセキュリティに対する関心がますます高まってきている。セキュリティ事故の中でも社会的影響が大きく、問題となるのが情報漏えいである。情報漏えいを防ぐためのデータベースセキュリティ対策にはアクセス制御、権限分掌、DB監査、モニタリングなどさまざまあるが、暗号化も重要な対策のひとつだ。
オープンソースデータベースであるPostgreSQLにも暗号化機能が備わっているが、富士通はエンタープライズ利用に耐えうる高度な暗号化機能として「透過的データ暗号化(Transparent Data Encryption)」の実装に取り組んだ。ここでは、その暗号化機能について技術者がどのように機能を検討し開発したのか?暗号化において避けて通れない性能問題はどのように克服したのか?トランザクションログの暗号化で突きつけられた課題とは?その真相に迫る。

  • 1
  • 2

次へarrow-double

 [2015年10月30日掲載]

暗号化の有効性とは

―ここ数年、メディアで情報漏えい問題を目にすることが増えてきました。情報漏えいに対する関心は高まる一方ですね。

綱川

そうですね。情報漏えいを含むセキュリティに対する関心が高まってきていると感じています。個人情報保護法や改正マイナンバー法など、情報に対する法律の整備が進んでいることも背景にあると思います。
また法律だけでなく、例えばクレジットカード業界では「PCI DSS(注1)」というカード会員のデータ保護を目的としたセキュリティ基準が整備されています。情報を守るために“何をすべきか”が具体的に定められていますし、クレジットカードを扱う業界も多いですから、いろいろな箇所で採用されてきています。その中でもデータを暗号化することが義務付けられています。
他には、医療情報の保護を目的とした「HIPAA法 / HITECH法」で、医療情報のプライバシー保護とセキュリティ対策が義務付けられています。

(注1)Payment Card Industry Data Security Standardsの略でAmerican Express、Discover、JCB、MasterCard、VISAの5大カードブランドが2004年12月に共同で策定したクレジット業界におけるグローバルセキュリティ基準。2013年11月に改訂版であるV3.0が発表されている。

―情報漏えいの対策として暗号化は有効なのでしょうか?

綱川

はい。もちろん、暗号化だけで情報漏えいを全て防ぐことはできませんが、防衛手段の一つとして有効です。
ただ、お客様は単純に情報を保護するという目的だけではなく、コンプライアンスという観点から暗号化に対する関心が高まっていると私たちは考えています。
例えば、個人情報保護法では『高度な暗号化が施されていれば個人情報の提供者への連絡を省略できる』と定められています。つまり、盗まれた情報に適切な暗号化が施されていれば顧客に告知しなくてよいということになります。
また、不正競争防止法では『利益を得るために営業秘密を盗んだ相手を罪に問える』と定められています。
ここで重要なのは、適切な保護をしていないデジタル情報は保護対象と見なされないという点です。暗号化を施していれば適切な保護をしていると見なされるので、盗んだ相手を訴えることができます。

―暗号化に対するお客様からのニーズの高まりを感じて、「透過的データ暗号化(Transparent Data Encryption以後、TDE)」の開発に取り組んだのですね。PostgreSQLにも暗号化機能が用意されていますが、TDEとはどのような機能なのですか?

綱川

PostgreSQLには拡張モジュールによっていくつかの暗号化機能が用意されています。
しかし、「自社製データベースにPostgreSQLを取り込んだ富士通の戦略とは?」で当社の千田が述べたようにエンタープライズ利用で求められる機能としては足りないと考えていました。

私たちが開発したTDEは、指定したテーブル空間内における全てのテーブルやインデックス、トランザクションログ(以後、WAL)、それにソート処理などで作られる一時ファイル内のユーザーデータが暗号化されます。暗号化の対象となるデータ型にも制限がないので、テーブル作成時に専用のデータ型を持つカラム(列)を用意するといった煩わしさもありません。
さらに、バックアップデータも暗号化されます。データベースクラスタ(注2)のファイルそのものが暗号化されていますので、pg_basebackupやtarなどでコピーしたバックアップも暗号化されているということです。

(注2)PostgreSQLの独自用語であり、1つのサーバインスタンスで管理されるデータベースの集合体を意味する。冗長化されたシステムを意味する「クラスタ」とは異なる。

―ストレージやバックアップメディア、データファイルのコピーによる盗難にあってもデータを見られる心配がない訳ですね。「データ暗号化(Data Encryption)」の前に「透過的(Transparent)」と付いていますが何か意味があるのですか?

綱川

はい。PostgreSQLに用意されている暗号化機能を使うには、利用者によるインストール作業などの事前準備に加え、アプリケーションを修正する必要があります。また、暗号化機能により少なからずオーバーヘッドが発生するため、レスポンス低下など性能への影響があります。
TDEでは、暗号化機能を利用する際の“アプリケーションの修正やカラムのデータ型変更を不要”にし“暗号化による性能への影響を極小化”しました。アプリケーションとの接続性や性能について、暗号化しない場合と同じように使える点が「透過的」を意味しています。

―アプリケーション開発者が何も意識をする必要がない=透過的ということですね。PostgreSQLの暗号化機能ではアプリケーションの修正が必要とのことですが、もう少し具体的に教えてください。

綱川

PostgreSQLで代表的な暗号化機能に、「pgcrypto」というcontribモジュールがあります。これはデフォルトではインストールされないため、利用者がインストールする必要があります。
このpgcryptoでは『どの列を暗号化するか』を利用者が選別し、その列に処理を行なうINSERTやUPDATEなどのSQL文に対して、データを暗号化・復号する関数を明示的に呼ぶようにアプリケーションを修正する必要があるのです。
pgcrypto以外では、暗号化専用のデータ型を指定した列を用意する必要があるものもあります。しかし、これでは既にデータがある状態だと暗号化したいカラムのデータ型を変更しなければなりません。
いずれにしてもこれらの方法では、購入したパッケージアプリケーションや、元の開発者も設計書も存在しないような古いカスタムアプリケーションでは手を加えることが困難なため、実質的に暗号化機能を利用できないと考えています。

―確かにその方法ですと暗号化機能を利用するためのハードルが高いと感じますね。TDEを使えばアプリケーションやデータベースに手を加えることなく、セキュリティを高めることができるのですね。

綱川

そのとおりです。TDEは暗号化アルゴリズムに「キー長128/256ビットのAES」を使っています。キー長に256ビットを使用するAESは、現在最も強固な暗号化方式の一つと言われています。
また、暗号化機能をストリーミングレプリケーションと組み合わせて使うこともできます。スタンバイサーバ側のデータや、プライマリサーバとスタンバイサーバで送受信するWALも自動的に暗号化されます。
さらに、pgcryptoなど他の暗号化機能と比べて機能的に強化されています。
その1つとして、先にも説明しましたとおり暗号化・復号を行なうにもアプリケーションの修正はもちろん、利用者の意識が不要です。
PostgreSQLのサーバプロセスがストレージへの読み書き時にのみ自動的にバックグラウンドでデータを暗号化・復号しますので、アプリケーションが暗号化キーを管理する必要もありません。この点も強化の1つです。

暗号化キーの管理は?

―暗号化キーの管理も必要ないのですか?

綱川

はい。pgcryptoでは『このデータの暗号化キーはこれで』、『その暗号化キーはどこに格納する』といったことをアプリケーションが管理する必要があります。これをTDEでは意識不要にしています。

―暗号化キーは重要な要素ですよね?TDEではどのような単位で存在し、誰が管理するのでしょうか?

綱川

暗号化キーは2種類あり、1つは「テーブル空間暗号化キー」というもので、テーブル空間ごとに1つずつあります。テーブル空間暗号化キーは、そのテーブル空間内のデータを暗号化・復号するために使われます。
もう1つは「マスター暗号化キー」です。マスター暗号化キーは、すべてのテーブル空間暗号化キーを暗号化するために使われます。
それぞれの暗号化キーはランダムなビット列で、暗号化キーごとに個別の「キーストア」というファイルに暗号化して格納されます。

―暗号化キーは全て暗号化されてストレージ上で安全に保管されるということですね。マスター暗号化キーはどのような方法で暗号化されるのですか?

綱川

マスター暗号化キーは、利用者が指定するパスフレーズに基づいて暗号化されます。
最終的にセキュリティ管理者はマスター暗号化キーのパスフレーズを意識しておくだけでよいことになります。

TDEにおける暗号化キーの管理

【TDEにおける暗号化キーの管理】

―煩雑な暗号化キーの管理から開放されるのですね。他にはどのような機能強化がありますか?

綱川

暗号化したテーブルに対してもインデックススキャンができるようになっています。
pgcryptoの場合、暗号化した列のインデックスはレンジスキャンに使えませんが、TDEではこのような制限はありません。暗号化した列に対する大小比較なども問題なく行なえます。
また、記憶域のオーバーヘッドも改善しています。
pgcryptoの場合、暗号化のパディングのために暗号化データが平文より大きくなるのに対し、TDEでは暗号化してもデータの大きさが変わらずストレージのオーバーヘッドがありません。

―暗号化しても必要な記憶領域が大きくならないということですね?

綱川

そうです。ですから、システムに暗号化を取り入れるためにメモリ容量やストレージ容量を見直したり、必要に応じて追加したりという作業を行なう必要がありません。これも透過的である理由の1つです。
暗号化・復号という機能を透過的に利用できるようにすることで、私たちが提唱する「運用性/使い勝手としてのオープン」を具現化しているのです。

―暗号化を意識することなく安全なデータ管理を行なえるというのは、PostgreSQLをシステムで利用する企業も、そのシステムからサービスを受ける顧客にとっても双方にメリットがあることですね。

次ページ:「暗号化による性能への影響を極小化した」とは?

  • 1
  • 2

次へarrow-double


本ページに記載された内容は、掲載日現在のものです。その後予告なしに変更されることがあります。あらかじめご了承ください。

富士通のPostgreSQLに関する情報がここに「PostgreSQL インサイド」

製品情報

本コンテンツに関するお問い合わせ

Webでのお問い合わせ

入力フォームはこちらから

当社はセキュリティ保護の観点からSSL技術を使用しております。

お電話でのお問い合わせ

富士通コンタクトライン(総合窓口)0120-933-200

受付時間 9時~17時30分
(土曜・日曜・祝日・当社指定の休業日を除く)