了解 Yahoo! Japan 如何构建无密码身份验证系统。
Yahoo! JAPAN 是日本最大的媒体公司之一,提供搜索、新闻、电子商务和电子邮件等服务。每月有超过 5000 万用户登录 Yahoo! JAPAN 服务。
多年来,用户帐户遭受了多次攻击,并出现导致帐户访问丢失的问题。其中大多数问题与用于身份验证的密码使用有关。
随着身份验证技术的最新进展,Yahoo! JAPAN 已决定从基于密码的身份验证转向无密码身份验证。
为什么选择无密码?
由于 Yahoo! JAPAN 提供电子商务和其他与金钱相关的服务,因此如果发生未经授权的访问或帐户丢失,用户将面临重大损失的风险。
与密码相关的最常见攻击是密码列表攻击和网络钓鱼诈骗。密码列表攻击之所以常见且有效的原因之一是,许多人习惯为多个应用程序和网站使用相同的密码。
以下数据是 Yahoo! JAPAN 进行的一项调查的结果。
50 %
在六个或更多网站上使用相同的 ID 和密码
60 %
在多个网站上使用相同的密码
70 %
使用密码作为主要的登录方式
用户经常忘记密码,这占密码相关咨询的大部分。还有用户忘记了登录 ID 和密码的咨询。在高峰期,这些咨询占所有帐户相关咨询的三分之一以上。
通过采用无密码方式,Yahoo! JAPAN 旨在提高安全性,同时改善可用性,而不会给用户带来额外的负担。
从安全角度来看,从用户身份验证过程中消除密码可以减少基于列表的攻击造成的损害;从可用性角度来看,提供一种不依赖于记住密码的身份验证方法可以防止用户因忘记密码而无法登录的情况。
Yahoo! JAPAN 的无密码举措
Yahoo! JAPAN 正在采取多项措施来推广无密码身份验证,这些措施大致可分为三类
- 提供密码的替代身份验证方式。
- 密码停用。
- 无密码帐户注册。
前两项举措针对现有用户,而无密码注册则针对新用户。
1. 提供密码的替代身份验证方式
Yahoo! JAPAN 提供以下密码替代方案。
此外,我们还提供电子邮件验证、密码与短信 OTP(一次性密码)相结合以及密码与电子邮件 OTP 相结合等验证方法。
短信验证
短信验证系统允许注册用户通过短信接收六位数的验证码。用户收到短信后,可以在应用或网站中输入验证码。

长期以来,Apple 一直允许 iOS 读取短信消息并从文本正文中建议验证码。最近,通过在输入元素的 autocomplete
属性中指定“one-time-code”,可以使用建议。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"
的更多信息,请查看 短信 OTP 表单最佳实践。

具有 WebAuthn 的 FIDO
具有 WebAuthn 的 FIDO 使用硬件验证器生成公钥密码对并证明所有权。当智能手机用作验证器时,它可以与生物识别身份验证(例如指纹传感器或面部识别)结合使用,以执行一步式双因素身份验证。在这种情况下,只有签名和生物识别身份验证的成功指示会发送到服务器,因此不存在生物识别数据被盗的风险。
下图显示了 FIDO 的服务器-客户端配置。客户端验证器使用生物识别技术对用户进行身份验证,并使用公钥密码术对结果进行签名。用于创建签名的私钥安全地存储在 TEE(可信执行环境) 或类似位置。使用 FIDO 的服务提供商称为 RP(信赖方)。

用户执行身份验证(通常使用生物识别扫描或 PIN 码)后,验证器使用私钥向浏览器发送签名验证信号。然后,浏览器将该信号与 RP 的网站共享。
然后,RP 网站将签名的验证信号发送到 RP 的服务器,服务器根据公钥验证签名以完成身份验证。
有关更多信息,请阅读 FIDO 联盟的身份验证指南。
Yahoo! JAPAN 在 Android(移动应用和 Web)、iOS(移动应用和 Web)、Windows(Edge、Chrome、Firefox)和 macOS(Safari、Chrome)上支持 FIDO。作为一项消费者服务,FIDO 几乎可以在任何设备上使用,这使其成为推广无密码身份验证的理想选择。

