用户口令(密码)应该如何传输?要不要加密? HTTPS 呢?举例分析

56 天前
 FengMubai

假设

口令在信道中传输时不会被窃取(就是未被安装伪造证书的 HTTPS ),但服务端被攻破

1. 明文请求登录和存储

攻击者得到了用户的口令明文,可以去其他站点尝试输入登录

2. 哈希请求登录和直接存储

攻击者得到了用户的口令哈希,可以构造请求去其他站点尝试登录

3. 哈希请求登录和加盐存储

攻击者在拿到服务端日志或执行权限时,可能获得口令哈希,然后构造请求去其他站点尝试登录

4. 加弱盐哈希请求登录和加强盐存储

例如,前端用SHA256($password + $hostname)请求登录,服务端用SHA256($hash + $salt)存储。 攻击者可能得到请求的哈希值,但因为加盐的存在,即便用户在其他站点使用相同口令,也无法重新计算哈希构造请求登录

总结

第 4 种方法是最安全的。当然我们作为用户,还是每个站点都使用独立口令最好

后记:刚拔完智齿,闲得无聊,把很久以前的思考整理成文

3799 次点击
所在节点    信息安全
54 条回复
FengMubai
55 天前
@Tstxxy 现密码学的思想是:算法可公开,安全性靠密钥保证,对于非对称密码甚至可以公开密钥,哈希密码甚至没有任何必须隐藏的东西了。你再花时间想想
byte10
55 天前
@Tstxxy 😂,很多人都是这样想的。

楼主我再告诉你 2 个案例,有人说 cookie 不安全,别人登陆你电脑拿到 cookie 就可以登陆你淘宝。还有人说家里的门不安全,因为你钥匙掉了,或者被偷了就会被盗窃。

你提出的问题 跟上面没啥区别。目前市面 95%的 app ( web )都不会通过客户端加密来请求登录的(当然做了是更好),微信和支付宝虽然我没研究过,但是花 5000 块钱 肯定是可以拿到你说的那些啥前端加密的方式😂 。

有安全级别比较高的 app ,比如支付宝,他们就需要你的人脸识别,短信验证等。
FengMubai
55 天前
@byte10 同上,我并没有想要隐藏我的加密过程
byte10
55 天前
@FengMubai 嗯,你说的 不可逆的算法确实可以保护好用户的明文密码是可行的。刚看错了。
Anarchy
55 天前
这些逻辑都基于把密码当做用户隐私做安全措施,那用户隐私是什么级别的安全防护?当然明文存了。
DeWjjj
55 天前
在登入系统独立的情况下,密码可以由多个字段处理管理。
例如捆绑 ip ,换 ip 验证信息丢失。
验证器,例如谷歌等。
手机验证码,小金额保护。
人脸验证,大金额保护。

安全措施很多,不仅要只做密码一层。
murmur
55 天前
@byte10 你那算什么案例,拿到 cookie 就可以登陆淘宝意味着黑产可以随便做机器人,实际上你猜猜淘宝有多少风控系统
ifbluethen
55 天前
4 感觉拿到 hash 后的密钥就能用 api 工具伪造请求,只是没有明文密码而已吧
jinliming2
55 天前
抱歉抱歉,确实没仔细看假设。
不过,对于 Web 业务,如果服务端被攻破,那么就完全有能力改造用户端的登录页面,直接去除 hash 逻辑,把明文带上来。
当然,这里假设服务端被攻破是指能控制前端代码的服务端被攻破。
ryanlid
55 天前
服务器被攻破了,别人在下载用户数据,你却在破译用户密码
lthon
55 天前
如果基于 Kerckhoffs's principle ,那么不能依赖客户端的服务器不被攻破,所以方案 3 和 4 是一样的。
搜索到 https://crackstation.net/hashing-security.htm ,这篇文章说得非常好,建议得方案比 OP 第 4 种稍作了一些变化,前端的 hash 函数使用标准密码哈希函数(例如 Argon2 、bcrypt 、scrypt 或 PBKDF2 )而不是 SHA256 ,目的是减慢 hash 速度。
FengMubai
55 天前
@lthon 终于有人是完全在讨论应用密码学而不是程序设计了
wdssmq
54 天前
PBKDF2 - PBKDF2 演示封装 - 水水的演示站
https://demo.wdssmq.com/tools/PBKDF2/

之前 v 友说如果确实要弄可以用这个方案。。
SP00F
54 天前
@FengMubai #38 首先要考虑的是如何防止数据泄露、数据脱敏、服务器最高权限被拿下。再去考虑密码的问题,即便没有拿到最高权限,当渗透的主要目的只是脱裤的时候,最高权限不是对方的目的,对方的目的可以通过供应链、劫持等渠道篡改部分前端代码( Web ),在构造请求前就可以把活跃用户的账号密码“脱”下来。

还有做埋点记录的,这一块属于供应链侧的攻击,你要考虑你的用户群体是否存在被脱裤的价值,如果有那优先考虑如何防止在低权限的情况下甚至不是以攻击你方服务器的情况下获取到用户信息。

担心在传输过程中出现问题得考虑中间人的问题,再去加密即可。

安全是无形的成本,钱嗷嗷花,东西看不见。出问题的时候这钱花得又觉得不值,老板高管不懂安全的又要骂又要砍。

为什么小公司几乎都不会考虑更深的安全问题就在这里了。即便大公司,说实话的,当攻击面扩大的时候,已经不是考虑密码传输加密不加密的问题了。

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

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

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

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

© 2021 V2EX