写点什么

简论密码登录安全性

作者:Geek_44385e
  • 2024-02-01
    广东
  • 本文字数:1162 字

    阅读完需:约 4 分钟

1. 使用加密信道

必须使用 SSL/TLS 如 https 协议来通信。

证书必须定期更新。需要具备主动更新证书的能力。

2. 不能通过网络传输密码

不仅不能通过网络传输密码明文(即使是 https 也不行),也不能传输密码指纹(如 MD5),彩虹表可以高效破解 MD5。即使是加盐 MD5 也不够安全。

https 无法防止两个问题:

  1. 后台证书过期了,但用户忽略了该过期错误

  2. https 证书颁发机构被攻击,甚至 CA 机构本身就有问题

  3. 钓鱼攻击。中间人搭建一个假的网站,引诱受害者注册,这样中间人可以拿到密码,然后再用密码到真正的网站去帮受害者注册。

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 单个账号登录设备数

  1. 需要有设备管理入口,能让用户自己查看、管理已登录设备;

  2. 经常异地登录的账号要监控起来(可能是多人分享账号)


12.2 单个账号在短时间内在多个 IP 地域同时活跃


12.3


13. 要防止、抵御的攻击方式

  • 撞库(字典攻击)

  • 拖库

  • 劫持(冒充服务器的中间人?)

  • 钓鱼

  • 电信诈骗

  • 社工

  • 验证码随意转发、泄露

  • 重放

  • 暴力破解、字典攻击

  • 窃听

  • 代码泄露、反汇编



14. 用户体验

  • 以前的手机号已经不用了,登不上之前的账号了

  • 新买的手机号,为什么不让注册新账号


15. 微信的实现

微信是使用私有协议,但 KM 文档中记录有参考 Kerberos 相关信息,估计是参考并改进的 Kerberos。

另外,不同的微信用户,其大票有效期是不同的,具体是根据用户及设备的大数据画像来决定的(类似于 Q 音的用户分层)。绝大多数普通用户一般都是可以自动登录成功了,当然也会有一个最久多长没登录过就需要切换到手工登录,但这个时间属于是不对外公开的。


发布于: 刚刚阅读数: 5
用户头像

Geek_44385e

关注

还未添加个人签名 2018-11-09 加入

还未添加个人简介

评论

发布
暂无评论
简论密码登录安全性_登录_Geek_44385e_InfoQ写作社区