このドキュメントはAIによって翻訳されました。不正確な情報については、英語版をご参照ください
暗号化
コレクションフィールド:暗号化Professional Edition+はじめに
顧客の電話番号、メールアドレス、カード番号といった機密性の高いビジネスデータは、暗号 化してデータベースに暗号文として保存できます。

暗号化の仕組み
プラグインは自動的にアプリケーションキーを生成し、/storage/apps/main/encryption-field-keys ディレクトリに保存します。
アプリケーションキーのファイル名はキーIDとなり、拡張子が.keyとなります。ファイル名をむやみに変更しないでください。
アプリケーションキーファイルは適切に保管してください。もし紛失した場合、暗号化されたデータは復号できなくなります。
サブアプリケーションでプラグインを有効にしている場合、キーのデフォルト保存ディレクトリは /storage/apps/${サブアプリケーション名}/encryption-field-keys となります。
動作原理
エンベロープ暗号化方式を採用しています。

キーの作成プロセス
- 暗号化フィールドを初めて作成する際、システムは自動的に32ビットの
アプリケーションキーを生成し、Base64エンコード形式でデフォルトの保存ディレクトリに保存します。 - 新しい暗号化フィールドを作成するたびに、そのフィールド用にランダムな32ビットの
フィールドキーが生成されます。その後、アプリケーションキーとランダムに生成された16ビットのフィールド暗号化ベクトル(AES暗号化アルゴリズム)を使用して暗号化され、fieldsテーブルのoptionsフィールドに保存されます。
フィールド暗号化プロセス
- 暗号化フィールドにデータを書き込むたびに、まず
fieldsテーブルのoptionsフィールドから暗号化されたフィールドキーとフィールド暗号化ベクトルを取得します。 アプリケーションキーとフィールド暗号化ベクトルを使用して、暗号化されたフィールドキーを復号します。その後、フィールドキーとランダムに生成された16ビットのデータ暗号化ベクトル(AES暗号化アルゴリズム)を使用してデータを暗号化します。- 復号された
フィールドキーを使用してデータを署名し(HMAC-SHA256ダイジェストアルゴリズム)、Base64エンコードで文字列に変換します(生成されたデータ署名は、後続のデータ検索に使用されます)。 - 16ビットの
データ暗号化ベクトルと暗号化されたデータ暗号文をバイナリ結合し、Base64エンコードで文字列に変換します。 データ署名のBase64エンコード文字列と、結合さ れたデータ暗号文のBase64エンコード文字列を.区切りで結合します。- 最終的に結合された文字列をデータベースに保存します。
環境変数
アプリケーションキーを指定したい場合は、環境変数 ENCRYPTION_FIELD_KEY_PATH を使用できます。プラグインは、そのパスにあるファイルをアプリケーションキーとして読み込みます。
アプリケーションキーファイルの要件:
- ファイル拡張子は
.keyである必要があります。 - ファイル名はキーIDとして使用されます。一意性を保証するためにUUIDを使用することをお勧めします。
- ファイルの内容は、Base64エンコードされた32バイトのバイナリデータである必要があります。
フィールド設定

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

データフィルタリングの仕組み:
- 暗号化フィールドの
フィールドキーを取得し、アプリケ ーションキーを使用してフィールドキーを復号します。 フィールドキーを使用して、ユーザーが入力した検索テキストを署名します(HMAC-SHA256ダイジェストアルゴリズム)。- 署名された検索テキストに
.区切り文字を結合し、データベース内で暗号化フィールドに対して前方一致検索を実行します。
キーローテーション
nocobase key-rotation コマンドを使用する前に、アプリケーションがこのプラグインをロードしていることを確認してください。
アプリケーションを新しい環境に移行した後、古い環境と同じキーを使い続けたくない場合は、nocobase key-rotation コマンドを使用してアプリケーションキーを置き換えることができます。
キーローテーションコマンドを実行するには、古い環境のアプリケーションキーを指定する必要があります。コマンド実行後、新しいアプリケーションキーが生成され、古いキーと置き換えられます。新しいアプリケーションキーはBase64エンコード形式でデフォルトの保存ディレクトリに保存されます。
サブアプリケーションのアプリケーションキーを置き換える場合は、--app-name パラメータを追加してサブアプリケーションのnameを指定する必要があります。

