V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
faust24601
V2EX  ›  程序员

怎么实现敏感数据加密存储并可模糊检索

  •  1
     
  •   faust24601 · 55 天前 via Android · 2765 次点击
    这是一个创建于 55 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有做过等保定级的朋友吗,要求敏感信息要加密存储,但是业务中需要模糊检索,实在没有好的方案

    27 条回复    2022-08-15 01:59:11 +08:00
    masterclock
        1
    masterclock  
       55 天前
    同态加密
    mywaiting
        2
    mywaiting  
       55 天前
    布隆过滤?把布隆出来的数据存起来,单独用于检索~ 不懂等保,盲猜的方法~
    kwokky
        3
    kwokky  
       55 天前
    同问
    codeklaus
        4
    codeklaus  
       55 天前
    目前没什么办法,同态加密很大程度上就是为了解决这个问题。

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

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

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

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

    另外是不算办法的办法:

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

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

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

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


    最终可以实现 类似 SQL 中 like %xx% 任意字符串的查询. 缺点是对低于 2 位以下的支持.
    itemqq
        22
    itemqq  
       54 天前
    数据不特别多的话,放到 SGX Enclave 里就行
    kenvix
        23
    kenvix  
       54 天前 via Android
    不一定要砍掉需求,能不能简化问题,把**任意**模糊搜索改成**分块局部**精确匹配?
    netnr
        24
    netnr  
       54 天前 via Android
    MySQL 有 AES 加密解密函数,我们打算用这个来做,而且性能还蛮高的
    wangritian
        25
    wangritian  
       54 天前
    我的解决办法是 where aes_decrypt(from_base64(name), '自定义密码') like '张%'
    为了单条查询也使用索引,在业务代码使用和 mysql 相同的加密算法,=查询时直接提交密文
    unco020511
        26
    unco020511  
       54 天前
    身份证和手机号可以把中间脱敏,匹配前面+后面就可以模糊搜索了呀
    flyingghost
        27
    flyingghost  
       52 天前
    目前可行的方案:
    1 ,脱敏后模糊搜索。138****1234 ,脱敏后存明文。
    2 ,砍需求,只支持全文匹配,库里存全文的 hash 。搜索时按输入 hash 去匹配。
    3 ,原文求前缀子串 /任意子串后 hash 入库存储。搜索时按输入 hash 去匹配。
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2128 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 46ms · UTC 11:02 · PVG 19:02 · LAX 04:02 · JFK 07:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.