字段和加密类型
本页面描述了MongoDB用于执行客户端字段级加密(CSFLE)所使用的加密类型。为了执行CSFLE,MongoDB使用以下类型的加密算法:
确定性加密
确定性加密算法确保每次执行算法时,给定的输入值总是加密为相同的输出值。虽然确定性加密提供了更大的读取操作支持,但低基数加密数据容易受到频率分析恢复的攻击。
对于不用于读取操作的非敏感字段,应用程序可以使用随机加密以增强对频率分析恢复的保护。
在确定性加密字段上查询文档
您可以使用标准MongoDB驱动程序和mongosh
方法来查询确定性加密字段。
要查看所有支持的确定性加密字段查询运算符的完整列表,请参阅自动加密支持的操作.
有关加密数据的读取的更多信息,请参阅加密读取。
注意
未配置CSFLE的客户端查询
当您使用未配置为使用客户端字段级加密(CSFLE)的客户端查询加密字段时,查询返回空值。未配置CSFLE的客户端无法查询加密字段。
随机加密
随机加密算法确保每次执行算法时,给定的输入值都加密为不同的输出值。虽然随机加密提供了数据机密性的最强保证,但它也阻止了对加密字段上的任何读取操作的支持。
对于在读取操作中使用敏感字段,应用程序必须使用确定性加密来提高加密字段的读取支持。
支持加密对象和数组
仅支持使用随机加密加密整个对象或数组。
例如,考虑以下文档:
{ "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
字段的情况下,添加一个名为 last4ssn
的纯文本字段,该字段包含 ssn
字段的最后4位数字。然后您可以将 last4ssn
字段作为 ssn
的代理进行查询
{ "_id": "5d6ecdce70401f03b27448fc", "name": "Jon Doe", "ssn": 241014209, "last4ssn": 4209, "bloodType": "AB+", "medicalRecords": [ { "weight": 180, "bloodPressure": "120/80" } ], "insurance": { "provider": "MaestCare", "policyNumber": 123142 } }