我弄了一个用户登录的密码安全加密策略,各位来看看有什么问题指出么? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
tctc4869
V2EX    问与答

我弄了一个用户登录的密码安全加密策略,各位来看看有什么问题指出么?

  •  
  •   tctc4869 2020-01-14 14:16:31 +08:00 2537 次点击
    这是一个创建于 2168 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我写了个登陆概念流程图,由于 V2EX 不能上传图片。所以改成文字说明。

    说明如下

    登录流程 | |==》客户端 | |》拉盐 | |》密码加密 | | | |》 Hash(password) 》 hmac(hash(password),salt) | | | |》 非对称加密简单 hash 后的密码密文 》 rsa(hash(password),公钥) | |==》服务端 | |》加密 | | | |》 hmac(password,key) | |》 验证密码 》 获得 User 对象 》验证密码,若能匹配,正确执行如下流程 | |》 非对称私钥解密 》 rsa(公钥加密的内容,私钥) 》得到密码原始密文 | |》更改密码的哈希密文值和对应 salt | | | | | |》生成新 salt》 hmac ( hmac(password,新 salt),key )》 新 salt 和加新盐的密文密码更改入库。 流程写完了,如上所示,其中会用到的哈希摘要加密算法,是 sha512 和 hmac512,非对称加密用到了 rsa。目前没有正式应用该流程。 我这个有最后一个端是,如果用户登录密码验证成功,则生成哈希密码密文代替用户的旧哈希密码密文,先生成新盐,新盐与原始密码密文进行 hmac 加密替代旧盐加密码密文哈希 hmac 的密文。其中的 key 值是某个配置文件里的值。 现在问题来了,这个登录流程以及相关的,这些架构设计。各位看出来有哪些安全和稳定问题?各位能指出来吗? 
    12 条回复    2020-01-15 17:14:43 +08:00
    ceet
        1
    ceet  
       2020-01-14 15:26:23 +08:00
    如果一大堆用户频繁登录和退出,利用脚本。 估计 你的程序就完蛋了。
    roscoecheung1993
        2
    roscoecheung1993  
       2020-01-14 16:04:57 +08:00
    不懂为什么要获取密码密文
    GM
        3
    GM  
       2020-01-14 16:06:54 +08:00
    rsa 速度非常慢,你这个登录系统怕是撑不过 100qps
    tctc4869
        4
    tctc4869  
    OP
       2020-01-14 18:24:46 +08:00
    @roscoecheung1993 我已经说了,每次用户登陆成功之后,执行一个方法,通过解密得到的原始密码密文,生成新 salt 再哈希,再把新密码密文和 salt 更新到该用户中
    tctc4869
        5
    tctc4869  
    OP
       2020-01-14 18:25:02 +08:00
    @GM 那有比较好的替换方法么?
    tctc4869
        6
    tctc4869  
    OP
       2020-01-14 18:30:41 +08:00
    @ceet 是服务端一次 rsa 解密和三次 HmacSHA512 加密慢造成的么?
    hebingchang
        7
    hebingchang  
       2020-01-14 18:45:26 +08:00 via iPhone
    话说服务端用 key 做的 hmac 是什么用意?
    GM
        8
    GM  
       2020-01-14 19:19:53 +08:00
    @tctc4869 你的做法大概可以这么形容:
    考试的时候,为了保证我的试卷不被偷窥,我在桌子周围垒起了一圈五米高的围墙,然后写下的所有答案都经过加密,老师必须要用我给的秘钥解密后才能给我阅卷。
    ysc3839
        9
    ysc3839  
       2020-01-14 22:59:29 +08:00
    https://www.infoq.cn/article/how-to-encrypt-the-user-password-correctly
    之前看过这篇文章,打算以后都用 pbkdf2 算法了。
    https://docs.python.org/3/library/hashlib.html
    Python 自带的 hashlib 就有 hashlib.pbkdf2_hmac,可以直接加盐,不需要自己做过多处理。
    ysc3839
        10
    ysc3839  
       2020-01-14 23:05:23 +08:00
    关于你设计的流程,我觉得如果客户端和服务器通信用的是 https 的话就没必要再进行一次 RSA 了。
    个人建议客户端对密码计算 hash 再提交给服务器,服务器使用 pbkdf2 计算后再存入数据库。
    tctc4869
        11
    tctc4869  
    OP
       2020-01-15 09:06:48 +08:00
    @ysc3839 现在都提倡慢哈希函数么?拉盐 hmacSha512 都不提倡了吗?
    ysc3839
        12
    ysc3839  
       2020-01-15 17:14:43 +08:00 via Android
    @tctc4869 这是那篇文章的建议,现实中用的多不多我也不确定。
    关于     帮助文档       博客     API     FAQ     Solana     2628 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 11:52 PVG 19:52 LAX 03:52 JFK 06:52
    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