使用中の暗号化アプローチの選択
項目一覧
MongoDBは、 使用中の暗号化化 に対して、 Queryable Encryptionとクライアント側フィールドレベル暗号化(CSFLE) という 2 つのアプローチを提供します。 どちらのアプローチを使用する場合でも、 自動暗号化と明示的な暗号化のどちらかを選択することもできます。
Queryable Encryption と CSFLE について
Queryable Encryption と クライアント側フィールド レベル暗号化(CSFLE) の両方により、クライアント アプリケーションはネットワーク経由でデータを転送する前にデータを暗号化できます。 機密データはクライアントによって透過的に暗号化および復号化され、暗号化された形式でのみサーバーとの間で通信されます。
機能を詳しく比較するには、「 Queryable Encryption の機能 」と「 CSFLE の機能 」を参照してください。
Considerations
Queryable Encryptionまたは CSFLE を使用するアプリケーションを実装するときは、このセクションのセキュリティに関する考慮事項を確認してください。
各アプローチの制限については、「 Queryable Encryption の制限」または「 CSFLE の制限 」を参照してください。
MongoDB サーバーとドライバーのバージョンの互換性については、「互換性 」を参照してください。
セキュリティに関する考慮事項
CSFLE およびQueryable Encryptionは、カスタマー マスター キーおよびデータ暗号化キーにアクセスする所有者に対する保証を提供しません。
CSFLE およびQueryable Encryptionは、暗号化されたデータを含むコレクションへの任意の書込み (write) アクセス権を持つノードに対する保証はありません。
MongoDB はスキーマ検証を使用して、コレクション内の特定のフィールドの暗号化を強制します。 クライアント側のスキーマがない場合、クライアントはコレクションのサーバー側スキーマをダウンロードして、暗号化するフィールドを決定します。 この問題を回避するには、 クライアント側のスキーマ検証 を使用します。
CSFLE および Queryable Encryption ではスキーマの整合性を検証するメカニズムが提供されていないため、サーバー側のスキーマに依存するということは、サーバーのスキーマが操作されていないことを信頼することを意味します。 攻撃者がサーバーを侵害した場合、スキーマを変更して、以前に暗号化されたフィールドに暗号化のラベルが付けられなくなるのです。 これにより、クライアントはそのフィールドのプレーンテキスト値を送信します。
クライアントとサーバー側スキーマの CSFLE 構成の例については、「 CSFLE サーバー側フィールド レベル暗号化強制 」を参照してください。
Queryable Encryption と CSFLE の使用
アプリケーションでは、Queryable Encryption、クライアント側のフィールドレベル暗号化、またはその両方を使用できます。 ただし、同じコレクションで両方のアプローチを使用することはできません。
次のシナリオでは、Queryable Encryption の使用を検討してください。
新しいアプリケーションを開発していて、MongoDB の最新の暗号化の機能を使用したいと考えています。
暗号化されたデータに対して、範囲指定されたプレフィックス、サフィックス、またはサブストリングのクエリを実行することがユーザーを想定しています。
アプリケーションでは、ユーザーごとまたはテナントごとに個別のキーが必要になるのではなく、特定のフィールドに単一のキーを使用できます。
CSFLE が推奨されるソリューションがあります。
アプリケーションはすでに CSFLE を使用している。
同じフィールドには異なるキーを使用する必要があります。 これは通常、テナントを分離したり、ユーザー固有のキーを使用したりするときに発生します。
データスキーマを柔軟に対応する必要があり、暗号化フィールドを追加できる可能性があります。 Queryable Encryption に暗号化されたフィールドを追加するには、メタデータコレクションとインデックスを再構築する必要があります。
暗号化されたフィールドのクエリ
Queryable Encryptionは、暗号化されたフィールドに対する等価クエリと範囲クエリをサポートします。 Queryable Encryptionを使用したプレフィックス、サフィックス、サブストリング クエリのサポートは開発中です。
クライアント側のフィールドレベル暗号化は、確定的に暗号化されたフィールドに対する等価クエリをサポートします。
サポートされているクエリ演算子の詳細については、「 Queryable Encryptionでサポートされているクエリ演算子 」および「 CSFLE 用にサポートされているクエリ演算子 」を参照してください。 MongoDB クエリ演算子の完全なリストについては、「 クエリ演算子とプロジェクション 演算子 」を参照してください。
暗号化アルゴリズム
Queryable Encryptionの新しい暗号化アルゴリズムは、 構造暗号化暗号化に基づくランダム化された暗号化を使用し、同じ入力から異なる暗号化された出力値を生成します。
MongoDB の Queryable Encryption へのアプローチの詳細については、 Queryable Encryption の概要 を参照してください。 および ステートレス ドキュメント データベース暗号化スキームの設計と分析 ホワイトペーパー。
CSFLE暗号化アルゴリズムは、ランダム化された暗号化と決定的な暗号化化 の両方をサポートしています。 ただし、サポートするのは確実に暗号化されたフィールドのクエリのみです。 決定的な暗号化では、特定の入力値は常に同じ出力値に暗号化されます。
プライベートクエリ
MongoDB は、Queryable Encryption とクライアント側フィールドレベル暗号化の両方でクエリを暗号化するため、サーバーはクリアテキストドキュメントまたはクエリ値に関する情報を持たなくなります。 Queryable Encryption では、プライベートクエリがさらにステップダウンし、ログとメタデータが編集され、クエリの存在に関する情報がスクレイピングされます。 これにより、プライバシーと機密性が強化されます。
自動暗号化と明示的暗号化のどちらかを選択する
自動暗号化の使用
クライアント アプリケーションの作成プロセスが効率化されるため、ほとんどの場合、自動暗号化を推奨します。 自動暗号化を使用すると、MongoDB は読み取りおよび書込み操作においてフィールドを自動的に暗号化および復号化します。
明示的な暗号化の使用
明示的な暗号化により、セキュリティをきめ細やかに制御できますが、コレクションの構成や MongoDB ドライバー のコード記述の複雑さは増します。 明示的な暗号化では、データベースで実行する各操作に対してドキュメント内のフィールドを暗号化する方法を指定し、このロジックをアプリケーション全体に含めます。
詳細については、「 Queryable Encryption による明示的な暗号化 」または「 CSFLE による明示的な暗号化 」を参照してください。