Transparent Data Encryption
===========================

透過的データ暗号化TDEは、バージョン15からEDB EDB Postgres Advanced
ServerおよびEDB Postgres Extended
Serverでサポートされているオプション機能です。

データベースシステムに保存されているユーザーデータを暗号化します。この暗号化はユーザーに対して透過的です。ユーザーデータには、テーブルやその他のオブジェクトに格納されている実際のデータ、およびオブジェクトの名前などのシステムカタログデータが含まれます。

.. figure:: /images/tde1.png
   :width: 70% 
   :alt: Architecture diagram

   Architecture diagram

TDEで暗号化されるものは何ですか?
--------------------------------

TDEは以下を暗号化します

-  TOASTテーブルとシステムカタログを含む、すべてのフォークを含むテーブル、シーケンス、インデックスの基になるファイル。これらのファイルは
   *データファイル* と呼ばれます。

-  ログ先行書き込みWAL。

-  クエリ処理およびデータベースシステムの操作中に使用されるさまざまな一時ファイル。

..  Note Implications::
   -ストリーミングレプリケーションとアーカイブを含む、TDEを使用してサーバーから取得したWALは暗号化されます。 - 物理レプリカは、プライマリサーバーと同じ方法で同じキーを使用して暗号化されるか、暗号化されません。 - サーバーがTDEを使用する場合、ベースバックアップは自動的に暗号化されます。

以下はTDEによって暗号化されず、その他の方法で偽装されません。

-  トランザクションステータスpg_subtrans、pg_xactなどのユーザーデータを含まないデータベースシステムの動作に関する内部メタデータたとえば、pg_subtrans、pg_xact。

-  データディレクトリ内のファイル名とファイルシステム構造。これは、データベースシステムの全体のサイズ、データベースの数、テーブルの数、それらの相対サイズ、および最終アクセス時間などのファイルシステムのメタデータがすべて復号化せずに可視であることを意味します。

-  外部テーブルのデータ。

-  サーバー診断ログ。

-  構成ファイル。

..  Note Implications::
   論理レプリケーションはTDEの影響を受けません。パブリッシャーとサブスクライバーは、異なる暗号化設定を持つことができます。論理レプリケーションプロトコルのペイロードは暗号化されません。 SSLが使用できます。

TDEはパフォーマンスにどのような影響を与えますか?
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

TDEのパフォーマンスへのインパクトは低いです。詳細については、
 `Transparent Data Encryption Impacts on EDB Postgres Advanced Server 15 <https://www.enterprisedb.com/blog/TDE-Postgres-Advanced-Server-15-Launch>`_ ブログを参照してください。

TDEはどのように動作しますか?
----------------------------

TDEは、データベースサーバーおよびバックアップストレージ上のオペレーティングシステムファイルのデータの不正な表示を防ぎます。データは、盗難または置き忘れられた場合、未承認のユーザーが理解できなくなります。

データの暗号化と復号化はデータベースによって管理され、アプリケーションの変更やクライアントドライバーの更新は必要ありません。

EDB Postgres Advanced ServerおよびEDB Postgres Extended
Serverは、データベースの外部のキー管理へのフックを提供します。これらのフックにより、単純なパスフレーズの暗号化/復号化、またはエンタープライズキー管理ソリューションとの統合が可能になります。詳細については、
:ref:`Securing the data encryption key <Securing the data encryption key>` を参照してください。

TDEはどのようにデータを暗号化しますか?
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

EDB
TDEは `OpenSSL <https://openssl-library.org/>`_ を使用して、AES暗号化アルゴリズムでデータファイルを暗号化します。
Windowsシステムでは、TDEは `OpenSSL 3 <https://docs.openssl.org/3.0/>`_  を使用します。
Linuxシステムでは、TDEはホストオペレーティングシステムにインストールされているOpenSSLバージョンを使用します。インストールされたバージョンを確認するには、\ ``openssl version``
を実行します。詳細については、 `OpenSSL documentation <https://docs.openssl.org/master/>`_ を参照してください。
OpenSSLコミュニティが提供していないカスタムビルドを使用している場合は、ベンダーのドキュメントを参照してください。

バージョン16以降、EDB
TDEは、Postgresクラスターの初期化中にAES-128およびAES-256暗号化アルゴリズムを選択するオプションを導入します。
AES-128とAES-256の選択は、パフォーマンスとセキュリティ要件のバランス次第です。
AES-128は、一般的にパフォーマンス効率と低消費電力が重要な環境に推奨され、ほとんどのアプリケーションに適しています。逆に、AES-256は、最高レベルのセキュリティが必要なシナリオ、多くの場合規制上の義務によって駆動される場合にお勧めします。

TDEは、データファイルの暗号化にAES-128-XTSまたはAES-256-XTSアルゴリズムを使用します。
XTSは、 *調整値* と呼ばれる2番目の値を使用して、暗号化を強化します。
TDEを使用したXTS調整値は、データベースOID、relfileノード、およびブロック番号を使用します。

ログ先行書き込みWALファイルの場合、TDEはAES-128-CTRまたはAES-256-CTRを使用し、WALのログシーケンス番号LSNをカウンタコンポーネントとして組み込みます。

ブロックによってアクセスされる一時ファイルも、AES-128-XTSまたはAES-256-XTSを使用して暗号化されます。他の一時ファイルは、AES-128-CBCまたはAES-256-CBCを使用して暗号化されます。

TDEではデータはどのようにディスクに保存されますか?
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

この例では、 ``tbfoo`` テーブルのデータが暗号化されます。
``pg_relation_filepath`` ファンクションは、\ ``tbfoo``
テーブルに対応するデータファイルを見つけます。

.. code:: sql

   insert into tbfoo values (abc,123);
   INSERT 0 1

   select pg_relation_filepath(tbfoo);

    pg_relation_filepath
   - ---------------------
    base/5/16416

データをgrepして文字を検索しても、何も返されません。最後の5行を表示すると、暗号化されたデータが返されます。

.. code:: shell

   $ hexdump -C 16416 | grep abc
   $

   $ hexdump -C 16416 | tail -5
   00001fc0  c8 0f 1d c8 9a 63 3d dc  7d 4e 68 98 b8 f2 5e 0a  |.....c=.}Nh...^.|
   00001fd0  9a eb 20 1d 59 ad be 94  6e fd d5 6e ed 0a 72 8c  |.. .Y...n..n..r.|
   00001fe0  7b 14 7f de 5b 63 e3 84  ba 6c e7 b0 a3 86 aa b9  |{...[c...l......|
   00001ff0  fe 4f 07 50 06 b7 ef 6a  cd f9 84 96 b2 4b 25 12  |.O.P...j.....K%.|
   00002000

.. toctree::
  :maxdepth: 3

  Enabling--index
  Differences_from_Postgres--index
  Working_with_encrypted_files--index
  Upgrading--index
  Testing--index
