首页 > 编程笔记 > MongoDB 阅读:22

MongoDB加密的3种方法(新手必看)

MongoDB 数据库提供以下加密方法:

选择正在使用的加密方法

MongoDB 提供两种“正在使用的加密”方法,分别是可查询加密和客户端字段级加密。使用其中一种方法时,即可在自动加密和显式加密之间进行选择。

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

在实施使用可查询加密或客户端字段级加密的应用程序时,需要特别注意以下安全注意事项:
  1. 客户端字段级加密和可查询加密不提供任何 ACID 一致性保证,以防止攻击者访问客户主密钥和数据加密密钥。
  2. 客户端字段级加密和可查询加密不能提供 ACID 一致性保证,攻击者可以对包含加密数据的集合进行任意写入访问权限。
  3. MongoDB 使用模式验证来实施集合中特定字段的加密。如果没有客户端模式,客户端将下载集合的服务器端模式来确定要加密哪些字段。如果要避免此问题,可使用客户端模式验证。
  4. 由于 CSFLE 和 Queryable Encryption 不提供验证模式完整性的机制,因此依赖服务器端模式意味着相信服务器的模式没有被篡改。如果攻击者破坏了服务器,他们就可以修改模式,使以前加密的字段不再被标记为加密,这会导致客户端发送该字段的明文值。

可查询加密支持对加密字段进行相等和范围查询。对使用可查询加密进行前缀、后缀和子字符串查询的支持正在开发中。客户端字段级加密支持对确定性加密字段进行相等查询。可查询加密的新加密算法使用基于结构化加密的随机加密,可从同一输入生成不同的加密输出值。客户端字段级加密算法同时支持随机加密和确定性加密。但是,它仅支持查询确定性加密的字段。使用确定性加密,给定的输入值始终加密为相同的输出值。

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

静态加密

MongoDB 静态加密与传输加密结合使用时,可以保护相关账户、密码和加密密钥的安全策略,从而确保数据库符合安全和隐私标准,包括 HIPAA、PCI-DSS 和 FERPA。

MongoDB Enterprise 3.2 为 WiredTiger 存储引擎引入了一个原生加密选项,此功能允许 MongoDB 加密数据文件,仅限持有解密密钥的各方可以解码和读取数据。Windows 上的 MongoDB Enterprise 不再支持将 AES256-GCM 作为静态加密的分组密码算法,仅 Linux 版本支持此用法。

如果启用加密,MongoDB Enterprise 使用的默认加密模式则是通过 OpenSSL 实现的 AES256-CBC(或是采用密码分组链接模式的 256 位高级加密标准)。AES-256 使用对称密钥,即使用同一密钥来加密和解密文本。MongoDB Enterprise for Linux 还支持经过身份验证的加密 AES256-GCM(或是采用 Galois/Counter 模式的 256 位高级加密标准)。

加密存储引擎使用认证的底层操作系统加密提供程序来执行加密操作。例如,在 Linux 操作系统上安装的 MongoDB 将使用 OpenSSL libcrypto FIPS-140 模块。

要在符合 FIPS 标准的模式下运行 MongoDB,需要:
检查服务器日志文件以确认 FIPS 模式已启用。如果 FIPS 模式已启用,则日志文件中会显示消息 FIPS 140-2 mode activated。

数据加密流程包括:
  1. 生成主密钥;
  2. 为每个数据库生成密钥;
  3. 用数据库密钥加密数据;
  4. 使用主密钥来加密数据库密钥。

此加密在存储层以透明方式进行,即从文件系统的角度来看,所有数据文件都是完全加密的,而数据仅以未加密状态存在于内存和传输过程中。如果要加密 MongoDB 的所有网络流量,可以使用 TLS/SSL(传输层安全性/安全套接字层)。

TLS/SSL

MongoDB 支持使用 TLS/SSL 加密 MongoDB 的所有网络流量。TLS/SSL 可确保 MongoDB 网络流量只能由目标客户端读取。

1) mongod和mongos证书密钥文件

在建立 TLS/SSL 连接时,mongod 和 mongos 会向其客户端提交证书密钥文件,以确定其身份。

证书密钥文件包含公钥证书及其关联的私钥,但仅向客户端透露公钥部分。MongoDB 可以使用自签名证书或证书颁发机构颁发的任何有效 TLS 证书。如果使用自签名证书,尽管会加密通信通道以防止窃听连接,但不会验证服务器身份。

2) 客户端的TLS/SSL配置

客户端必须支持 TLS/SSL,才能连接到需要 TLS/SSL 连接的 mongod 或 mongos 实例。关于 TLS/SSL、PKI(公钥基础设施)证书和证书颁发机构的完整描述,可以参看官方权威说明。

对于 TLS/SSL 连接,mongosh 会验证 mongod 或 mongos 实例提供的证书。

3) 为FIPS配置MongoDB

FIPS 是加密系统的属性,而不是访问权限控制系统的属性。但是,如果环境需要符合 FIPS 标准的加密和访问权限控制,则必须确保访问权限控制系统仅使用符合 FIPS 标准的加密。

MongoDB 的 FIPS 支持涵盖 MongoDB 使用 SSL/TLS 库进行网络加密、SCRAM 身份验证和 x.509 身份验证的方式。如果使用 Kerberos 或 LDAP 身份验证,则必须确保这些外部机制与 FIPS 兼容。

相关文章