文档菜单
文档首页
/
MongoDB 手册
/ / / / /

字段和加密类型

本页内容

  • 确定性加密
  • 在确定性加密字段上查询文档
  • 随机加密
  • 支持加密对象和数组
  • 在随机加密字段上查询文档

本页面描述了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_informationphone_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
}
}

返回

密钥管理