直接用 TOTP 代替密码登录 有啥问题么?

121 天前
 est

密码难得记,被破了又很麻烦。

既然都有各种 2FA 绑定,要不直接用 账号+TOTP 登录。不要密码了。

TOTP 每分钟刷新一次,限制每 10 秒只能尝试一次登录。这样有啥安全问题么?

2895 次点击
所在节点    信息安全
29 条回复
monkeyk
121 天前
实际上是可以的,这里面需要有几个问题要注意:
1. 用户从哪查看 TOTP ,手机 APP, 小程序,还是??
2. 如果用户的 TOTP 丢失了如何办,如何重置或重新绑定;

这东西技术上可以,但要和用户使用习惯绑定起来;和短信比起来,totp 无成本,但需要手机设备上有相应的支持。
dya
121 天前
国内这样做没有安全问题。中国的银行其实就是这样做的。只不过是用手机验证码代替,而且这个验证码不是 1 分钟失效的。我估计至少 5 分钟内都可以用吧。登陆要手机验证码,转账也要手机验证码,还需要扫脸证明目前的你跟银行保存的你一致才行。但国外不行。国外没有办法证明目前这个使用者是第一次注册的那个人。
liuidetmks
121 天前
没什么问题,微软先前推广一次性密码,现在推广无密码。鼓励用户删掉账号密码,采用 fido2
815979670
121 天前
如果这样的话 不如直接用 WebAuthB ,这样安全性更高,https://webauthn.io ,国内可以去 阮一峰博客登录体验一下
keyfunc
121 天前
可能会有这样的问题,如果 TOTP 的强度不够高。如果有人获取了用户列表,是不是可以暴力破解?
est
121 天前
@keyfunc 我一开始也有这个担心。但是没想出来,TOTP 怎么暴力破解? 这玩意一分钟变一次。
keyfunc
121 天前
@est 假设哈,TOTP 6 位纯数字,拿到用户列表后,每十秒用 000000 这个口令对这些用户全尝试登录一次,理论上只要用户基数够大,IP 数量够多,你没办法判断是不是正常登录吧。
drymonfidelia
121 天前
@keyfunc 几年前我记得国内微博一个手机号一天最多获取 3 次验证码,超过会提示 24 小时后再试,按这样设计 TOTP 也可以只允许一个用户 4 小时内验证 3 次
keyfunc
121 天前
Quarter
121 天前
有一些开源软件确实是这么做的,比如之前的长亭 WAF 就是直接输入 OTP 就行,但是后面更新加入了先输入用户名密码再输入 OTP 的逻辑
est
121 天前
@keyfunc

第一,是 @drymonfidelia 说的单个账户禁止连续多次验证

第二,雷同的 TOTP 只能第一个通过,剩余就 1 分钟跳成别的了再来吧。
cat9life
121 天前
@est #6 是可以爆破的,实际使用上可不是理论。我见过爆破谷歌验证器的。
cinlen
121 天前
@est totp 本质是用户的 secret + 时间算出来的, 算法是确定的,只要拿到用户 secret 任何时候都能算出正确的 totp 。

所以哪怕它一分钟变一次,也没有增加破解难度。
leonshaw
121 天前
服务端要存 TOTP secret ,拖库直接 G
leonshaw
121 天前
另外虽然可以限制 IP 、账号的登录尝试间隔,但是我可以用多个 IP 同时尝试多个账号,根据生日悖论很容易产生碰撞
cinlen
121 天前
密码是用户提供给网站的,泄露了可以修改。 totp secret 是网站提供给用户的,泄露了咋整。
retanoj
121 天前
@cinlen #16
totp 的“根”还是秘钥。既然是秘钥,那在业务逻辑上是可以做到用户提供给网站的。

我觉得 TOTP 做密码的问题在于把密码这个无限的空间压缩到了有限的 6 位数字空间,同时增加了时间限制。
但也面临着有限时间内猜解数字口令,以及在遍历用户碰撞口令的问题。
est
120 天前
@leonshaw 拿同一个 TOTP ,用多个 IP 尝试多个账号? 这个前面说了,相同 TOTP 只允许成功一次就行了。

另外,这个和拿同一个密码去尝试多个账号有啥区别?

拖库这个,有没有 TOTP 加盐的办法?

@cinlen 再重新生成一套?
likelylee
120 天前
首先 TOTP 有个最大的问题是时间同步,你看一下他的算法就知道了,简单理解就是时间加上用户的唯一序列号做 hash 生成,所以客户端和服务器端要保持时间一致,这也是为什么大部分 TOTP 都是分钟为单位。如果真的做到 10 秒钟,用户这边看到、输入、确认,那边已经超时了比对不一致了。我们早年做过滑动时间窗口做客户端和服务器的时间偏移,但是没有特别的意义。
然后针对脱库这个,库里可以保存用户唯一序列号的强加密数据,这样即使拿到也是加密后的数据。但是加解密也是有时间损耗的,当然不会到秒级,但是用户量大的时候,专门为了登录这个动作而损耗计算时间是否有意义?
最后,现在的合规要求都是多因素,密码+TOTP 是最理想的双因素认证形式。可以考虑在使用 TOTP 的前提下略微降低对密码复杂度的要求,这也是目前部分认证的思路。
再最后,密码这块不要考虑这些有的没的,有任何想法请上 FIDO2 。
leonshaw
120 天前
@est 区别就是密码空间比 TOTP 空间大得多。虽然 secret 足够复杂,但是验证码只有 6 位数字,不需要知道序列,只要碰出一次就够了。

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

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

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

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

© 2021 V2EX