双因素认证(2FA, two-factor authentication)在国内似乎不流行?

2021-01-05 09:47:09 +08:00
 manami

双因素认证能很好地防止密码泄露导致的入侵问题。国外的很多网站在开启双因素认证,比如 Github 、Gmail 、Reddit 等。

经常多个网站使用同一套密码的原因,自己从去年年初开始习惯在一些国外网站开启双因素认证。试了 Google Authenticator 、Authy 、FreeOTP 等几款身份认证器,目前比较喜欢 Authy 这款 APP 。

但是双因素认证技术似乎在国内不流行?国内的网站、APP 好像更多的是通过发送短信的方式进行二次验证。从节省成本的角度考虑,对采用短信而不用双要素认证不太理解。

或者是我不知道,国内是否已经有在广泛使用双因素认证的案例。比如微信电脑端登录需要手机微信扫码确认这种是不是双因素认证的变体?

13273 次点击
所在节点    问与答
81 条回复
cairnechen
2021-01-05 09:53:07 +08:00
我不太理解,短信验证码难道不是双因素的一种吗?
Maxxxxyu
2021-01-05 09:56:00 +08:00
短信,邮件接受验证码都可以算双因素验证,只不过国内现在连输密码这个步骤都跳过了,可能是因为国内手机号都是实名的?

另外国内游戏用双验证挺早的,以前用那种物理的密保卡,现在各种令牌之类的都算双验证。
manami
2021-01-05 09:56:09 +08:00
@cairnechen 其实我对 2FA 的概念也不是太了解。目前我接触到国外的 2FA 都是下载身份认证器 APP 扫码绑定,然后每次可以进去刷新获取一个动态码的方式
manami
2021-01-05 09:58:11 +08:00
银行的电子密码器这种物理固件好像
tangds99
2021-01-05 09:58:27 +08:00
@manami 这不就是 10 几年前流行的将军令吗
HFX3389
2021-01-05 09:58:58 +08:00
@manami #3 就像以前的 QQ 动态令牌
agagega
2021-01-05 09:59:42 +08:00
国内手机号都快成惟一的账号 id 了,靠邮箱来 2fa 肯定不行。离线的 totp 和 hotp 没 App 搞,我猜想产品他们肯定又要说什么国内用户水平不高之类的话,然而我寻思其他国家也不是人均懂王。
Googlefan
2021-01-05 10:00:13 +08:00
QQ 安全中心令牌,银行电子验证器,应该也算是吧?
iceneet
2021-01-05 10:00:15 +08:00
现在主要是手机都实名制了 所以用手机验证了
xingyuc
2021-01-05 10:00:40 +08:00
短信安全吗,手机丢了,卡丢了,不危险吗。手机放家里了,无法登录,不折腾吗
jfdnet
2021-01-05 10:01:05 +08:00
@manami 手机短信验证码 也是动态码 一个意思。
wangxiaoaer
2021-01-05 10:01:10 +08:00
了解一下畅游旗下的各种游戏,就是你说的两步验证。
manami
2021-01-05 10:01:10 +08:00
2FA 身份验证好像可以离线的,现在用的 Authy 都是可以离线获取动态码,有没有专业人士解答下
easonHHH
2021-01-05 10:04:31 +08:00
@manami #13
https://www.ruanyifeng.com/blog/2017/11/2fa-tutorial.html
所以为什么要求时间跟服务器要求 30 秒误差内
boris93
2021-01-05 10:04:42 +08:00
@manami #13 正好我们前两天刚实现了一个
因为 TOTP 算法是定好的,我们服务端生成好一个密钥,做成二维码给用户扫,扫完了手机端按照相同的算法就生成了那 6 位数字,不需要联网
ysc3839
2021-01-05 10:04:47 +08:00
@manami Authy 那是 Time-based One-time Password (TOTP),是通过一个密钥加上当前时间算出来的,密钥是存在本地的,所以可以离线使用。
chroming
2021-01-05 10:10:28 +08:00
在公司维护了一个对内的 totp 服务,软件也是内部用的软件对接 sso 自动开通令牌。国内不普遍我觉得重要的原因是手机人人都有,用短信能减少用户学习成本。
charseer
2021-01-05 10:17:45 +08:00
用 keepass 就能很好代替各种 2fa 客户端,暴雪的啊 steam 的啊都能装一起
ired
2021-01-05 10:27:29 +08:00
负责过用户系统,也调研 过 2FA/MFA(多因素)。
海外用户多的主要的原因在于,账户习惯使用邮箱。从而在安全性上更加需要二次验证。(如 Github 、Gmail 、Reddit )
国内由于手机号(并且近些年的实名),本身短信验证码就是 2FA 的一种实现方案。

------------------------

题外话,从安全性来说,手机短信的安全性 > TOTP 离线动态码(简称令牌)。
业界通用的方案是绑定令牌前,需要绑定手机号。
也可以通过手机验证码解绑令牌。

------------------------

为什么要求时间跟服务器要求 30 秒误差内?
这个只是 Google 提供的算法默认配置而已,算法本身可以简单理解为 hash (密钥 + current_time() / 30) 得到的值。
所以大于 > 30 秒,客户端 和 服务端 计算出来的 hash 值就不一致了。

------------------------

误差大于 30 秒的解决方案?
server 的校验客户端计算出的 hash 值时,可以配置允许的误差,如前后加 N 个时间片( current_time() / 30 )。
举例:如果允许前后加 1 个时间片,服务端几计算的动态值为 CH 。
那么 server 会校验 3 次。
CH == hash (密钥 + current_time() / 30)
|| CH ==hash (密钥 + (current_time() / 30) - 1)
|| CH == hash (密钥 + (current_time() / 30) + 1)

匹配成功一次即为验证成功。
dnsdk
2021-01-05 10:28:47 +08:00
微软自家的 Authenticator,连密码都不用输就登录了。既然都需要打开 app 了,感觉扫码登录更快。

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

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

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

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

© 2021 V2EX