选择正在使用的加密方法
在此页面上
MongoDB提供两种正在使用的加密方法:可Queryable Encryption和客户端字段级加密(CSFLE)。 使用任一方法时,您都可以在自动加密和显式加密之间进行选择。
关于Queryable Encryption和 CSFLE
可查询Queryable Encryption和客户端字段级加密 (CSFLE) 都允许客户端应用程序在通过网络传输数据之前对其进行加密。 敏感数据由客户端透明地加密和解密,并且仅以加密形式与服务器通信。
要详细比较功能,请参阅可查询Queryable Encryption功能和CSFLE 功能。
Considerations
在实施使用Queryable Encryption或 CSFLE 的应用程序时,请查看本节中的安全注意事项。
有关每种方法的限制,请参阅Queryable Encryption限制或CSFLE 限制。
有关MongoDB服务器和驾驶员版本兼容性,请参阅兼容性。
安全考虑因素
CSFLE 和Queryable Encryption不提供任何ACID 一致性保证以防止攻击者访问权限您的客户主密钥和数据加密密钥。
CSFLE 和Queryable Encryption不能ACID 一致性保证对手可以对包含加密数据的集合进行任意写入访问权限。
MongoDB 使用模式验证来实施集合中特定字段的加密。如果没有客户端模式,客户端将下载集合的服务器端模式来确定要加密哪些字段。如要避免此问题,请使用客户端模式验证。
由于 CSFLE 和Queryable Encryption不提供验证模式完整性的机制,因此依赖服务器端模式意味着相信服务器的模式没有被篡改。 如果攻击者破坏了服务器,他们就可以修改模式,使以前加密的字段不再被标记为加密。 这会导致客户端发送该字段的明文值。
有关客户端和服务器端模式的 CSFLE 配置示例,请参阅 CSFLE 服务器端字段级加密实施。
使用Queryable Encryption和 CSFLE
您可以在应用程序中使用可Queryable Encryption和/或客户端字段级加密。 但是,您不能在同一集合中使用这两种方法。
请考虑在以下场景中使用Queryable Encryption :
您正在开发一个新应用程序,并希望使用MongoDB的最新加密技术。
您期望用户对加密数据运行范围查询、前缀查询、后缀查询或子字符串查询。
您的应用程序可以对给定字段使用单个键,而不需要为每个用户或每个租户使用单独的键。
在某些情况下,CSFLE 可能是更好的解决方案:
您的应用程序已使用 CSFLE。
您需要为同一字段使用不同的键。 在分离租户或使用特定于用户的密钥时,通常会遇到这种情况。
您需要灵活处理数据模式,并可能添加更多加密字段。 为可查询Queryable Encryption添加加密字段需要重建元数据集合和索引。
查询加密字段
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 驱动程序编写代码时增加了复杂性。 通过显式加密,您可以为对数据库执行的每个操作指定如何加密文档中的字段,并在整个应用程序中包含此逻辑。
有关详细信息,请参阅使用可查询加密的显式Queryable Encryption或使用 CSFLE 的显式加密。