短信验证码泄露造成实际损失的例子,海内外皆有。较为人所知的是近期豆瓣网友「独钓寒江雪」的例子,以及 Coinbase.com 用户由于 Verizon 的安全漏洞导致数千元的 Bitcoin 被盗取的例子。
既然有如此之多的问题,为什么依然有诸多公司选择使用短信认证,甚至选择短信认证为唯一的认证方式呢?
大概有两个解释 —— 若不是无知,便是真的坏。无知不算可耻,互联网安全本身是中国研究极少而美国相对发达的学科,如果本文可以让更多从业者了解到这个事实,便已推进中国互联网进了一小步;而坏则是更大的问题。发垃圾短信是可以带来短期的收益的,不尊重用户隐私是可以成就诸多「模式创新」的,但「模式创新」带来的恶评,相信各位读者也从各大媒体中没少读到。甚至有 Twitter 用户提到,“Web experience in China is like a bowl of shit being served by a scar-faced, slick-haired waiter with nothing beneath his suit jacket, who just learned to bow politely with an ugly and hideous grin. Utterly unbearable.” (编者译:中国网站不仅难看还难用,刀疤脸梳油头,赤膊穿西装,端一盆屎到你面前,微微欠身冷笑着请你吃的那种。 )
除了短信验证,作为身份验证的方式可能还有什么呢?
传统的基于用户名密码的验证方式当然没错,但是大部分人都不对密码安全有深入的了解,毕竟互联网用户并非网络安全专家。除了老生常谈的不应重用密码(真相是大家都在重用密码)、使用强密码(但强密码逃不过弱加密方式甚至明文密码的威胁)、使用密码管理器(唯一问题是 LastPass 的 bug 多如牛毛且界面丑到天际、1Password 的价格令人惊叹、iCloud Passphrase 的使用方式费解且不跨平台)之外,有什么真的解决问题的方法?
OpenID 的尝试已经事实上失败了 (这个名词可能也只有少部分读者仍有印象),Mozilla Persona 也宣告失败。标准的 OIDC (并非私有的 OAuth 2.0)虽然作为一个标准来说较为成功,但更多的被用于企业级的 SSO 解决方案,而为面向客户端的解决方案。基于巨头的(使用 OAuth 2.0 或类似技术的)认证方式虽然提供了更好的便利性,但它并不可打消用户作为一个普通公民对隐私的顾虑 —— 个人信息多多少少被共享了出去。
我们有什么选项?这可能是最难回答的一个问题。
从用户隐私角度出发,任何一个人都希望尽快能少的提供信息给任何商业公司;从用户体验的角度出发,任何一个产品都应需要最少代价完成「登录」以及合规性的要求,并尽可能少的将用户暴露在风险面之下。最好的策略,目前看起来似乎仍然是基于传统的用户名密码方式的认证,但用户是否埋单、是否懂得保护自己,这是个很值得研究的话题。或许使用巨头提供的登录权衡下来,仍然是折衷的选择:避免巨头的追踪已经十分困难。
但不管怎样,是时候对短信验证码说再见了 —— 一个漏洞百出的方案,绝对不应被理所当然的认为「这就是做事情的方法」。
题图来自:Thought Catalog