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

网井过来做安全评估,说要对手机号做加密(唯一登录字段)

  •  
  •   uoddsa · 117 天前 · 6061 次点击
    这是一个创建于 117 天前的主题,其中的信息可能已经有所发展或是发生改变。

    网井过来做安全评估,说要对手机号做加密,而手机号是我们用作登录的唯一字段,该用什么加密方式~

    70 回复  |  直到 2019-06-29 11:07:40 +08:00
        1
    rffan   117 天前
    base64 或者 AES 或者 DES,或者 MD5,反正你加密不加密查询都一样的效果,加密只是多了一层性能损耗。
        2
    hugedeffing   117 天前   ♥ 3
    你这个是脱敏,直接搜脱敏关键字就可以了
        3
    okwork   117 天前 via Android
    什么行业的项目,网警会来过问数据字段的安全?
        4
    ccoming   117 天前
    明文保存?
        5
    uoddsa   117 天前
    @okwork 电商,我也不清楚为什么突然就过来问了。第一次遇见这种情况。
        6
    iyaozhen   117 天前 via Android
    aes 呗,都用同一个 key🤣
        7
    uoddsa   117 天前
    @ccoming 手机号这个字段是用来注册登录的,没有其他标示字段,所以是明文的
        8
    LZSZ   117 天前
    明文保存的确不好。
        9
    Keyes   117 天前
    @uoddsa 在他们来之前有没有国内商业安全公司向你们推销过安全产品或安全服务
        10
    aru   117 天前
    aes 加密即可,查询的时候先加密再比对
        11
    Buges   117 天前
    网警这也算做了件好事。
        12
    okwork   117 天前 via Android
    这个要求比较奇怪,大厂也不会加密吧,否则发送短信通知怎么发?
        13
    whusnoopy   117 天前
    跟你是用来做注册登录的唯一字段不冲突啊,你只要能保证加密不冲突,可以正反向加密解密,无非就是在 DB 里存的是 13800138000 还是一串乱码一样的字符串
        14
    whusnoopy   117 天前   ♥ 2
    @okwork 又没有说只能单向 hash 加密,密钥在自己手里,也可以做可解密的加密啊

    楼上有人提到了关键点:脱敏。就是如果你被人拖库了,如果没有解密密钥,人家拿到就是一串乱码,但如果直接明文存,那就有好多黑产可以玩
        15
    okwork   117 天前 via Android
    @whusnoopy 可以解密的“加密”只能算混淆吧,密码 hash 可不止防脱裤,连内部员工也能防(手动修改字符串的方式不算)。
        16
    zacharyjia   117 天前 via iPhone
    @okwork 但是手机号给 hash 了的话,还怎么给用户发短信啥的呀😂😂
        17
    scofieldpeng   117 天前
    @zacharyjia #16 要发送之前解密,比如,单独一个加减密服务来做加密解密操作,其他服务不需要的时候,都是加密的手机号来进行操作,楼上也说了原因了
        18
    imdong   117 天前
    显示的时候,135****1234 这样就好了,
    至于数据库储存,网#不会看你数据库逻辑吧。
    如果真看了,那就 base64 就 OK 了。
        19
    kimqcn   117 天前
    做个 HASH 就行了。用户登陆的时候,先做 HASH,再到数据库里查这个 HASH 就行了。
        20
    okwork   117 天前 via Android
    @zacharyjia
    @scofieldpeng

    我觉得这个是掩耳盗铃。既然别人都能脱裤了,程序中解密的算法一样可以被“脱”呀,这种可逆的加密有毛用?
        21
    DavidNineRoc   117 天前
    @okwork 你都不看新闻,新闻经常见脱库, 有多少个服务器代码被扒了。这种方式好处就是只有两者都丢失,才会丢失正确数据。
        22
    luanluan   117 天前
    对称加密,找我们公司
        23
    abcbuzhiming   117 天前
    @LZSZ 请教,你不明文保存手机号码,要如何发短信?难道用可逆加密方案?那有意义吗,秘钥一样不安全啊
        24
    abcbuzhiming   117 天前
    @luanluan 秘钥你们怎么确保安全?万一泄露怎么处理
        25
    dorentus   117 天前
    @okwork 算法无所谓的。比如用 AES 加密,密钥并不在数据库中,那么被拖库也并不能还原出手机号码。

    进一步说,解密的密钥甚至可以保存在硬件模块中,有单独的服务器集群提供解密的 API,仅供内部其它有权限的服务器调用
        26
    yedanten   117 天前 via Android
    @okwork 现代密码学加解密算法都是公开的,不依赖算法保密性。保证密钥不泄露就好了,解密的密钥不要硬编码,可以从其他地方读取加载。
        27
    binux   117 天前
    @abcbuzhiming 硬件密钥
        28
    pelloz   117 天前
    其实就是让你们不要明文把手机号和一些其他信息直接存到数据库里面,怕有人拖库就直接能看到敏感信息。你们需要做的就是在程序入库前加一次密,用之前解密就好了,程序里面跑的都是明文没关系,但是落盘的时候不能明文。
        29
    okwork   117 天前 via Android
    @DavidNineRoc
    @dorentus
    @yedanten
    @binux

    上硬件密钥方案,那已经是物理级别了,不在网络和软件层面的安防讨论范围啦。
        30
    reus   117 天前
    加密就加啊,唯一字段又不需要明文,用户登录提交的手机先加密,再和数据库的做比对,就行了
        31
    jadec0der   117 天前
    @okwork 现在云服务都提供硬件加密的
        32
    yzkcy   117 天前   ♥ 1
    1.建议加密
    2.不要用 base64/md5
    3.拿"密钥可能泄露等于没什么用"来杠的纯属杠精
        33
    cdwyd   117 天前 via Android
    楼上竟然有几个人觉得对称加密就不是加密了
        34
    opengps   117 天前
    数据库未必需要加密,但是列表展示时候最好不要明文展示,防止信息泄露
        35
    okwork   117 天前 via Android
    数据库的安全应该是首要考虑的问题吧,做个什么产品默认都要考虑被脱裤吗?
        36
    whusnoopy   117 天前
    @okwork 对称加密怎么就不是加密了啊,不然怎么有加密解密这样的反义词

    关键的问题是脱敏,比如你的手机,解锁后啥都能用,但不上锁的话随便路人捡到马上都能用,不能因为你能解锁就说这一层锁没意义吧
        37
    iyaozhen   117 天前 via Android
    @okwork 谁告诉你脱裤的时候代码也脱了。

    代码获取还得拿到服务器 shell 权限。为了防止 github 泄露问题,密钥还可以单独保存
        38
    hhhsuan   117 天前
    如果你们公司不是国企的话,加不加密跟 WJ 有个毛的关系?
        39
    okwork   117 天前 via Android
    @iyaozhen 不是说程序不能脱,是脱程序还是为了脱数据,数据安全的前提就是程序要安全,连业务程序都能被人入侵修改,那数据都是脏的。
        40
    flyingghost   117 天前
    没有绝对的万无一失的安全。所有的安全都是 概率 vs 成本。
    但就跟多因子校验一样,多一项异质、异构的因子,安全性能将大大提升。
    假如数据库被脱裤的风险是万分之一,代码泄露的风险是万分之一,那两项同时失密的风险是多少?
        41
    loveour   117 天前
    @yzkcy #32 +1.非得说密钥会泄露没用的真的是杠精。现实就是被脱库的很多,代码泄露的还是比较少。
    @cdwyd #33 不理解+1.如果那样不算加密,那解密又是什么了?
        42
    loveour   117 天前
    看了这么多评论我简直惊呆,对加密解密的认识,对数据保护的认识完全不够。举个简单的例子,如果程序加密了,那么能接触到数据库接触不到程序的人至少就不可能直接看到用户隐私数据。又打个比方,比如苹果,谷歌,如果加密存储没有用,那么各位上传到云端的照片数据是不是也都会被苹果谷歌的员工看到?厂商宣称的隐私保护还有什么用呢?
        43
    limuyan44   117 天前 via Android
    明文传输?随便加密一下就好了。都是应付检查
        44
    murmur   117 天前
    加密的手段很多啊
    你说密钥存在磁盘上不安全我存在 u 盘里插入进内存启动后拔了可以吧 你说密钥不能放 u 盘我还有专门的电子 key
    想让数据跟密钥分离手段太多
    要不咱在讨论下内存 dump 的问题?
        45
    gaius   117 天前
    看怎么要求的,数据库字段也要加密的话用个对称加密就行了。不要求直接加个脱敏字段,前 3 后 4。
    手机又不是卡,应该没那么严格吧。
        46
    wangde400   117 天前
    @hhhsuan 等保 2.0 和网络安全法,基本把所有非涉密系统和个人家庭 wifi 以外的网络服务全算进去了,总有一条可以做依据=_=
        47
    wangde400   117 天前
    做安全的....现在接触的网警都是各种缺人手,黑产什么的事情忙不过来。。。你这是哪儿的网警,这么有闲情逸致=_=
        48
    no1xsyzy   117 天前   ♥ 1
    1、过一个对称加密;
    2、权限控制有且仅有加解密算法能够读取密钥;
    3、程序逻辑上控制加解密算法的调用情况,每个调用加解密函数的地方需要写入文档并 Code Review 确认——如果条件允许技术过关,采用注记( Java )、修饰符添加属性( Python )等方式标记被允许的调用方,并且加解密函数采用反射、自省的方式来检测调用方是否被如此标记;
    4、对这些位置进行 Code Review,以确认确实有需求来进行加解密。

    其实有 Dataflow diagram 也不需要 3,只需要看一眼图就行。

    1 保证要脱库必须访问该密钥,将 “唯一性” 和 “隐私性” 分离;
    2 保证不能直接接触,只能间接接触,并且接触方是无菌的,这就像是橡胶手套;
    3 保证间接接触也是有权限的;
    4 保证有权限的是有需求的。
        49
    vinsoncou   117 天前
    手机号脱敏算很基本需求了吧,从去年开上强推等保,什么手机号,邮箱,身份证个人信息都需要加密处理
        50
    avenger   117 天前 via iPhone
    加密存储了 like 搜索怎么办?
        51
    qlhai   117 天前
    来个实际的,用 bcrypt,别乱用 base64,md5 之类的东西
        52
    luanluan   117 天前
    @abcbuzhiming 不会 我们的密钥进行加密的 而且生产密钥同时需要 2 个成份合成, 加密机设备,硬件,不会存在脱裤等
        53
    annielong   117 天前
    加密唯一的影响就是查询了,想不出来加密后怎么模糊查询
        54
    Youngxj   117 天前
    自己写一份对称加解密,然后告别模糊搜索就行了
        55
    CantSee   117 天前
    是不是说数据库不能存明文
        56
    Mrxx   117 天前
    手机找回密码怎么办?
        57
    yangbotool   117 天前
    说一个我用的方法。
    用 AES 加密,但是各部分用到的不同 AES 的密钥,所有密钥本身是 AES 加密保存的,程序启动后,需要输入主密码。即使代码被 shell 拿到了,没主密码也不知道真正密钥是什么。而解密后的密钥是在程序运行内存中,在不重启程序的情况下,想获取也比较困难。
    要想获取到真正的文本,需要三样东西:数据库,密钥文件,主密码。
        58
    dvaknheo   117 天前
    @yangbotool 问题是想查某个手机的数据不好查了吧,还要折腾一堆东西。
        59
    yangbotool   117 天前
    @dvaknheo 没有不好查,和上面说加密都是一样的。可以 HASH 出一个字段做索引。获取真正手机号时用 AES 解一下。只是多一步密钥加密,密钥不在代码里,多一道步骤,安全性可大大提高。
        60
    xuanbg   117 天前
    两个字段,一个加星号的号码,用来显示;一个 MD5,可加盐,用来登录
        61
    across   117 天前
    问个题外话,id 在什么情况下会用到模糊查询?
    模糊查询应该不会对外开放,要不然就人来做账号测试了吧?
        62
    abcbuzhiming   117 天前
    @yangbotool 等一下,你这个方式如何做模糊查询,我没想明白
        63
    w0nglend   117 天前
    @hhhsuan 『网络安全法』
        64
    PressOne   117 天前 via Android
    @w0nglend 那淘宝里面的手机号,卖家都能直接看到买家手机号的,也是没有打星号的。
        65
    mytsing520   117 天前
    很多人已经提到了,核心是脱敏。
    密钥可以和数据库分开,反正假如数据库被入侵,看到的都是乱码,且入侵者无法采用常规加解密算法获得数据即可。
        66
    qianmeng   116 天前 via Android
    弄个可逆的加密就行了
        67
    wenzhoou   116 天前 via Android
    总结一下:
    1 密钥放 HSM 不能拿出来
    2 对称加密还是不对称加密不是重点
    3 存放 md5 等 hash 值是为了在不解密的情况下快速查询,因为解密速度慢
    4 like 和 range 的查询是伪需求。但是如果想要快速查询尾号为 xxxx 的号码的话,就新增加一个 tail-index 字段。
    5
        68
    wenzhoou   116 天前 via Android
    5 密钥存放有策略,如果同一个产品给不同的委托方使用的话,每个委托方保留一个密钥,不可重复。
    6 可以加加 salt 以提高安全性。具体看你的需求。比如信用卡号码安全级别就比手机号高。加 salt 的时候选取相对不变的字段。比如 ID 是每个用户唯一的,而且不变的字段用来做 salt 很合适。
        69
    yangbotool   116 天前
    @abcbuzhiming 模糊查询和肯定不支持了。但应该用不到模糊查询一个手机号吧? 其它分类信息如果你要用,可以单独分出来,比如运营商、区号。
        70
    aleung   116 天前 via Android
    如果是有国外用户,应该是为了满足欧盟 GDPR 的要求吧
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   977 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 30ms · UTC 20:27 · PVG 04:27 · LAX 13:27 · JFK 16:27
    ♥ Do have faith in what you're doing.