选择使用中加密方法
MongoDB提供了两种实现使用中加密的方法:使用中加密:包括可查询加密和客户端字段级加密 (CSFLE)。在使用这两种方法中的任何一种时,您还可以在自动加密和显式加密之间进行选择。
关于可查询加密和CSFLE
可查询加密和客户端字段级加密(CSFLE)都允许客户端应用在通过网络传输数据之前对其进行加密。敏感数据由客户端透明地加密和解密,并以加密形式仅与服务器通信。
考虑事项
当实现使用可查询加密或CSFLE的应用程序时,请查看本节中的安全考虑事项。
有关MongoDB服务器和驱动程序版本兼容性,请参阅兼容性。
安全注意事项
CSFLE 和可查询加密无法保证抵御那些能够访问您的客户主密钥和数据加密密钥的攻击者。
CSFLE 和可查询加密无法保证抵御那些能够任意写入包含加密数据的集合的攻击者。
MongoDB 使用 模式验证 来强制加密集合中的特定字段。如果没有客户端模式,客户端会下载服务器端的集合模式以确定哪些字段需要加密。为了避免这个问题,请使用客户端模式验证。
由于 CSFLE 和可查询加密不提供验证模式完整性的机制,依赖服务器端模式意味着信任服务器端的模式没有被篡改。如果攻击者破坏了服务器,他们可以修改模式,使得之前加密的字段不再标记为加密。这会导致客户端为该字段发送明文值。
有关 CSFLE 客户端和服务器端模式配置的示例,请参阅 CSFLE 服务器端字段级加密强制。
使用可查询加密和 CSFLE
您可以在应用程序中使用可查询加密、客户端字段级加密或两者结合。但是,您不能在同一个集合中使用这两种方法。
以下情况下考虑使用可查询加密
您正在开发一个新应用,并希望使用 MongoDB 的新加密技术。
您预计用户将对加密数据进行范围、前缀、后缀或子串查询。
您的应用程序可以使用单个密钥来加密给定字段,而不是需要每个用户或租户分别使用密钥。
以下情况下 CSFLE 可能是更好的解决方案
您的应用程序已经使用了 CSFLE。
您需要为同一字段使用不同的密钥。这通常发生在分离租户或使用特定于用户的关键时。
您需要对自己的数据模式保持灵活性,并可能添加更多加密字段。为了添加支持查询加密的字段,需要重新构建元数据集合和索引。
查询加密字段
查询加密支持在加密字段上进行等式和范围查询。查询加密对前缀、后缀和子字符串查询的支持正在开发中。
客户端字段级加密支持对确定性加密字段上的等式查询。
有关支持的查询运算符的更多信息,请参阅查询加密的受支持查询运算符和CSFLE的受支持查询运算符。有关MongoDB查询运算符的完整列表,请参阅查询和投影运算符。
加密算法
查询加密的新加密算法基于结构化加密的随机加密,产生与相同输入不同的加密输出值。
有关MongoDB对查询加密方法的详细说明,请参阅查询加密概述 和 无状态文档数据库加密方案的设计与分析 白皮书。
CSFLE加密算法支持随机加密和确定性加密。然而,它仅支持查询加密的强确定性字段。在确定性加密中,给定的输入值总是加密成相同的输出值。
私有查询
MongoDB 对可查询加密和客户端字段级加密的查询进行加密,以确保服务器无法获取明文文档或查询值。在可查询加密中,私有查询进一步扩展,并删除日志和元数据来清除查询存在的相关信息。这确保了更强的隐私和机密性。
在自动加密和显式加密之间进行选择
使用自动加密
我们推荐在大多数情况下使用自动加密,因为它简化了编写客户端应用程序的过程。使用自动加密时,MongoDB 会自动在读写操作中加密和解密字段。
使用显式加密
显式加密可以提供对安全性的精细控制,但配置集合和为 MongoDB 驱动程序编写代码时会增加复杂性。使用显式加密时,您指定如何加密文档中的字段,并对数据库上执行的每个操作都包含此逻辑。
有关详细信息,请参阅使用可查询加密的显式加密或使用 CSFLE 的显式加密。