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

2020-01-14 14:16:31 +08:00
 tctc4869

我写了个登陆概念流程图,由于 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 值是某个配置文件里的值。

现在问题来了,这个登录流程以及相关的,这些架构设计。各位看出来有哪些安全和稳定问题?各位能指出来吗?
1819 次点击
所在节点    问与答
12 条回复
ceet
2020-01-14 15:26:23 +08:00
如果一大堆用户频繁登录和退出,利用脚本。 估计 你的程序就完蛋了。
roscoecheung1993
2020-01-14 16:04:57 +08:00
不懂为什么要获取密码密文
GM
2020-01-14 16:06:54 +08:00
rsa 速度非常慢,你这个登录系统怕是撑不过 100qps
tctc4869
2020-01-14 18:24:46 +08:00
@roscoecheung1993 我已经说了,每次用户登陆成功之后,执行一个方法,通过解密得到的原始密码密文,生成新 salt 再哈希,再把新密码密文和 salt 更新到该用户中
tctc4869
2020-01-14 18:25:02 +08:00
@GM 那有比较好的替换方法么?
tctc4869
2020-01-14 18:30:41 +08:00
@ceet 是服务端一次 rsa 解密和三次 HmacSHA512 加密慢造成的么?
hebingchang
2020-01-14 18:45:26 +08:00
话说服务端用 key 做的 hmac 是什么用意?
GM
2020-01-14 19:19:53 +08:00
@tctc4869 你的做法大概可以这么形容:
考试的时候,为了保证我的试卷不被偷窥,我在桌子周围垒起了一圈五米高的围墙,然后写下的所有答案都经过加密,老师必须要用我给的秘钥解密后才能给我阅卷。
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
2020-01-14 23:05:23 +08:00
关于你设计的流程,我觉得如果客户端和服务器通信用的是 https 的话就没必要再进行一次 RSA 了。
个人建议客户端对密码计算 hash 再提交给服务器,服务器使用 pbkdf2 计算后再存入数据库。
tctc4869
2020-01-15 09:06:48 +08:00
@ysc3839 现在都提倡慢哈希函数么?拉盐 hmacSha512 都不提倡了吗?
ysc3839
2020-01-15 17:14:43 +08:00
@tctc4869 这是那篇文章的建议,现实中用的多不多我也不确定。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/637795

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX