Docs 菜单
Docs 主页
/
MongoDB Manual
/ / /

选择正在使用的加密方法

在此页面上

  • 关于 Queryable Encryption 和 CSFLE
  • Considerations
  • 安全考虑因素
  • 使用 Queryable Encryption 和 CSFLE
  • 查询加密字段
  • 加密算法
  • 私有查询
  • 在自动加密和显式加密之间进行选择
  • 使用自动加密
  • 使用显式加密

MongoDB提供两种正在使用的加密方法:可Queryable Encryption客户端字段级加密(CSFLE)。使用任一方法时,您都可以在自动加密和显式加密之间进行选择。

可查询Queryable Encryption和客户端字段级加密 (CSFLE) 都允许客户端应用程序在通过网络传输数据之前对其进行加密。 敏感数据由客户端透明地加密和解密,并且仅以加密形式与服务器通信。

要详细比较功能,请参阅可查询加密功能CSFLE 功能。

在实施使用Queryable Encryption或 CSFLE 的应用程序时,请查看本节中的安全注意事项。

有关每种方法的限制,请参阅Queryable Encryption 限制CSFLE 限制。

有关 MongoDB 服务器和驱动程序版本兼容性,请参阅兼容性。

  • CSFLE 和Queryable Encryption不提供任何ACID 一致性保证以防止攻击者访问权限您的客户主密钥和数据加密密钥。

  • CSFLE 和Queryable Encryption不能ACID 一致性保证对手可以对包含加密数据的集合进行任意写入访问权限。

  • MongoDB 使用模式验证来实施集合中特定字段的加密。如果没有客户端模式,客户端将下载集合的服务器端模式来确定要加密哪些字段。如要避免此问题,请使用客户端模式验证。

    由于 CSFLE 和 Queryable Encryption 不提供验证模式完整性的机制,因此依赖服务器端模式意味着相信服务器的模式没有被篡改。如果攻击者破坏了服务器,他们就可以修改模式,以便以前加密的字段不再被标记为加密。这会导致客户端发送该字段的明文值。

    有关客户端和服务器端模式的 CSFLE 配置示例,请参阅 CSFLE 服务器端字段级加密实施。

您可以在应用程序中使用可查询加密和/或客户端字段级加密。但是,您不能在同一集合中使用这两种方法。

请考虑在以下场景中使用 Queryable Encryption:

  • 您正在开发一个新应用程序,并希望使用 MongoDB 的最新加密技术。

  • 您期望用户对加密数据运行范围查询、前缀查询、后缀查询或子字符串查询。

  • 您的应用程序可以对给定字段使用单个键,而不需要为每个用户或每个租户使用单独的键。

在某些情况下,CSFLE 可能是更好的解决方案:

  • 您的应用程序已使用 CSFLE。

  • 您需要为同一字段使用不同的键。在分离租户或使用特定于用户的密钥时,通常会遇到这种情况。

  • 您需要灵活处理数据模式,并可能添加更多加密字段。为可查询加密添加加密字段需要重建元数据集合和索引。

Queryable Encryption支持对加密字段进行相等和范围查询。对使用可查询Queryable Encryption进行前缀、后缀和子字符串查询的支持正在开发中。

客户端字段级加密支持对确定性加密字段进行相等查询。

有关支持的查询运算符的更多信息,请参阅Queryable Encryption支持的查询运算符和 CSFLE 支持的查询运算符。有关 MongoDB 查询运算符的完整列表,请参阅查询和投影运算符。

Queryable Encryption的新加密算法使用基于结构化加密的随机加密,可从同一输入生成不同的加密输出值。

有关 MongoDB 的 Queryable Encryption 方法的详细信息,请参阅 Overview of Queryable Encryption 无状态文档数据库加密方案的设计与分析 白皮书。

CSFLE加密算法同时支持随机加密和确定性加密。但是,它仅支持查询确定性加密的字段。使用确定性加密,给定的输入值始终加密为相同的输出值。

MongoDB对可查询Queryable Encryption和客户端字段级加密的查询进行加密,以便服务器没有有关明文文档或查询值的信息。 借助可查询Queryable Encryption ,私有查询更进一步,编辑日志和元数据以清理有关查询存在的信息。 这样可以确保更强的隐私性和机密性。

我们建议在大多数情况下使用自动加密,因为它可以简化客户端应用程序的编写过程。通过自动加密,MongoDB 会在读写操作中自动对字段进行加密和解密。

显式加密提供了对安全性的细粒度控制,但代价是在配置集合和为 MongoDB 驱动程序编写代码时增加了复杂性。 通过显式加密,您可以为对数据库执行的每个操作指定如何加密文档中的字段,并在整个应用程序中包含此逻辑。

有关详细信息,请参阅使用可查询加密的显式加密使用 CSFLE 的显式加密。

后退

正在使用的加密