データストレージ暗号化とは、データやclogなどディスクに保存されるデータをユーザーが意識することなく暗号化する技術であり、これを透過的データ暗号化(TDE)と呼びます。データはストレージデバイスへ書き込まれる前に自動的に暗号化され、読み取り時には自動的に復号化されます。このプロセスはユーザーにとって透過的であり、ハッカーや悪意のあるユーザーはデータファイル、データベースバックアップ、またはディスクから機密情報を読み取ることができません。
OceanBaseデータベースのユーザーデータおよびバックアップは最終的にバイナリ形式で、ディスクやその他の永続的なストレージに保存されます。データへのアクセス権限を持たないユーザーがこれらのストレージにアクセスし、外部からデータストレージを読み取ったり解読したりすることで、データ漏洩が発生する可能性があります。OceanBaseデータベースのデータは圧縮形式で保存されており一定の機密性を備えていますが、それでも破られるリスクは存在します。メモリやハードディスクに保存されているデータの安全を保護するため、OceanBaseデータベースは現段階で国際的に主流の暗号化アルゴリズムであるAESをサポートしています。同時に、中国独自のSM4暗号アルゴリズムもサポートしています。
二段階の鍵体系
透過的データ暗号化は、二段階の鍵体系を用いて暗号化・復号化機能を実現します。暗号化を有効にする最小単位はデータベース内のテーブルであり、暗号化対象のテーブルは暗号化されたテーブルスペース(Tablespace)に配置する必要があります。OceanBaseデータベースにおけるデータの暗号化単位はテーブルスペースであり、テーブルスペースはOracleデータベースとの互換性を考慮して設計された概念であり、簡単に言えばテーブルスペースとは一連のテーブルの集合ということです。各暗号化されたテーブルスペースには暗号化アルゴリズムとそれに対応するデータ鍵が設定されており、テーブルスペース内のデータを暗号化するために使用されます。各テナントにはメインキーが1つあり、テーブルスペースのデータ鍵を暗号化するために使用されます。不正な復号操作を防ぐため、通常メインキーは専用のKeyStoreに格納されます。

データの安全性を確保するため、ユーザーはKeyStoreを直接使用してメインキーおよび暗号化キー情報を閲覧したり、メインキーおよび暗号化キーを指定したりすることはできません。メインキーと暗号化キーはシステムによって生成され、明文でディスクに直接保存されることはありません。これによりシステムの安全性が大幅に向上します。
KeyStoreはメインキーの管理モジュールであり、鍵管理サービスを提供します。KeyStoreの機能には以下が含まれます:
- メインキーの生成:メインキーはKeyStoreが暗号化アルゴリズムに基づいて生成し、ユーザーが指定することはできません。これによりより高い安全性が確保されます。
- メインキー関連情報の保存:メインキー関連情報に基づいてKeyStoreはメインキーを取得でき、KeyStoreは関連情報の複数のレプリカ特性、一貫性特性、および障害処理を保証する必要があります。
- メインキー管理とマルチバージョン制御:KeyStoreはメインキーの変更とマルチバージョン制御を担当し、マルチバージョンメカニズムにより、新しく生成されたメインキーは即時に有効になる必要がなく、徐々にメインキーの置き換えを完了することができます。
- メインキーの高可用性サービスの取得。
- KeyStoreの操作命令の処理。
透過的暗号化を有効にする際には、そのメインキーの保存方法を指定する必要があり、構成パラメータtde_methodで制御します。その値は以下の通りです:
tde_method 値 |
意味 |
|---|---|
none |
ストレージ暗号化を無効にする |
internal |
有効にし、プライマリキーを内部テーブルに格納する |
bkmi |
有効にし、プライマリキーを外部のBKMIシステムに格納する |
OceanBaseデータベースでは、現在「プライベートクラウド」はinternal方式の透過的テーブルスペース暗号化のみをサポートしています。internal方式ではメインキーを内部テーブルに保存し、その暗号化情報は主に内部テーブルで管理されます。ログ再生時の循環依存を避けるため、この暗号化方式ではclogは暗号化されません。
暗号化を有効にすると、メインキーを使用してデータ鍵を暗号化し、暗号化されたデータ鍵の暗号文を得ます。この暗号文は内部テーブル、マクロブロックヘッダー、Clogヘッダーに保存され、データ鍵はどこにも明文で保存されることはありません。データの暗号化・復号化が必要な場合、メインキーを使用してこの暗号文を復号し、データ鍵を得てから、マクロブロックまたはclog内のユーザーデータに対する暗号化・復号化操作を行います。
使用制限:
- システムテナントは暗号化を有効にすることができません。
- テナントがストレージ暗号化を設定した後、テナントを再構築しない限り、他の暗号化方式に切り替えることはできません。
暗号化の発効メカニズム
ユーザーがディスクに保存するデータには、clogとマクロブロックの2種類があり、データが実際にディスクに書き込まれた時点でのみ暗号化が有効になります。メモリ内のデータは暗号化されません。元々暗号化されていなかったテーブルを暗号化に変更した場合、既にディスクに保存されている未暗号化のclogやマクロブロックデータは暗号化されず、その後新たにディスクに書き込まれるデータのみが暗号化されます。各clogと各マクロブロックには暗号化メタ情報が記録されるため、暗号化されたデータと暗号化されていないデータは同時に存在することが可能です。
clogは追加書き込み方式でディスクに書き込まれるため、古い未暗号化のclogは決して暗号化されることはありません。暗号化を有効にして一定期間経過し、古いclogがすべて回収されると、ディスク上のclogデータはすべて暗号化されたデータになります。マクロブロックデータについては、ダンプやコンパクション時にのみ書き込みが行われるため、手動でフルコンパクションをトリガーして未暗号化のマクロブロックデータを暗号化されたものに書き直すことができます。
対応する暗号化アルゴリズム
OceanBaseデータベースは現在、国際的に主流の暗号化アルゴリズムであるAESをサポートしており、同時にSM4という中国独自の暗号化アルゴリズムもサポートしています。
| アルゴリズム | キー長 | モード |
|---|---|---|
| AES | 128ビット 192ビット 256ビット | ECB、GCM |
| SM4 | 128ビット | CBC、GCM |