为什么是无密码?

由于雅虎日本提供电子商务和其他与金钱相关的服务,一旦发生未经授权的访问或账户丢失,用户有可能遭受重大损失。

与密码有关的最常见攻击是密码列表攻击和网络钓鱼欺诈。 密码列表攻击之所以常见且有效,原因之一是许多人习惯在多个应用程序和网站上使用相同的密码。

以下数据是雅虎日本进行的一项调查的结果。

概述

雅虎日本是日本最大的媒体公司之一,提供搜索、新闻、电子商务和电子邮件等服务。 每月有超过 5000 万用户登录雅虎日本服务。 多年来,用户账户曾多次受到攻击,并出现过导致账户访问权限丢失的问题。 这些问题大多与使用密码进行身份验证有关。 随着身份验证技术的不断进步,雅虎日本决定将基于密码的身份验证转变为无密码身份验证。

雅虎日本的无密码计划

雅虎日本正在采取一系列措施推广无密码身份验证,这些措施大致可分为三类:

  1. 提供密码之外的另一种身份验证方式。
  2. 停用密码。
  3. 无密码账户注册。

前两项举措针对现有用户,而无密码注册则针对新用户。

1.提供密码之外的另一种身份验证方式

雅虎日本提供以下密码替代方案。

  1. 短信验证
  2. 带有 WebAuthn 的 FIDO

此外,我们还提供电子邮件验证、密码与短信 OTP(一次性密码)相结合、密码与电子邮件 OTP 相结合等验证方法。

重要

雅虎日本的服务仅限于在日本国内运营的电话运营商,并禁止网络电话短信。

短信验证

短信验证是一种允许注册用户通过短信接收六位数验证码的系统。 用户收到短信后,就可以在应用程序或网站上输入验证码。

长期以来,苹果公司一直允许 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" 的更多信息,请查看SMS OTP 表单最佳实践

带有 WebAuthn 的 FIDO

带有 WebAuthn 的 FIDO 使用硬件验证器生成公钥密码对,并证明其所有权。 当智能手机用作身份验证器时,它可以与生物识别身份验证(如指纹传感器或面部识别)相结合,执行一步式双因素身份验证。 在这种情况下,只向服务器发送生物识别认证的签名和成功指示,因此不存在生物识别数据被盗的风险。

下图显示了 FIDO 的服务器-客户端配置。 客户端验证器通过生物识别技术对用户进行验证,并使用公钥加密法对验证结果进行签名。 用于创建签名的私人密钥安全地存储在TEE(可信执行环境)或类似位置。 使用 FIDO 的服务提供商称为 RP(依赖方)。

一旦用户进行了身份验证(通常使用生物特征扫描或 PIN 码),验证器就会使用私钥向浏览器发送一个签名验证信号。 然后,RP 网站将签名验证信号发送到 RP 服务器,RP 服务器根据公钥验证签名,完成验证。

如需了解更多信息,请阅读FIDO 联盟提供的身份验证指南

雅虎日本支持 Android(移动应用程序和网页)、iOS(移动应用程序和网页)、Windows(Edge、Chrome、Firefox)和 macOS(Safari、Chrome)上的 FIDO。 作为一种消费者服务,FIDO 几乎可以在任何设备上使用,因此是推广无密码身份验证的一个不错选择。

操作系统支持 FIDO
安卓应用程序、浏览器(Chrome 浏览器)
iOS应用程序(iOS14 或更高版本)、浏览器(Safari 14 或更高版本)
视窗浏览器(Edge、Chrome、Firefox)
麦克(大苏尔或更高版本)浏览器(Safari、Chrome)
雅虎日本使用 FIDO 进行身份验证的提示示例。

雅虎日本建议,如果用户尚未通过其他方式进行身份验证,请使用 WebAuthn 注册 FIDO。 当用户需要使用同一设备登录时,可以使用生物识别传感器快速进行身份验证。

用户必须在用于登录雅虎日本的所有设备上设置 FIDO 身份验证。

为了推广无密码身份验证,并照顾到正在过渡到不使用密码的用户,我们提供了多种身份验证方式。 这意味着不同的用户可以有不同的身份验证方法设置,他们可以使用的身份验证方法也可能因浏览器而异。 我们相信,如果用户每次都使用相同的验证方法登录,会有更好的体验。

为了满足这些要求,有必要跟踪以前的验证方法,并通过 Cookie 等形式将这些信息与客户端联系起来。 然后,我们就可以分析不同浏览器和应用程序是如何进行身份验证的。 系统会要求用户根据自己的设置、以前使用过的身份验证方法和所需的最低身份验证级别提供适当的身份验证。

2.停用密码

雅虎日本要求用户设置其他验证方法,然后禁用密码,使其无法使用。 除了设置替代身份验证外,禁用密码身份验证(因此无法仅凭密码登录)也有助于保护用户免受基于列表的攻击。

