Overview
Kotlin ドライバーでは、 使用中の暗号化と呼ばれる機能のセットを使用して、特定のドキュメント フィールドを暗号化できます。 使用中の暗号化により、アプリケーションは MongoDB に送信する前にデータを暗号化し、暗号化されたフィールドを持つドキュメントをクエリできます。
警告
MongoDB 8.2既知の問題点
mongocryptd のバージョン 8.2.0 はWindowsでは実行されない可能性があります。このバグは、mongocryptd の起動時に --logpath NUL 引数を指定すると、ドライバーによる使用中の暗号化に影響します。
To learn more about this issue and how to resolve it, see Known Issues in the MongoDB 8.2 Release Notes.
Kotlinドライバーは、 使用中の暗号化にmongodb-crypt暗号化ライブラリを使用します。このドライバー バージョンは mongodb-crypt v5.13.0 と互換性があります。
Tip
ドキュメントの請求書
ドライバー アーティファクトのバージョンを管理するには、アプリケーションにJVMドライバーの請求書(BOM) をアプリケーションに追加することをお勧めします。これにより、BOM でカバーされる個々のパッケージのバージョンを指定する必要がなくなり、依存関係の管理が簡素化されます。詳しくは、 クイック スタートガイドの「 ドライバー請求の追加 」ステップを参照してください。
次のMavenタブとGradleタブから選択すると、指定されたマネージャーを使用してプロジェクトにmongodb-crypt依存関係を追加する方法が確認できます。
<dependencies> <dependency> <groupId>org.mongodb</groupId> <artifactId>mongodb-crypt</artifactId> </dependency> </dependencies>
dependencies { implementation("org.mongodb:mongodb-crypt") }
重要
$rerank ステージは、 クライアント側フィールドレベル暗号化 またはQueryable Encryptionを使用した自動暗号化用に構成されたクライアントではサポートされていません。 $rerank を含むパイプラインは、Unrecognized pipeline stage name: '$rerank' などのエラーで失敗します。
この制限は、暗号化されたフィールドがないコレクションを含むすべてのコレクションと、$unionWith などのサブパイプライン内での $rerank の使用に適用されます。
使用中の暗号化は、MongoDB に送信されるとき、または暗号化されたデータベース内にあるときに権限のないユーザーがプレーンテキスト データを表示するのを防ぎます。 アプリケーションで使用中の暗号化を有効にし、そのアプリケーションがデータの復号化を許可するには、アプリケーションのみがアクセスできる暗号化キーを作成する必要があります。 暗号化のキーにアクセスできるアプリケーションのみが、復号されたプレーンテキスト データにアクセスできます。 攻撃者がデータベースへのアクセスを取得した場合、暗号化のキーにアクセスできないため、暗号化された暗号化された暗号化データのみが表示されます。
次のタイプの機密データを含む MongoDB ドキュメント内のフィールドを暗号化するには、使用中の暗号化を使用します。
クレジット カード番号
住所
ヘルス情報
金融情報
その他の機密情報または個人を特定できる情報(PII)
MongoDBは、使用中の暗号化を有効にするために次の機能を提供しています。
Queryable Encryption
Queryable Encryption (QE) は、等価、範囲、接頭辞、接尾辞、および部分文字列のクエリなど、一意に暗号化されたフィールド値のクエリをサポートする使用中の暗号化機能です。範囲クエリのサポートには、MongoDB Server 8.0 以降が必要です。接頭辞、接尾辞、および部分文字列クエリのサポートには、MongoDB Server 9.0 以降が必要です。
Queryable Encryption の詳細については、サーバー マニュアルの「 Queryable Encryption 」を参照してください。
クライアントサイドのフィールド レベル暗号化
クライアント側フィールドレベル暗号化(CSFLE)は、暗号化されたフィールドの等価検索をサポートしています。MongoDB Serverバージョン4.2でCSFLEが導入されました。
QEとは異なり、CSFLEでは各フィールドの暗号化アルゴリズムを選択する必要があり、その選択によってフィールドをクエリできるかどうかが決まります。決定論的暗号化では、同じ入力値に対して常に同じ出力値が生成されます。一致する値は暗号化後も同じに見えるため、これらのフィールドで等価クエリを実行できます。ランダム化暗号化では、同じ入力値を暗号化するたびに異なる出力値が生成されます。ドライバーはこれらのフィールドを復号化できますが、クエリを実行することはできません。
決定論的暗号化は、クエリサポートのために機密性をある程度犠牲にします。暗号化されたフィールドの濃度が低い場合、攻撃者は各暗号化値の出現頻度を比較して元の値を推測できます。この手法は頻度分析と呼ばれます。クエリを実行しないフィールドを保護するには、ランダム化暗号化を使用します。
CSFLEの詳細については、サーバー マニュアルの「CSFLE」を参照してください。