フィールドと暗号化タイプ
このページでは、MongoDB がクライアント側フィールドレベル暗号化(CSFLE)を実行するために使用する暗号化のタイプについて説明します。 CSFLE を実行するために、MongoDB は次のタイプの暗号化アルゴリズムを使用します。
決定的な暗号化
決定的な暗号化アルゴリズムにより、アルゴリズムが実行されるたびに、特定の入力値が常に同じ出力値に暗号化されることが保証されます。 決定的な暗号化は読み取り操作のサポートを強化しますが、濃度の低い暗号化データは頻度分析リカバリの影響を受けやすくなります。
読み取り操作で使用されていない機密フィールドの場合、アプリケーションは、頻度分析回復からの保護を向上させるために、ランダム化された暗号化を使用する場合があります。
重要
オブジェクトと配列の確定的な暗号化はサポートされていない
決定的な暗号化では、オブジェクト全体と配列全体の暗号化はサポートされていません。 詳細と例については、「オブジェクトと配列の暗号化のサポート 」を参照してください。
確定的に暗号化されたフィールド上のドキュメントのクエリ
標準の MongoDB ドライバーと mongosh
メソッドを使用して、確定的に暗号化されたフィールドをクエリできます。
決定的に暗号化されたフィールドでサポートされているすべてのクエリ演算子の完全なリストを表示するには、「自動暗号化がサポートする操作 」を参照してください。
暗号化されたデータの読み取りの詳細については、「暗号化された読み取り 」を参照してください。
注意
CSFLE が設定されていないクライアントからのクエリ
クライアント側フィールド レベル暗号化(CSFLE)を使用するように構成されていないクライアントを使用して暗号化されたフィールドをクエリすると、クエリは null 値を返します。 CSFLE が設定されていないクライアントは、暗号化されたフィールドをクエリできません。
ランダム化された暗号化
The randomized encryption algorithm ensures that a given input value always encrypts to a different output value each time the algorithm is executed. ランダム化された暗号化はデータの機密性の強力な保証を提供しますが、クエリを評価するために暗号化されたフィールドで実行する必要がある読み取り操作のサポートも妨げられます。
読み取り操作で使用される機密性の高いフィールドの場合、暗号化されたフィールドの読み取りサポートを向上させるために、アプリケーションは決定的な暗号化を使用する必要があります。
オブジェクトと配列の暗号化のサポート
オブジェクト全体または配列全体の暗号化は、ランダム化された暗号化でのみサポートされます。
たとえば、次のドキュメントについて考えてみます。
{ "personal_information" : { "ssn" : "123-45-6789", "credit_score" : 750, "credit_cards" : [ "1234-5678-9012-3456", "9876-5432-1098-7654"] }, "phone_numbers" : [ "(212) 555-0153" ] }
personal_information
phone_numbers
ランダム化された暗号化アルゴリズムを使用して フィールドと フィールドを暗号化すると、オブジェクト 全体が 暗号化されます。これにより、その下にネストされているすべてのフィールドが保護されますが、ネストされたフィールドに対するクエリも防止されます。
暗号化でサポートされている操作の詳細については、「自動暗号化がサポートする操作 」を参照してください。
ランダムに暗号化されたフィールド上のドキュメントのクエリ
ランダムに暗号化されたフィールド上のドキュメントを直接クエリすることはできません。 ただし、別のフィールドを使用すると、ランダムに暗号化されたフィールド データの近似値を含むドキュメントを見つけることができます。
たとえば、 ssn
フィールドがランダムに暗号化されている次のドキュメントを考えてみましょう。
{ "_id": "5d6ecdce70401f03b27448fc", "name": "Jon Doe", "ssn": 241014209, "bloodType": "AB+", "medicalRecords": [ { "weight": 180, "bloodPressure": "120/80" } ], "insurance": { "provider": "MaestCare", "policyNumber": 123142 } }
ssn
フィールドをクエリする代わりに、 ssn
フィールドの最後の4桁を含むlast4ssn
という別のプレーンテキスト フィールドを追加できます。 次に、 last4ssn
フィールドをssn
のプロキシとしてクエリできます。
{ "_id": "5d6ecdce70401f03b27448fc", "name": "Jon Doe", "ssn": 241014209, "last4ssn": 4209, "bloodType": "AB+", "medicalRecords": [ { "weight": 180, "bloodPressure": "120/80" } ], "insurance": { "provider": "MaestCare", "policyNumber": 123142 } }