MongoDB 9.0 把 Queryable Encryption 从精确匹配扩展到前缀、后缀、子串三类部分匹配检索,是数据库厂商第一次在"密文上做模糊匹配"这条工程路上走出可生产方案。本文从盲索引、TEE、同态加密三条路径拆解 MongoDB 的实现,给金融、政企、医疗场景的迁移评估清单,并与 SQL Server Always Encrypted、PostgreSQL pgcrypto、阿里云 DAS 加密做横向对比。
一、为什么"密文检索"是合规的硬骨头
数据安全法、PIPL、GDPR、HIPAA 一类法规对企业数据库的"加密落库"几乎都是默认要求,传统的做法有三条路:
- 应用层加密:DBA 和数据库都拿不到明文,搜索性能完全靠应用侧维护索引或全量扫表。
- 透明数据加密(TDE):库内静态加密,运行时解密,DBA 能看见明文,法规不算合规。
- 全磁盘加密:操作系统 / 存储层加密,应用与数据库仍以明文工作,对应用层和 DBA 不构成约束。
合规要求的是"应用与 DBA 都不该看到明文,但搜索仍能跑"。这件事 2019 年前几乎只能靠"密文哈希 + 客户端索引"手工拼,直到 MongoDB 在 4.2 引入了 Queryable Encryption 的雏形,9.0 又把能力外推到部分匹配检索。
二、MongoDB Queryable Encryption 三层工程折衷
2.1 客户端加密 + 服务端索引(盲索引)
MongoDB 的核心做法是"客户端密钥驱动 + 服务端加密索引"。一次写入时:
- 客户端用客户管理密钥(CMK)派生字段级密钥,对每个明文字段独立加密为密文(AEAD-AES-256-CBC-HMAC-SHA-512)。
- 对可查询字段同时计算"盲索引":客户端在密文之外再生成 deterministic 或 searchable 的盲索引值,并把盲索引连同密文一起上传服务端。
- 服务端只看到密文 + 盲索引,原文永远不出客户端。
盲索引不是真实索引,更像"哈希投影"——确定性盲索引(deterministic)支持等值查询与范围查询(已支持 4 年),可搜索盲索引(searchable)这次 9.0 升级到支持前缀、后缀、子串三类部分匹配。
2.2 可信执行环境(TEE)的角色
服务端在执行查询时,会把密文与盲索引送入 AWS Nitro Enclave 或 GCP Confidential VM 一类 TEE,TEE 内解密盲索引与密文、做匹配、再加密结果回给客户端。TEE 看不到 CMK,CMK 永远不出客户端硬件边界(KMIP / HashiCorp Vault / 本地 HSM 都行),这套"客户端密钥 + 服务端盲索引 + TEE 解密"的组合就是 MongoDB 官方一直强调的"我们自己也看不到明文"的工程基础。
TEE 的代价是性能与厂商绑定:Azure 暂不在 9.0 GA 名单内,目前可生产落地的只有 AWS Nitro 与 GCP Confidential Space。
2.3 与同态加密、安全多方计算的边界
同态加密(FHE)能做到"不解密做运算",但当前工程化的 FHE 库(Microsoft SEAL、OpenFHE)单次乘法运算在毫秒级,对数据库这种亿级行规模仍然不现实。安全多方计算(MPC)可以做到"双方各持一半密钥、联合查询不解密",但网络轮次与工程复杂度随参与方数量爆炸。
MongoDB 选的是"盲索引 + TEE"路线,本质是"算力换密码学纯度"——不追求数学上最强的不可破解,而是用工程上可控的盲索引与硬件可信区换来"密文检索"的可用性。这条路与 FHE / MPC 互补不互斥。
三、9.0 新增能力清单
从 MongoDB 9.0 release notes 与 MongoDB.local NYC 2026 的公开材料里,可以整理出几条与 Queryable Encryption 直接相关的能力:
- 前缀 / 后缀 / 子串检索:在 searchable 盲索引类型上扩展,新代码不需要碰 schema;旧业务从 equality 升级到 substring 时,老的 ciphertext 与盲索引可以原地重建。
- AWS PrivateLink 跨区域:Atlas 集群之间通过私有链路互通,盲索引与密文全程不进入公网,规避了"加密但网络暴露"的合规悖论。
- Google Private Service Connect(PSC)端口映射:单一端点承载多节点,便于跨区域流量整形。
- Azure Key Vault(AKV)无密钥认证:Atlas 用 Service Principal 直接拿密钥,Atlas 控制面不再持有长生命周期的 AKV 凭证。
- Google Trust Services(GTS)证书签发:Atlas TLS 证书信任链切换到 GTS,避免对单一 CA 的依赖。
智能工作负载管理(IWM)也间接帮到加密场景:盲索引扫描本身更耗 CPU,IWM 在过载时会把加密索引扫描优先级下放,确保明文 OLTP 路径不被拖累。
四、与主流方案的横向对比
| 方案 | 加密粒度 | 查询能力 | 服务端可见明文 | 性能 | 部署形态 |
|---|---|---|---|---|---|
| MongoDB 9.0 Queryable Encryption | 字段级 | 等值 + 范围 + 前缀 / 后缀 / 子串 | 否(TEE 解密) | 中(TEE 节点 + 盲索引开销) | Atlas / on-prem |
| SQL Server Always Encrypted | 列级 | 等值 + 范围 | 否(驱动层解密) | 较高(驱动层解密无网络往返) | 全平台 |
| PostgreSQL pgcrypto | 列级 | 仅 deterministic 模式支持等值 | 是(pgcrypto 在服务端运行) | 高 | 全平台 |
| 阿里云 DAS 敏感数据保护 | 列级 | 等值 + 部分模式(依实现) | 否(依赖 KMS + 安全机) | 中 | 阿里云生态 |
| 华为云 DDM 加密列 | 列级 | 有限 | 否(依赖 KMS) | 中 | 华为云生态 |
| Snowflake Tri-Secret Secure | 表级 | 全 SQL | 是(依赖 Tri-secret 轮换) | 较高 | Snowflake |
| 同态加密(OpenFHE / SEAL) | 字段级 | 受限运算 | 否 | 极低(ms 级单次运算) | 学术 |
几个值得注意的细节:
- SQL Server Always Encrypted 的等值 / 范围查询比 MongoDB 早成熟多年,但 Always Encrypted 没有 TEE,依赖"驱动层在客户端解密",客户端被攻陷 = 加密失效;MongoDB 9.0 多了 TEE 这一层,攻击面被收窄。
- PostgreSQL pgcrypto 的 deterministic 模式在服务端执行,数据库超级用户能直接拿原文;它严格意义上不是"加密落库",而是"加密入库"。
- 阿里云 DAS 与华为云 DDM 的能力接近 MongoDB 8.x 之前的水平,等值查询稳定,部分匹配能力尚未公开文档化。
五、给 DBA 的迁移评估清单
针对金融、政企、医疗三类典型场景,可以用以下五问判断该不该上 9.0 Queryable Encryption:
- 业务是否真的需要"应用与 DBA 都不见明文"?如果是 TDE 就够,建议不要为合规升级付出 TEE 节点成本。
- 业务查询里"前缀 / 后缀 / 子串"占比多少?只有 5% 的话,可以走"5% 字段升级到 searchable,其余字段 deterministic"的混合策略,避免全部 searchable 带来的盲索引存储开销。
- 是否在 AWS 或 GCP 上?Azure 暂不支持 TEE 路径,需要权衡"等 Azure 还是上 AWS / GCP"。
- 应用能否接受客户端驱动升级?Queryable Encryption 要求驱动层承担加密 / 解密,老语言 / 老驱动需要先评估升级窗口。
- 是否已有 KMS / HSM / Vault?9.0 推荐 KMIP 或本地 HSM 管理 CMK,企业如果没有统一密钥管理,先补 KMS 而非先上加密。
六、给国产数据库的启示
把视野拉到国内,OceanBase、TiDB、GaussDB、PolarDB 都已经在做"密文检索"的尝试,但公开文档多停留在"等值查询 + deterministic 索引"。9.0 的部分匹配能力与 TEE 集成可以给国产数据库三条直接启示:
- 客户端密钥驱动 + 服务端盲索引的工程范式可以照搬,但 TEE 节点需要与国内芯片(海光、鲲鹏)适配,纯软件实现会留下攻击面。
- PIPL 要求的"数据本地化 + 加密落库"组合,让"密文检索"在国内政企场景的优先级比海外更高,国产数据库把这块做扎实是出海前的必要功课。
- "密文上能不能跑 LIKE ‘%xxx%’“会成为 DBA 在采购评审时的第一问题,谁先把 substring 检索做出来,谁就能在金融 / 政务标书里多写一行"支持子串模糊匹配加密查询”。
七、结论
MongoDB 9.0 Queryable Encryption 不是新理论,而是把 4.2 以来"客户端密钥 + 服务端盲索引 + TEE"这套工程范式第一次扩展到生产可用的部分匹配检索。它不是密码学终点,但它是当前数据库厂商能在"密文检索"上交付的最强工程能力。对国内 DBA 与安全工程师来说,9.0 的发布是把"密文检索"从"研究问题"重新拉回"工程问题"的一个明确信号——明年数据库选型评审表里,加密列的可检索能力不再是可以省略的一栏。




