2. 常见密文检索技术简介
密文检索,说白了就是在加密的数据上做搜索。你想想看,数据被加密成一堆乱码,怎么找想要的内容呢?
我刚开始接触这个领域时,也觉得这不太可能。后来研究了才发现,业界已经有不少成熟的技术路线。每一种都有自己的适用场景和坑。今天我把最主流的几种技术梳理一下,这些都是你后面调SDK时绕不开的基础。
2.1 对称可搜索加密(SSE)
这是目前应用最广的技术。核心思路是:你先用对称密钥加密数据,然后为每个关键词生成一个“陷门”。服务器拿着陷门去做匹配,但全程不知道关键词内容。
核心流程:
- 数据加密:用户用对称密钥加密文档,并提取关键词生成索引。
- 陷门生成:搜索时,用户为关键词生成一个陷门(类似一次性的搜索令牌)。
- 匹配检索:服务器用陷门匹配索引,找到加密文档。
我个人习惯把SSE分成两类:
| 类型 | 优点 | 缺陷 |
|---|---|---|
| 单关键字SSE | 速度快,实现简单 | 只能查一个词,不支持复杂查询 |
| 多关键字SSE | 支持AND/OR等逻辑 | 索引膨胀,性能开销大 |
经验之谈:我在做金融风控项目时,就踩过一个坑。团队一开始用了单关键字SSE,结果业务方说“帮我查同时包含‘转账’和‘大额’的记录”。我们不得不连夜改成了多关键字方案。
2.2 非对称可搜索加密(PEKS)
SSE的问题是:谁有对称密钥,谁就能搜索。如果用户想把搜索权限交给别人,密钥管理就很麻烦。PEKS解决了这个问题。
它用的是公钥密码体系。数据发送方用接收方的公钥加密,接收方用私钥生成陷门。我建议在跨组织共享数据的场景下优先考虑PEKS。
注意了:PEKS的计算开销比SSE大很多。我曾经在IoT设备上试过,树莓派3B跑一次陷门生成要2秒多,根本没法用。
2.3 同态加密(HE)基础概念
这个技术听着很酷。它允许直接在密文上做计算,结果解密后和明文计算的结果一致。拿搜索来说,你可以把整个搜索逻辑变成一个函数,在密文上执行。
但实际上,全同态加密(FHE)在当前阶段还是太重了。我在项目中实测过,一个小型数据库的全同态检索,耗时从分钟级起算。所以目前业界更常用的是部分同态加密(SWHE)方案,比如支持加法的Paillier方案。
对比一下三种技术的性能特征:
| 指标 | SSE | PEKS | 同态加密 |
|---|---|---|---|
| 加密方式 | 对称加密 | 公钥加密 | 同态加密 |
| 检索速度 | 毫秒级 | 秒级 | 分钟级 |
| 功能灵活性 | 固定查询 | 有限查询 | 任意计算 |
2.4 秘密共享技术
这个思路和前面完全不同。它不是加密,而是把数据切分成n份碎片,每一份单独看都没有意义。只有收集到一定数量的碎片,才能还原原始数据。
嗯,这里要注意的是:秘密共享主要用来做访问控制,而不是直接做搜索。它常常和SSE配合使用——SSE负责检索,秘密共享负责权限管理。我在做医疗数据共享项目时,就用这种组合方案实现了“医生能查,但查不到具体病人是谁”的需求。
2.5 各类技术的关系图
为了让你一眼看清这些技术的关系,我画了一张对比图。
2.6 技术选型建议
在实际项目中,你应该怎么选?我按场景给你列了个优先级:
- 内部数据检索(比如公司自建的加密数据库):首选SSE。快,简单,够用。
- 跨组织数据共享(比如银行间的反欺诈查询):用PEKS。公钥机制便于管理权限。
- 需要灵活计算的场景(比如加密数据上的统计分析):考虑同态加密,但要做好性能评估。
- 需要细粒度权限控制:结合秘密共享和SSE一起使用。
避坑提醒:千万不要在同一个项目里同时堆砌多种密文检索技术。我曾经见过一个项目,SSE、PEKS、秘密共享全上了,结果索引维护变成噩梦,每次更新先把三种索引全部重建一遍。
2.7 小结
这几种技术各有各的脾气。SSE像轻骑兵,PEKS像重甲兵,同态加密像魔法师——强是强,但施法时间长。你作为SDK开发者,最核心的事情就是根据客户的真实场景,选对技术。
嗯,我个人习惯是:80%的场景用SSE就能解决。剩下的20%,要么是PEKS,要么是秘密共享。同态加密还得等硬件加速再成熟一些。