了解 Yahoo!Japan 打造了无密码身份系统。
Yahoo! JAPAN 是日本最大的媒体公司之一,提供搜索、新闻、电子商务和电子邮件等服务。超过 5000 万用户 登录 Yahoo!JAPAN 服务。
多年来,用户账号遭到多次攻击和导致账号访问权限丢失的问题。其中大多数问题都与用于身份验证的密码有关。
随着身份验证技术的近期发展,Yahoo!JAPAN 决定从基于密码的身份验证 改用无密码身份验证
为什么要设置无密码?
由于 Yahoo!JAPAN 提供电子商务和其他与货币相关的服务,则在未经授权的访问或帐号丢失时,可能会给用户造成严重损害。
与密码相关的最常见的攻击是密码列表攻击和钓鱼式攻击。密码列表攻击常见且有效的原因之一是,许多人习惯在多个应用和网站中使用同一密码。
以下数字是 Yahoo!JAPAN。
50 %
在六个或更多网站上使用相同的 ID 和密码
60 %
在多个网站上使用相同的密码
70 %
使用密码作为主要登录方式
在与密码相关的查询中,用户经常会忘记自己的密码。还有一些用户发出了查询,不仅忘记密码,还忘记了登录 ID。在高峰期,此类咨询占所有帐号相关咨询的三分之一以上。
采用无密码登录方式后,Yahoo!JAPAN 致力于提高安全性和易用性,同时不增加用户的负担。
从安全角度来看,在用户身份验证过程中消除密码可以减少列表式攻击造成的损害,从易用性的角度来看,提供不依赖于记住密码的身份验证方法可以防止用户因忘记了密码而无法登录的情况。
Yahoo! 日本的无密码计划
Yahoo! JAPAN 采取了多种措施来推广无密码身份验证,其大致可分为三类:
- 提供替代密码身份验证方法。
- 密码停用。
- 无密码帐号注册。
前两项计划针对的是现有用户,而无密码注册计划针对的是新用户。
1. 提供密码的替代身份验证方法
Yahoo! JAPAN 提供了以下密码替代方案。
此外,我们还提供了身份验证方法,例如电子邮件身份验证、密码与短信动态密码(动态密码)组合以及密码与电子邮件动态密码组合。
短信身份验证
短信身份验证是一种系统,允许注册用户通过短信接收 6 位数的身份验证码。用户收到短信后,可以在应用或网站中输入身份验证码。
![](https://web.dev/static/case-studies/yahoo-japan-identity/image/h08m9uzVJg9uNzM3LE5k.jpg?authuser=6&hl=zh-cn)
Apple 长期以来允许 iOS 读取短信并在文本正文中提供身份验证码建议。最近,通过在输入元素的 autocomplete
属性中指定“一次性代码”可以使用建议。Android、Windows 和 Mac 版 Chrome 可以使用 WebOTP API 提供相同的体验。
例如:
<form>
<input type="text" id="code" autocomplete="one-time-code"/>
<button type="submit">sign in</button>
</form>
if ('OTPCredential' in window) {
const input = document.getElementById('code');
if (!input) return;
const ac = new AbortController();
const form = input.closest('form');
if (form) {
form.addEventListener('submit', e => {
ac.abort();
});
}
navigator.credentials.get({
otp: { transport:['sms'] },
signal: ac.signal
}).then(otp => {
input.value = otp.code;
}).catch(err => {
console.log(err);
});
}
这两种方法都通过在短信正文中包含域名并仅为指定网域提供建议来防止网上诱骗。
如需详细了解 WebOTP API 和 autocomplete="one-time-code"
,请参阅短信动态密码表单最佳做法。
![](https://web.dev/static/case-studies/yahoo-japan-identity/image/Szaf3C0hfjLNkTWAVf9B.png?authuser=6&hl=zh-cn)
将 FIDO 与 WebAuthn 搭配使用
FIDO 与 WebAuthn 搭配使用,使用硬件身份验证器生成公钥加密对并证明所有权。将智能手机用作身份验证器时,可以与生物识别身份验证(例如指纹传感器或人脸识别)结合使用,以执行单步双重身份验证。在这种情况下,系统只会将生物识别身份验证的签名和成功指示信息发送到服务器,因此不存在生物识别数据被盗的风险。
下图显示了 FIDO 的服务器-客户端配置。客户端身份验证器会使用生物识别技术对用户进行身份验证,并使用公钥加密对结果进行签名。用于创建签名的私钥安全地存储在 TEE(可信执行环境)或类似位置。使用 FIDO 的服务提供商称为 RP(依赖方)。
![](https://web.dev/static/case-studies/yahoo-japan-identity/image/PkFYWnOZABjPu7Zc7rXN.png?authuser=6&hl=zh-cn)
用户进行身份验证(通常使用生物识别扫描或 PIN 码)后,身份验证器会使用私钥向浏览器发送已签名的验证信号。然后,浏览器会与 RP 的网站共享该信号。
然后,RP 网站将已签名的验证信号发送到 RP 的服务器,服务器会根据公钥验证签名以完成身份验证。
如需了解详情,请参阅 FIDO 联盟身份验证准则。
Yahoo! JAPAN 支持 Android(移动应用和 Web)、iOS(移动应用和 Web)、Windows(Edge、Chrome、Firefox)和 macOS(Safari、Chrome)上的 FIDO。作为一项消费者服务,FIDO 几乎可用于任何设备,因此是推广无密码身份验证的不错选择。
![](https://web.dev/static/case-studies/yahoo-japan-identity/image/iq0dODcbp3WcPUGTwHkl.png?authuser=6&hl=zh-cn)
Yahoo! JAPAN 建议尚未通过其他方式进行身份验证的用户使用 WebAuthn 注册 FIDO。当用户需要使用同一设备登录时,可以使用生物识别传感器快速进行身份验证。
用户必须针对他们用于登录 Yahoo! 的所有设备设置 FIDO 身份验证JAPAN。
为了提倡无密码身份验证,同时也考虑到了即将停用密码的用户,我们提供了多种身份验证方法。这意味着不同的用户可以采用不同的身份验证方法设置,并且他们可以使用的身份验证方法可能会因浏览器而异。我们认为,如果用户每次都使用相同的身份验证方法登录,可以带来更好的体验。
为满足这些要求,您必须跟踪之前的身份验证方法,并通过以 Cookie 等的形式存储此信息,将这些信息与客户端相关联。然后,我们可以分析不同的浏览器和应用如何用于身份验证。系统会要求用户根据用户的设置、以前使用的身份验证方法以及所需的最低身份验证级别提供适当的身份验证。
2. 密码停用
Yahoo! JAPAN 要求用户设置备用的身份验证方法,然后停用其密码,使之无法使用。除了设置替代身份验证之外,停用密码身份验证(这会导致仅凭密码无法登录)有助于保护用户免受基于列表的攻击。
我们采取了以下步骤来鼓励用户停用其密码。
- 在用户重置密码时推荐其他身份验证方法。
- 鼓励用户设置易于使用的身份验证方法(例如 FIDO)并在需要频繁进行身份验证的情况下停用密码。
- 迫使用户在使用高风险服务(如电子商务付款)之前停用其密码。
如果用户忘记了密码,可以运行帐号恢复。之前,此操作涉及重置密码。现在,用户可以选择设置不同的身份验证方法,我们鼓励他们这样做。
3. 无密码账号注册
新用户无需密码即可创建 Yahoo!JAPAN 帐号。用户首先需要使用短信身份验证服务进行注册。建议用户在登录后设置 FIDO 身份验证。
由于 FIDO 是针对单个设备的设置,因此如果设备无法操作,则很难恢复帐号。因此,我们要求用户保留注册其电话号码,即使在用户设置了额外的身份验证后也是如此。
无密码身份验证的关键验证
密码依赖于人类记忆,并且与设备无关。另一方面,到目前为止,我们的无密码计划中引入的身份验证方法依赖于设备。这带来了一些挑战。
当使用多台设备时,存在一些与易用性相关的问题:
- 使用短信身份验证从 PC 登录时,用户必须检查其手机是否收到短信。这可能会带来不便,因为它要求用户的手机必须随时可用且易于访问。
- 使用 FIDO 时,尤其是使用平台身份验证器时,拥有多个设备的用户将无法在未注册的设备上进行身份验证。您必须为打算使用的每台设备完成注册。
FIDO 身份验证与特定设备相关联,这需要用户持有并保持活跃状态。
- 如果服务合同取消,您将无法再向注册的电话号码发送短信。
- FIDO 将私钥存储在特定设备上。如果设备丢失,这些密钥将无法使用。
Yahoo! JAPAN 正在采取各种措施来解决这些问题。
最重要的解决方案是鼓励用户设置多种身份验证方法。这样可以在设备丢失时提供备用账号访问权限。由于 FIDO 密钥取决于设备,因此最好在多个设备上注册 FIDO 私钥。
或者,用户也可以使用 WebOTP API 将短信验证码从 Android 手机传递到 PC 上的 Chrome。
我们认为,随着无密码身份验证的普及,解决这些问题将变得更加重要。
提升无密码身份验证
Yahoo! JAPAN 自 2015 年以来一直致力于这些无密码计划。 我们于 2015 年 5 月获得了 FIDO 服务器认证,随后推出了短信身份验证、密码停用功能,以及针对每台设备的 FIDO 支持。
如今,已有超过 3000 万月活跃用户停用了密码,并且使用的是非密码身份验证方法。Yahoo! JAPAN 从 Android 版 Chrome 开始支持 FIDO,目前已有超过 1000 万用户设置了 FIDO 身份验证。
得益于 Yahoo!JAPAN 计划,与此类查询数量达到最高时相比,涉及忘记登录 ID 或密码的查询所占的百分比减少了 25%,而且我们还能够确认,由于无密码帐号数量的增加,导致未经授权的访问被拒的情况已有所减少。
由于 FIDO 设置起来非常简单,因此它的转化率特别高。 事实上,Yahoo!JAPAN 发现 FIDO 的转化率高于短信身份验证。
25 %
索取忘记凭据的请求数量减少
74 %
用户成功通过 FIDO 身份验证
65 %
通过短信验证成功
FIDO 的成功率高于短信身份验证,且平均和中位数身份验证时间更短。至于密码,某些群组的身份验证时间较短,我们怀疑这是浏览器的 autocomplete="current-password"
造成的。
![密码、短信和 FIDO 身份验证时间的图表比较。](https://web.dev/static/case-studies/yahoo-japan-identity/image/graph-comparison-authent-4d76bf7a092f7.png?authuser=6&hl=zh-cn)
如需提供无密码帐号,最大的困难在于添加身份验证方法,而要普遍使用身份验证器。如果使用无密码服务的体验不人性化,则过渡将不容易。
我们认为,要提高安全性,我们必须先提高易用性,这需要每项服务都有独特的创新。
总结
密码身份验证从安全角度而言存在风险,也会给易用性带来挑战。现在,支持非密码身份验证的技术(例如 WebOTP API 和 FIDO)已得到广泛使用,是时候开始实现无密码身份验证了。
在 Yahoo!JAPAN,采用这种方法对易用性和安全性都有明确的影响。但是,许多用户仍在使用密码,因此我们将继续鼓励更多用户改用无密码身份验证方法。我们还将继续改进我们的产品,以针对无密码身份验证方法优化用户体验。
照片提供者:olieman.eth,来源:Unsplash