@
Buges > 假如你密码足够随机”你是不是忘了还有其他用户的密码不够随机?
totally agree. 所以前端 hash 的作用仅仅是帮助减少密码泄露的风险面而已,对验证这个过程的安全性没有多大帮助。
------
> 如果前端不发送 hash 后的结果到后端,我如何证明自己无法解密用户的数据?
所以你有没有发现你试图用「 zero knowledge ENCRYPTION 」去论证传输一个 hashed password 是 auth 的必要条件 —— 但这根本不是用于登录的。
其实从你 #28 拿出这个来附会撞库和加盐就能感觉出你好像混淆了不少东西
1. 套上任意多的密码学机制当然会「更安全」,但不一定都有意义。这跟 hash 一次还是 hash10 次没区别是一个道理
2. 不接触用户数据的后端并不是典型场景,零信任 /零知识不是每个系统的必要条件,也不是登录 /身份验证机制的必要条件
3. 我存了用户的 salted-hashed-password ,也不可能拿出来去其它网站撞库。被撞站点的数据库公开且 hash 过程相同且密码原文相同,这是一个极其苛刻的条件
4. 不管前端是否先对 password 进行 hash ,数据库里的 password hash 反正都是「零知识」(不能还原出 password 到底是什么)的。对于用户来说,自己的密码已经必不可能由于机制缺陷泄露到第三方了,仅仅是第一方是否有权接触到密码这个问题而已,那这其实跟第一方是否有权访问用户个人信息是一回事,都已经是与登录无关的另一个层面了
-----
其实有一个问题可以用来自我检验到底有没有想清楚:「如果登录过程完全没有用户密码,仅使用个人证书,会比在 SSL 中传输同等长度的随机明文密码更安全吗」
答案是不会。