Yahoo! JAPAN 建议用户注册具有 WebAuthn 的 FIDO,如果他们尚未通过其他方式进行身份验证。当用户需要使用同一设备登录时,他们可以使用生物识别传感器快速进行身份验证。
用户必须在使用的所有用于登录 Yahoo! JAPAN 的设备上设置 FIDO 身份验证。
为了推广无密码身份验证并体谅正在从密码过渡的用户,我们提供了多种身份验证方式。这意味着不同的用户可以有不同的身份验证方法设置,并且他们可以使用的身份验证方法可能因浏览器而异。我们认为,如果用户每次都使用相同的身份验证方法登录,则体验会更好。
为了满足这些要求,有必要跟踪以前的身份验证方法,并通过以 Cookie 等形式存储在客户端来链接此信息。然后,我们可以分析不同的浏览器和应用程序如何用于身份验证。系统会要求用户根据用户的设置、以前使用的身份验证方法以及所需的最低身份验证级别来提供适当的身份验证。
2. 密码停用
Yahoo! JAPAN 要求用户设置替代身份验证方法,然后禁用其密码,使其无法使用。除了设置替代身份验证之外,禁用密码身份验证(因此使仅使用密码登录成为不可能)有助于保护用户免受基于列表的攻击。
我们已采取以下步骤来鼓励用户禁用密码。
- 在用户重置密码时推广替代身份验证方法。
- 鼓励用户设置易于使用的身份验证方法(例如 FIDO),并在需要频繁身份验证的情况下禁用密码。
- 敦促用户在使用高风险服务(如电子商务支付)之前禁用密码。
如果用户忘记密码,他们可以运行帐户恢复。以前这涉及到密码重置。现在,用户可以选择设置不同的身份验证方法,我们鼓励他们这样做。
3. 无密码帐户注册
新用户可以创建无密码的 Yahoo! JAPAN 帐户。用户首先需要使用短信验证进行注册。登录后,我们鼓励用户设置 FIDO 身份验证。
由于 FIDO 是按设备设置的,因此如果设备无法运行,则可能难以恢复帐户。因此,我们要求用户即使在设置了其他身份验证后也保留其注册的电话号码。
无密码身份验证的主要挑战
密码依赖于人类记忆,并且与设备无关。另一方面,到目前为止,我们的无密码计划中引入的身份验证方法都依赖于设备。这带来了一些挑战。
当使用多个设备时,会出现一些与可用性相关的问题
- 当使用短信验证从 PC 登录时,用户必须查看手机是否有短信消息。这可能不方便,因为它要求用户的手机随时可用且易于访问。
- 使用 FIDO,尤其是平台验证器,拥有多个设备的用户将无法在未注册的设备上进行身份验证。必须为他们打算使用的每个设备完成注册。
FIDO 身份验证与特定设备绑定,这要求这些设备始终由用户持有并处于活动状态。
- 如果服务合同被取消,则将无法再向注册的电话号码发送短信消息。
- FIDO 将私钥存储在特定设备上。如果设备丢失,这些密钥将无法使用。
Yahoo! JAPAN 正在采取各种措施来解决这些问题。
最重要的解决方案是鼓励用户设置多种身份验证方法。这在设备丢失时提供了备用帐户访问权限。由于 FIDO 密钥依赖于设备,因此在多个设备上注册 FIDO 私钥也是一种好的做法。
或者,用户可以使用 WebOTP API 从 Android 手机向 PC 上的 Chrome 传递短信验证码。
我们认为,随着无密码身份验证的普及,解决这些问题将变得更加重要。
推广无密码身份验证
自 2015 年以来,Yahoo! JAPAN 一直在致力于这些无密码举措。这始于 2015 年 5 月获得 FIDO 服务器认证,随后为每台设备引入了短信验证、密码停用功能和 FIDO 支持。
如今,超过 3000 万月活跃用户已禁用密码并正在使用非密码身份验证方法。Yahoo! JAPAN 对 FIDO 的支持始于 Android 上的 Chrome,现在已有超过 1000 万用户设置了 FIDO 身份验证。
由于 Yahoo! JAPAN 的举措,与此类咨询数量最多时期相比,涉及忘记登录 ID 或密码的咨询百分比已下降 25%,并且我们还能够确认,由于无密码帐户数量的增加,未经授权的访问已有所下降。
由于 FIDO 非常易于设置,因此其转化率特别高。实际上,Yahoo! JAPAN 发现 FIDO 的 CVR 高于短信验证。
25 %
忘记凭据的请求减少
74 %
用户成功通过 FIDO 身份验证
65 %
成功通过短信验证
FIDO 的成功率高于短信验证,并且平均和中位数身份验证时间更快。至于密码,某些组的身份验证时间较短,我们怀疑这是由于浏览器 autocomplete="current-password"
的原因。

提供无密码帐户的最大困难不是添加身份验证方法,而是 普及验证器的使用。如果使用无密码服务的体验不友好,则过渡将不会容易。
我们认为,要实现更高的安全性,我们必须首先提高可用性,这将需要针对每项服务进行独特的创新。
结论
密码身份验证在安全性方面存在风险,并且在可用性方面也带来了挑战。现在,支持非密码身份验证的技术(例如 WebOTP API 和 FIDO)已得到更广泛的应用,现在是开始朝着无密码身份验证努力的时候了。
在 Yahoo! JAPAN,采用这种方法对可用性和安全性都产生了明显的影响。但是,许多用户仍在使用密码,因此我们将继续鼓励更多用户切换到无密码身份验证方法。我们还将继续改进我们的产品,以优化无密码身份验证方法的用户体验。
olieman.eth 在 Unsplash 上拍摄的照片