怎么在数据库存敏感数据? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
teli
V2EX    信息安全

怎么在数据库存敏感数据?

  •  1
     
  •   teli 2022-12-27 08:48:59 +08:00 via Android 7858 次点击
    这是一个创建于 1068 天前的主题,其中的信息可能已经有所发展或是发生改变。

    需要在数据库存用户身份证号码和手机号码。 最简单的方式,配置或者代码里一个固定的的密钥,每次对称加解密,数据库存密文。问题是密钥泄露风险。

    第 1 条附言    2022-12-28 21:48:39 +08:00
    目前的解决方案是:
    存一份摘要、一份明文、一个密钥索引。
    摘要够用的时候,都用摘要。
    根据密钥索引可以找到密钥。新数据的密钥定期更换。密钥索引和密钥放配置里。
    36 条回复    2022-12-27 16:56:27 +08:00
    K1W1
        1
    K1W1  
       2022-12-27 08:56:45 +08:00   3
    密钥不要放在代码里,放在配置中心,远程拉取。没有配置中心,放在启动参数里。光密钥泄露没事,数据库泄露也没事,代码泄露也没事。要三者同时泄露才会出问题。
    teli
        2
    teli  
    OP
       2022-12-27 08:59:43 +08:00 via Android
    @K1W1 确定全局用同一个密钥 ok ?
    teli
        3
    teli  
    OP
       2022-12-27 09:02:49 +08:00 via Android
    @K1W1 我设想过
    每个数据再生成一个随机 key ,随机 key 和密文一起存,全局密钥加这个随机 key ,组成加解密钥。这个是否有必要?
    ryanbuu
        4
    ryanbuu  
       2022-12-27 09:06:01 +08:00 via iPhone
    @teli #3 如此做的话,“全局密钥”泄漏了,数据应该也就算泄漏了吧?
    Mogugugugu
        5
    Mogugugugu  
       2022-12-27 09:09:53 +08:00   3
    不建议存储加密 /明文身份证号,如果不是业务强要求,建议使用 hash 之后存储,可以存储一份脱敏的数据,例如只有后三位,满足部分搜索的需求。

    手机号可以做成加密存储,秘钥不要存在数据库里面,尽量避免数据库泄露全盘皆输的可能。

    另外不知道你们是什么机构,对于信息存储是否有一定的要求,如果是面向国内的特殊单位,参考 GB/T 35273-2020 的要求,该分开分开,不要听着产品经理的一股脑的都存进去,有些东西不是技术能解决的。
    Mogugugugu
        6
    Mogugugugu  
       2022-12-27 09:11:42 +08:00
    哦对、如果确实有明文存储需求的,可以看看硬件加密机。
    teli
        7
    teli  
    OP
       2022-12-27 09:14:28 +08:00 via Android
    @Mogugugugu 因为还要取出来使用。
    比方说,收货地址里的手机号码,就得存吧?
    billgong
        8
    billgong  
       2022-12-27 09:19:34 +08:00
    或者你可以为对应的数据加 salt ,甚至系统中设置多个 salt ,基本上就能做到楼上上说的必须泄漏三者才会出问题:
    - 主密钥( env )
    - 应用配置 secret 或 salt ( code )
    - 主密钥、应用的 salt 和记录 /用户的 salt 参与数据库中数据加密( db )

    对称加密可能还会用到 IV 和 nonce ,但 nonce 一般不需要记录(也不应该被复用),IV 保存在密文的开头或结尾是基本操作,在这个问题中不适用。
    Mogugugugu
        9
    Mogugugugu  
       2022-12-27 09:20:38 +08:00
    @teli 手机号这个确实无解,使用太广泛了,单纯的为了手机号上一套加密设备也没必要。但是还是参考楼上 1L 的回复,把秘钥和数据分开存储,降低风险,同时不要存储身份证号明文 /密文。
    realpg
        10
    realpg  
    PRO
       2022-12-27 09:20:39 +08:00
    明文存就够了
    代码都是自己写的 个人知道自己代码质量 书写注意 无漏洞无 bug 就不用搞那些没用的保险
    billgong
        11
    billgong  
       2022-12-27 09:22:05 +08:00
    补充一点,如果使用了应用的 secret 那么这个 secret 丢失的话数据库里的数据可能就无法解密了(但可以备份这个 secret )。这种 secret 用来加密 volatile 数据更合适(比如 session key 之类需要加密但丢了也无妨的数据)
    danieladu
        12
    danieladu  
       2022-12-27 09:25:37 +08:00
    key 肯定不在 code 里面,需要专业的 keyvault 去处理这种事情,各大云服务都有类似的服务。
    这些 key 都有过期时间,会定时 rotation ,具体的策略取决于业务需求
    crd57
        13
    crd57  
       2022-12-27 09:30:34 +08:00
    拼多多应该是通过地址+手机号前三位+后四位进行存储的,因为我的手机号和我老婆的除了中间四位的不一致,别的都一直,地址也一致,我俩的物流信息老是串的(个人猜测是这样)
    kenberkeley
        14
    kenberkeley  
       2022-12-27 09:31:16 +08:00 via iPhone   1
    AWS KMS
    dr1q65MfKFKHnJr6
        15
    dr1q65MfKFKHnJr6  
       2022-12-27 09:40:35 +08:00
    加密做成单独的服务,独立出来,
    除非 服务代码 + 秘钥 + 数据库 同时泄露, 单独一个、两个泄露 都不怕
    himarrin
        16
    himarrin  
       2022-12-27 09:46:50 +08:00
    手机号不存第一位 身份证号不存第七位
    28Sv0ngQfIE7Yloe
        17
    28Sv0ngQfIE7Yloe  
       2022-12-27 10:14:20 +08:00
    @realpg #10

    现在国家不允许明文存储隐私信息额,至少我所在的游戏行业定期审查这个。
    wu67
        18
    wu67  
       2022-12-27 10:26:24 +08:00   6
    手机号还行, 身份证和真实姓名还是得加密, 至少不应该明文存.
    另外真的很想给#10 点踩. 足球还有守门员呢, 照样能进球, 还代码质量无 bug, 是个人写的代码就会出 bug 的可能, 是个框架就有漏洞风险, 除非你写的系统不联网, 纯线下设备使用, 但就算如此, 硬件淘汰、更新换代时和人员管理不过关时, 纯线下设备一样有泄露数据的风险
    solitude2
        19
    solitude2  
       2022-12-27 10:31:35 +08:00
    信封加密
    没有绝对安全,只能提高攻击者破解成本
    可以了解下密码学相关的
    samin
        20
    samin  
       2022-12-27 10:39:02 +08:00
    @< href="/member/Morii">Morii 所以游戏行业里面 都是如何去做密文存储 ?
    mengzhuo
        21
    mengzhuo  
       2022-12-27 10:51:05 +08:00   1
    这是都没有学习过隐私保护么?这玩意 2021.11.1 都立法了……
    身份证和手机号能不存就不存,哈希算是假名化,还是个人数据,需要加密处理(根密钥需要单独配置在配置中心、每个用户可以通过根密钥省成对应工作密钥),而且最好是单独找个库来放。

    注:敏感数据哈希要用 pbkdf2 ,而不是简单的盐和算法。
    realrojeralone
        22
    realrojeralone  
       2022-12-27 10:51:13 +08:00
    #10 是小白吗?没有任何安全意识,可能根本没有关注过漏洞报告,不知道啥叫 0day
    ttimasdf
        23
    ttimasdf  
       2022-12-27 11:19:34 +08:00
    @realpg 哈哈我们就靠你们这种程序员吃饭呢。

    #10 这个方案不错,建议立法,全国推广。
    28Sv0ngQfIE7Yloe
        24
    28Sv0ngQfIE7Yloe  
       2022-12-27 11:19:43 +08:00
    @samin #20

    也是楼上说的方案,每个服务一组密钥,对外暴露的 API 只返回脱敏的数据,落地的数据均加密处理,需要解密获取原始数据时需要记录行为日志。
    bthulu
        25
    bthulu  
       2022-12-27 11:27:37 +08:00
    BASE64 转一下就行了, 既满足法规, 又简单易懂, 至于数据泄露, 别想太多, 早点干完早点下班
    qeqv
        26
    qeqv  
       2022-12-27 13:14:23 +08:00
    @mengzhuo 为啥哈希还要加密
    dengji85
        27
    dengji85  
       2022-12-27 13:22:27 +08:00
    唉,楼上都是大厂的,向我这种底层螺丝工数据库就是明文,代码层简单脱敏
    EminemW
        28
    EminemW  
       2022-12-27 13:51:53 +08:00
    @dengji85 #27 被人举报一下,相关部门就会来监督你改造数据库了
    liuidetmks
        29
    liuidetmks  
       2022-12-27 14:20:56 +08:00
    @realpg 有的公司有代码审计,尤其是你有上市这个需求
    Maboroshii
        30
    Maboroshii  
       2022-12-27 14:28:43 +08:00
    法务要求你怎么存就怎么存,不要求就存明文。 毕竟这不是一个技术问题
    xyjincan
        31
    xyjincan  
       2022-12-27 15:59:11 +08:00
    号码存在独立的 redis 服务器上呢
    armyHcz
        32
    armyHcz  
       2022-12-27 16:07:30 +08:00
    @himarrin 天才啊
    swulling
        33
    swulling  
       2022-12-27 16:19:47 +08:00 via iPhone
    简单 aes 加密一下保存就行了,密钥放到配置里。

    你说配置泄漏?满足法律要求就行,泄漏就泄漏呗。
    nic0Y
        34
    nic0Y  
       2022-12-27 16:47:49 +08:00
    @himarrin 手机号如果只限制在国内倒还好说,拿身份证如果是 2000 年以后出生的呢?
    himarrin
        35
    himarrin  
       2022-12-27 16:55:41 +08:00
    @nic0Y 1 跟 2 还是还是可以通过后面几位判断的
    looplj
        36
    looplj  
       2022-12-27 16:56:27 +08:00   1
    看过美团的一篇文章 https://tech.meituan.com/2022/09/22/token-pii.html
    可以参考下,不过没说源信息如何存储,我理解也是数据库加密,然后有个解密服务
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2629 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 04:10 PVG 12:10 LAX 20:10 JFK 23:10
    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