怎么实现敏感数据加密存储并可模糊检索 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
28 条回复    2022-11-16 11:45:31 +08:00
masterclock
    1
masterclock  
   2022-08-12 12:58:51 +08:00
同态加密
mywaiting
    2
mywaiting  
   2022-08-12 13:01:55 +08:00
布隆过滤?把布隆出来的数据存起来,单独用于检索~ 不懂等保,盲猜的方法~
kwokky
    3
kwokky  
   2022-08-12 13:12:52 +08:00
同问
codeklaus
    4
codeklaus  
   2022-08-12 13:16:58 +08:00
目前没什么办法,同态加密很大程度上就是为了解决这个问题。

等保的话不会要求在业务层全加密,不然业务都没法做了。 看看数据库自带的 透明加解密 应该就能满足等保的要求,数据落盘自动加密,读到内存自动解密,对业务完全透明,保证落在磁盘的数据都是加密的。
codeklaus
    5
codeklaus  
   2022-08-12 13:19:28 +08:00
Huelse
    6
Huelse  
   2022-08-12 13:26:07 +08:00
同态加密效率很低成本很高,上联邦学习成本更高
xupefei
    7
xupefei  
   2022-08-12 16:02:46 +08:00 via iPhone
这技术叫 oblivious database ,目前还在研究阶段。目前支持的查询方式还很有限,模糊搜索还做不到。
IvanLi127
    8
IvanLi127  
   2022-08-12 16:10:16 +08:00
如果在另一个地方明文存储这列字段作为索引用于模糊查询,匹配到完整内容再加密后去原数据库检索,这样能过等保嘛?这样数据和数据所有者在磁盘上应该是没关联的?
0xEvan
    9
0xEvan  
   2022-08-12 17:14:51 +08:00
有朋友做这个的,楼主给个联系方式?
lysS
    10
lysS  
   2022-08-12 17:17:08 +08:00
同态加密加密现在还处于 paper 阶段,而且限制挺大的
curran12
    11
curran12  
   2022-08-12 17:27:46 +08:00
@codeklaus 我们这里做的 3 级等保,要求敏感数据(比如:身份证 /手机号字段)本身是被加密的,透明加密说过不了
V2Axiu
    12
V2Axiu  
   2022-08-12 17:29:41 +08:00
加密的数据如果是可以模糊查询的就不存在安全了- -
jhdxr
    13
jhdxr  
   2022-08-12 17:31:33 +08:00
HE 的确可以,但 HE (假定讨论的是 FHE )因为理论上想要支持的是所有运算,效率也的确低。

LZ 说的这个其实是 SSE ( Searchable symmetric encryption )和 ASE ( Asymmetric Searchable Encryption )在解决的问题。我们之前做过 SSE 的 POC ,还是可以落地的。

上面还有人提到 FL ( Federated Learning ),这个就不是一回事了。这儿做的是 IR 而不是 ML 。
jhdxr
    14
jhdxr  
   2022-08-12 17:39:07 +08:00
liuidetmks
    15
liuidetmks  
   2022-08-12 17:45:12 +08:00
简单搞的话,可以采用流加密代替分组加密 例如 salsa20 之类的
明文 ABCDEF
变成 123456
想搜 like %CDE% 就从秘文中搜 %345%

当然,密文可能要 base64 一下,base64 之后的搜索,记得 v 站有帖子
liuidetmks
    16
liuidetmks  
   2022-08-12 17:58:24 +08:00
@liuidetmks 好吧,有问题,不同位置的 cde 映射不一样
hxndg
    17
hxndg  
   2022-08-12 18:26:43 +08:00
Nmmmm ,敏感数据模糊检索什么?属性,能不能针对这种做类似加 label 或者属性的检索呢?
itechify
    18
itechify  
PRO
   2022-08-12 19:00:15 +08:00 via Android
看了楼上回复,把需求砍掉,只允许精准匹配,
lookStupiToForce
    19
lookStupiToForce  
   2022-08-12 19:11:54 +08:00
砍掉需求+1

另外是不算办法的办法:

模糊匹配需求分段,行业通行惯例至少能让手机和身份证保留前后几位,那么就只让“模糊搜索”搜索保留的前后几位,中间*掉的部分如果也要搜索,就只能中间整块丢 hash 后再搜索,也就是说把这几块搜索全部变成精确匹配

进一步,你们可以按照上面的思想实现你们自己的加解密算法,反正只要能过等保的人就行,他们只不让存储明文,但没有说不让存储明文分段 hash 后的词组,搜索的时候用这个词组作倒排索引搜
sleepm
    20
sleepm  
   2022-08-12 19:21:55 +08:00   1
和 #19 一样
京东云鼎的做法是,手机号中间 4 位换成*,然后加个密文字段,拿着密文和订单号去获取真实手机号
所以模糊搜索也就只能后 4 位,前 3 位
aqqwiyth
    21
aqqwiyth  
   2022-08-12 19:29:07 +08:00
电商的做法是做信息摘要实现查询

比如明文: v2ex.com
通过算法进行文本 摘要加密(v2) + 摘要加密(2e) + 摘要加密(x.)+....摘要加密(om) 两两结合成字符串进行查询.
得出一堆很长无意义的字符串

再对明文进行一次 完整的对称加密(如果有解密需要的话)


最终可以实现 类似 SQL 中 like %xx% 任意字符串的查询. 缺点是对低于 2 位以下的支持.
itemqq
    22
itemqq  
   2022-08-12 22:53:48 +08:00
数据不特别多的话,放到 SGX Enclave 里就行
kenvix
    23
kenvix  
   2022-08-13 00:36:29 +08:00 via Android
不一定要砍掉需求,能不能简化问题,把**任意**模糊搜索改成**分块局部**精确匹配?
netnr
    24
netnr  
   2022-08-13 05:53:16 +08:00 via Android
MySQL 有 AES 加密解密函数,我们打算用这个来做,而且性能还蛮高的
wangritian
    25
wangritian  
   2022-08-13 07:37:31 +08:00
我的解决办法是 where aes_decrypt(from_base64(name), '自定义密码') like '张%'
为了单条查询也使用索引,在业务代码使用和 mysql 相同的加密算法,=查询时直接提交密文
unco020511
    26
unco020511  
   2022-08-13 15:19:08 +08:00
身份证和手机号可以把中间脱敏,匹配前面+后面就可以模糊搜索了呀
flyingghost
    27
flyingghost  
   2022-08-15 01:59:11 +08:00   1
目前可行的方案:
1 ,脱敏后模糊搜索。138****1234 ,脱敏后存明文。
2 ,砍需求,只支持全文匹配,库里存全文的 hash 。搜索时按输入 hash 去匹配。
3 ,原文求前缀子串 /任意子串后 hash 入库存储。搜索时按输入 hash 去匹配。
777777
    28
777777  
   2022-11-16 11:45:31 +08:00
simhash
关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1047 人在线   最高记录 6679       Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 28ms UTC 18:07 PVG 02:07 LAX 11:07 JFK 14:07
Do have faith in what you're doing.
ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86