Docs Menu
Docs Home
/
MongoDBマニュアル
/ / / / /

フィールドと暗号化タイプ

項目一覧

  • 決定的な暗号化
  • 確定的に暗号化されたフィールド上のドキュメントのクエリ
  • ランダム化された暗号化
  • オブジェクトと配列の暗号化のサポート
  • ランダムに暗号化されたフィールド上のドキュメントのクエリ

このページでは、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_informationphone_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
}
}

戻る

キー マネジメント