首先Passkey的目的根本不是2FA,而是消灭密码。国内用户可用的Microsoft Account和微信(iOS)就支持Passkey,你看它们用Passkey登录的时候会要求密码或者再验证一次别的东西吗?当然,因为Passkey本质上是FIDO2+可被发现的凭据,一堆网站用类似的东西作2FA,再加上苹果和新版本Play的实现里面把不可发现的凭据也当成了Passkey,目前Passkey到底是无密码登录还是2FA早就是一团浆糊了。
现在说短信验证码,实际上它直到今天都是使用最多的2FA方式,不论国内还是国外。只不过国际大厂基本都支持了TOTP和WebAuthn,但是非技术用户基本不买账。
国内为什么连支持都很少,是因为实名认证账号需要绑定手机号,那么用它来认证自然是阻力最小的,这是主要的原因。其次国内的互联网服务提供商就是不喜欢用开放标准,凡事都要自己造轮子。以及,Google Authenticator都在国区App Store下架了,你让国内用户用什么,难不成Microsoft Authenticator?
至于Passkey,国内基本只有苹果用户能玩的了。安卓实现依赖Play,小米确实有绕过Play实现,但CTAP里定义的扫码蓝牙Passkey服务器都被那啥了。
其实短信2FA问题不大,国内外大把的银行都用的好好的。主要被诟病的GSM和换卡攻击这两个弱点,在国内清退2G之后都是不存在的。国内互联网服务的问题是短信根本不只是2FA而是登录所需的唯一凭据,这是有很大问题的。更有不少逆天的互联网服务比如知乎,用密码登录要短信验证,用短信验证码登录反而不需要任何额外信息,密码成了摆设!
另外,不推荐分不清“认证”和“加密”之间的区别的账号来写回答,可能会误导读者。