简论密码登录安全性
1. 使用加密信道
必须使用 SSL/TLS 如 https 协议来通信。
证书必须定期更新。需要具备主动更新证书的能力。
2. 不能通过网络传输密码
不仅不能通过网络传输密码明文(即使是 https 也不行),也不能传输密码指纹(如 MD5),彩虹表可以高效破解 MD5。即使是加盐 MD5 也不够安全。
https 无法防止两个问题:
后台证书过期了,但用户忽略了该过期错误
https 证书颁发机构被攻击,甚至 CA 机构本身就有问题
钓鱼攻击。中间人搭建一个假的网站,引诱受害者注册,这样中间人可以拿到密码,然后再用密码到真正的网站去帮受害者注册。
3. 后台不能存储密码
不仅不能存储密码明文,也不能存储密码指纹(如 MD5),彩虹表可以高效破解 MD5。
即使是加盐 MD5 也不够安全。
4. 使用零知识认证协议
如 SRP、kerberos
这些协议不需要通过网络传输、也不需要后台存储任何形式的密码
5. 强制用户使用高强度密码
6. 最大错误次数
用户如果连续多次输入的密码都是错误的,要禁登一段时间。
可以一定程度防止撞库(用别的网站泄露的密码,来尝试本网站)
7. 用密码登录时,使用 MFA
MFA(Multi-Factor Authentication)可以确保即使密码泄露,别人也无法登录成功。
但增加了一个步骤,对正常用户的体验会有一点影响。业务需要做权衡取舍。
7.1 新设备首次登录,要强制 MFA
8. 每次密码登录成功后,都向用户发送通知
特别是异地登录时
9. 单台设备限制注册账号数量
10. 限制单个账号同时登录的设备数量
比如微信是限制同一时刻,同一个账号只能在一个同类设备上登录,登录第 2 个设备,会自动踢掉前一个设备。
11. 支持找回密码
设计该功能时,要特别小心。
首先,不应该、也无法支持找回原密码,因为后台也不知道密码是多少。只能重新设置密码。
重置密码前,必须验证用户身份,确认是用户本人后,才允许重置密码。比如给用户邮箱发一个重置链接、让用户回答密保问题、验证生物信息(如指纹、人脸)等。可以多个措施同时验证,增加安全性。
12. 异常发现、监测
12.1 单个账号登录设备数
需要有设备管理入口,能让用户自己查看、管理已登录设备;
经常异地登录的账号要监控起来(可能是多人分享账号)
12.2 单个账号在短时间内在多个 IP 地域同时活跃
12.3
13. 要防止、抵御的攻击方式
撞库(字典攻击)
拖库
劫持(冒充服务器的中间人?)
钓鱼
电信诈骗
社工
验证码随意转发、泄露
重放
暴力破解、字典攻击
窃听
代码泄露、反汇编
14. 用户体验
以前的手机号已经不用了,登不上之前的账号了
新买的手机号,为什么不让注册新账号
15. 微信的实现
微信是使用私有协议,但 KM 文档中记录有参考 Kerberos 相关信息,估计是参考并改进的 Kerberos。
另外,不同的微信用户,其大票有效期是不同的,具体是根据用户及设备的大数据画像来决定的(类似于 Q 音的用户分层)。绝大多数普通用户一般都是可以自动登录成功了,当然也会有一个最久多长没登录过就需要切换到手工登录,但这个时间属于是不对外公开的。
版权声明: 本文为 InfoQ 作者【Geek_44385e】的原创文章。
原文链接:【http://xie.infoq.cn/article/4e0fdea9aa78ae69d343d320b】。未经作者许可,禁止转载。







评论