Tip

このドキュメントはAIによって翻訳されました。不正確な情報については、英語版をご参照ください

暗号化

コレクションフィールド:暗号化Professional Edition+

はじめに

顧客の電話番号、メールアドレス、カード番号といった機密性の高いビジネスデータは、暗号化してデータベースに暗号文として保存できます。

20251104192513

暗号化の仕組み

Warning

プラグインは自動的にアプリケーションキーを生成し、/storage/apps/main/encryption-field-keys ディレクトリに保存します。

アプリケーションキーのファイル名はキーIDとなり、拡張子が.keyとなります。ファイル名をむやみに変更しないでください。

アプリケーションキーファイルは適切に保管してください。もし紛失した場合、暗号化されたデータは復号できなくなります。

サブアプリケーションでプラグインを有効にしている場合、キーのデフォルト保存ディレクトリは /storage/apps/${サブアプリケーション名}/encryption-field-keys となります。

動作原理

エンベロープ暗号化方式を採用しています。

20251118151339

キーの作成プロセス

  1. 暗号化フィールドを初めて作成する際、システムは自動的に32ビットのアプリケーションキーを生成し、Base64エンコード形式でデフォルトの保存ディレクトリに保存します。
  2. 新しい暗号化フィールドを作成するたびに、そのフィールド用にランダムな32ビットのフィールドキーが生成されます。その後、アプリケーションキーとランダムに生成された16ビットのフィールド暗号化ベクトルAES暗号化アルゴリズム)を使用して暗号化され、fieldsテーブルのoptionsフィールドに保存されます。

フィールド暗号化プロセス

  1. 暗号化フィールドにデータを書き込むたびに、まずfieldsテーブルのoptionsフィールドから暗号化されたフィールドキーフィールド暗号化ベクトルを取得します。
  2. アプリケーションキーフィールド暗号化ベクトルを使用して、暗号化されたフィールドキーを復号します。その後、フィールドキーとランダムに生成された16ビットのデータ暗号化ベクトルAES暗号化アルゴリズム)を使用してデータを暗号化します。
  3. 復号されたフィールドキーを使用してデータを署名し(HMAC-SHA256ダイジェストアルゴリズム)、Base64エンコードで文字列に変換します(生成されたデータ署名は、後続のデータ検索に使用されます)。
  4. 16ビットのデータ暗号化ベクトルと暗号化されたデータ暗号文をバイナリ結合し、Base64エンコードで文字列に変換します。
  5. データ署名のBase64エンコード文字列と、結合されたデータ暗号文のBase64エンコード文字列を.区切りで結合します。
  6. 最終的に結合された文字列をデータベースに保存します。

環境変数

アプリケーションキーを指定したい場合は、環境変数 ENCRYPTION_FIELD_KEY_PATH を使用できます。プラグインは、そのパスにあるファイルをアプリケーションキーとして読み込みます。

アプリケーションキーファイルの要件:

  1. ファイル拡張子は.keyである必要があります。
  2. ファイル名はキーIDとして使用されます。一意性を保証するためにUUIDを使用することをお勧めします。
  3. ファイルの内容は、Base64エンコードされた32バイトのバイナリデータである必要があります。
ENCRYPTION_FIELD_KEY_PATH=/path/to/my/app-keys/270263524860909922913.key

フィールド設定

20240802173721

暗号化後のフィルタリングへの影響

暗号化されたフィールドは、「等しい」「等しくない」「存在する」「存在しない」といったフィルタリングのみをサポートします。

20240802174042

データフィルタリングの仕組み:

  1. 暗号化フィールドのフィールドキーを取得し、アプリケーションキーを使用してフィールドキーを復号します。
  2. フィールドキーを使用して、ユーザーが入力した検索テキストを署名します(HMAC-SHA256ダイジェストアルゴリズム)。
  3. 署名された検索テキストに.区切り文字を結合し、データベース内で暗号化フィールドに対して前方一致検索を実行します。

キーローテーション

Warning

nocobase key-rotation コマンドを使用する前に、アプリケーションがこのプラグインをロードしていることを確認してください。

アプリケーションを新しい環境に移行した後、古い環境と同じキーを使い続けたくない場合は、nocobase key-rotation コマンドを使用してアプリケーションキーを置き換えることができます。

キーローテーションコマンドを実行するには、古い環境のアプリケーションキーを指定する必要があります。コマンド実行後、新しいアプリケーションキーが生成され、古いキーと置き換えられます。新しいアプリケーションキーはBase64エンコード形式でデフォルトの保存ディレクトリに保存されます。

# --key-path は、データベースの暗号化データに対応する古い環境のアプリケーションキーファイルを指定します。
 yarn nocobase key-rotation --key-path /path/to/old-app-keys/270263524860909922913.key

サブアプリケーションのアプリケーションキーを置き換える場合は、--app-name パラメータを追加してサブアプリケーションのnameを指定する必要があります。

 yarn nocobase key-rotation --app-name a_w0r211vv0az --key-path /path/to/old-app-keys/270263524860909922913.key