無料スクリプト配布のPHP.TO   PHPの実用的なtips PHPマニュアル MySQLマニュアル Apacheマニュアル PostgreSQLマニュアル マニュアル検索    

17.8. 暗号化オプション

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

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

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

特定の列に関する暗号化

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

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

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

Linuxでは "loopback device" を使用してファイルシステムの最上位で暗号化を行うことができます。 これにより、ファイルシステムパーティション全体をディスク上で暗号化することができます。 これはオペレーティングシステムにより復号化されます。 これと同等の機能は、FreeBSDではGEOMベースのディスク暗号化、 gbde と呼ばれます。 また、Windowsを含む他のオペレーティングシステムの多くでもこうした機能をサポートします。

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

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

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

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

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

SSLホスト認証

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

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

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


powered by SEO.CUG.NET