他のバージョンの文書 15 | 14 | 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

17.8. 暗号化オプション

PostgreSQLは、複数レベルの暗号化を備え、データベースサーバ自身、管理者の注意不足、安全ではないネットワークを原因とした漏洩からデータを柔軟に保護することができます。 また、医療記録や金融取引など高セキュリティが求められるデータを格納する場合に暗号化が必要な場合もあります。

パスワード格納に関する暗号化

デフォルトでは、データベースユーザのパスワードはMD5ハッシュとして格納されます。 ですので、ユーザに割り当てられているパスワードは管理者でも分かりません。 MD5暗号化がクライアント認証に使用されている場合、平文のパスワードはサーバ上に一時的にも存在することはありません。 ネットワーク上に流れる前にクライアントがMD5暗号化を行うからです。

特定の列に関する暗号化

pgcryptoモジュールにより、あるフィールドを暗号化して保存することができます。 データの一部が極秘データであるような場合に有用です。 クライアントが提供した復号化用のキーで、サーバ上のデータを復号化し、クライアントに返されます。

復号化されたデータと復号化用のキーは、復号処理中およびクライアントサーバ間の通信中サーバ上に存在している時間があります。 このため、データベースサーバへのすべてのアクセス権限を持つユーザ(例えばシステム管理者)によって、データとキーが盗まれるわずかな時間があります。

データパーティションに関する暗号化

ストレージの暗号化は、ファイルシステムレベルまたはブロックレベルで行うことができます。 Linuxファイルシステムの暗号化オプションは、eCryptfsのとEncFSを持っていますFreeBSDはPEFはを使用することができます。 ブロックレベルまたはフルディスク暗号化オプションは、Linuxでは dm-crypt + LUKS と GEOMモジュールがあります。FreeBSDには geliとgbdeがあります。また、 これにより、ファイルシステムパーティション全体をディスク上で暗号化することができます。 他の多くのオペレーティングシステムは、Windowsを含め、この機能をサポートしています。

この機構により、ディスク装置やコンピュータ全体が盗まれた場合でも、ディスクから平文のデータが読み取られることを防止できます。 ファイルシステムがマウントされている時は、この機構による保護は働きません。 マウント時にはオペレーティングシステムが復号化したデータを提供するからです。 しかし、ファイルシステムをマウントするためになんらかの方法で暗号化キーをオペレーティングシステムに渡さなければなりません。 そのディスク装置をマウントするホストのどこかに暗号化キーを格納している場合もあります。

ネットワーク越しのパスワード暗号化

MD5認証方式は、サーバにパスワードを送信する前に、パスワードを二重に暗号化します。 まず、ユーザ名を元にパスワードをMD5で暗号化します。 そして、データベース接続が確立した時に、ランダムなソルトを使用して更に暗号化します。 この二重に暗号化された値が、ネットワーク越しにサーバへ渡されます。 二重の暗号化により、パスワードの盗聴を防ぐだけではなく、将来確立する別の接続で同じ暗号化値が使用されなくなります。

ネットワーク越しのデータ暗号化

SSL接続により、ネットワーク越しに送信されるデータ(パスワード、問い合わせ、結果のデータ)はすべて暗号化されます。 pg_hba.confファイルを使用して、管理者はどのホストは暗号化しない接続を使用し(host)、どのホストがSSLで暗号化された接続を必要とするか(hostssl)を指定することができます。 また、SSL経由のサーバとの接続のみを使用するようにクライアントで指定することもできます。 StunnelSSHを使用して暗号化転送を行うこともできます。

SSLホスト認証

クライアントとサーバの両方で証明書を互いに提供することができます。 これには両方で追加の設定を行わなければなりませんが、これにより単なるパスワードの使用よりも強力な身元の検証を行うことができます。 クライアントから送信されたパスワードを盗聴する偽装サーバからコンピュータを保護します。 また、クライアントとサーバとの間にあるコンピュータがサーバになりすまし、クライアントとサーバ間で流れるデータを読み取り中継する、"中間者"攻撃から保護することもできます。

クライアントサイドの暗号化

サーバマシンのシステム管理者を信頼できない場合、クライアント側でデータを暗号化する必要があります。 この場合、平文のデータはデータベースサーバ上に存在しません。 データはサーバに送信される前にクライアント上で暗号化されます。 また、使用する前にデータベースからの結果をクライアントで復号化しなければなりません。