我们采取了以下措施,鼓励用户禁用密码。

  • 当用户重置密码时,推广其他验证方法。
  • 鼓励用户设置易于使用的身份验证方法(如 FIDO),并在需要频繁验证的情况下禁用密码。
  • 敦促用户在使用电子商务支付等高风险服务前禁用密码。

如果用户忘记了密码,可以运行账户恢复。 以前,这需要重新设置密码。 现在,用户可以选择设置不同的身份验证方法,我们鼓励他们这样做。

3.无密码账户注册

新用户可创建无需密码的雅虎日本账户。 用户首先需要通过短信验证进行注册。 登录后,我们鼓励用户设置 FIDO 身份验证。

由于 FIDO 是按设备设置的,如果设备无法使用,要恢复账户可能会很困难。 因此,我们要求用户即使在设置了额外的身份验证后,也要保留已注册的电话号码。

无密码身份验证面临的主要挑战

密码依靠人的记忆,与设备无关。 另一方面,迄今为止,我们在无密码计划中引入的验证方法都依赖于设备。 这带来了一些挑战。

当使用多种设备时,会出现一些与可用性相关的问题:

  • 使用短信验证从电脑登录时,用户必须查看手机是否有收到短信。 这可能会带来不便,因为它要求用户的手机随时可用,易于访问。
  • 有了 FIDO,特别是有了平台认证器,拥有多个设备的用户将无法在未注册的设备上进行身份验证。 必须为他们打算使用的每个设备完成注册。

FIDO 身份验证与特定设备绑定,这就要求这些设备始终为用户所持有并处于激活状态。

  • 如果取消服务合同,将无法再向注册的电话号码发送短信。
  • FIDO 将私钥存储在特定设备上。 如果设备丢失,这些密钥就无法使用。

雅虎日本正在采取各种措施解决这些问题。

最重要的解决方案是鼓励用户设置多种身份验证方法。 当设备丢失时,这将提供替代账户访问。 由于 FIDO 密钥与设备有关,因此在多个设备上注册 FIDO 私钥也是一种好的做法。

此外,用户还可以使用WebOTP API 将短信验证码从安卓手机传递到电脑上的 Chrome 浏览器。

苹果公司最近发布了密码钥匙功能。 苹果公司使用 iCloud Keychain 在使用同一 Apple ID 登录的设备之间共享私钥(存储在设备上),这样就无需为每台设备进行注册。 FIDO 联盟认识到账户恢复问题的重要性,并发布了一份白皮书

我们相信,随着无密码身份验证的普及,解决这些问题将变得更加重要。

推广无密码身份验证

雅虎日本自 2015 年以来一直致力于这些无密码计划。 首先是在 2015 年 5 月获得了 FIDO 服务器认证,随后又推出了短信验证、密码停用功能以及对每台设备的 FIDO 支持。

如今,已有超过 3000 万月度活跃用户禁用了密码,并开始使用非密码身份验证方法。 雅虎日本对 FIDO 的支持始于 Android 上的 Chrome 浏览器,目前已有超过 1,000 万用户设置了 FIDO 身份验证。

在雅虎日本的努力下,因忘记登录 ID 或密码而进行咨询的比例与最高峰时期相比减少了 25%,而且我们还确认,由于无密码账户数量的增加,未经授权的访问也有所减少。

由于 FIDO 非常容易设置,因此转换率特别高。 事实上,雅虎日本发现,FIDO 的 CVR 比短信验证更高。

与短信验证相比,FIDO 的成功率更高,平均和中位验证时间更短。 至于密码,有些组的验证时间很短,我们怀疑这是由于浏览器的 autocomplete="current-password".

密码、短信和 FIDO 的验证时间对比图。
FIDO 验证平均需要 8 秒,而密码验证需要 21 秒,短信验证需要 27 秒。

提供无密码账户的最大困难不是增加验证方法,而是普及验证器的使用。 如果使用无密码服务的体验对用户不友好,过渡就不会很容易。

我们认为,要提高安全性,首先必须提高可用性,这就需要对每项服务进行独特的创新。

结论

密码验证在安全性方面存在风险,在可用性方面也存在挑战。 现在,支持非密码身份验证的技术(如 WebOTP API 和 FIDO)已得到广泛应用,是时候开始努力实现无密码身份验证了。

在雅虎日本,采用这种方法对可用性和安全性都产生了明显的影响。 不过,许多用户仍在使用密码,因此我们将继续鼓励更多用户改用无密码身份验证方法。 我们还将继续改进产品,优化无密码身份验证方法的用户体验。

点击此处查看雅虎日本的案例研究 PDF 文档。

来源:https://web.dev/yahoo-japan-identity-case-study