Yahoo! JAPAN's 免密碼驗證的做法減少了 25% 的提問,登入時間減少 2.6 倍

瞭解 Yahoo!Japan 建構了無密碼身分識別系統。

Yahoo! JAPAN 是日本最大的媒體公司之一,提供搜尋、新聞、電子商務和電子郵件等服務。超過 5 千萬名使用者登入 Yahoo!JAPAN 服務。

這幾年來,有許多人對使用者帳戶和問題發動攻擊,導致失去帳戶存取權。這些問題大多與密碼使用用於驗證有關。

隨著驗證技術近來的進步,Yahoo!JAPAN 決定從密碼式驗證機制改為無密碼驗證。

為何不用密碼?

Yahoo!JAPAN 提供電子商務和其他金錢相關服務,如果使用者未經授權或遺失帳戶,可能會受到重大損害。

與密碼相關的最常見的攻擊是密碼清單攻擊和網路釣魚詐騙。密碼清單攻擊常見和有效的原因之一,是許多人習慣在多個應用程式和網站中使用相同的密碼。

以下圖表為 Yahoo!Japan。

    50 %

    已在 6 個以上的網站上使用相同的 ID 和密碼

    60 %

    在多個網站上使用同一組密碼

    70 %

    使用密碼做為主要的登入方式

使用者經常忘記密碼,而這些密碼涉及大部分的密碼相關疑問。此外,也有使用者詢問除了密碼之外,也忘了登入 ID。在最高峰時,這類問題查詢了超過三分之一的帳戶相關諮詢。

Yahoo!JAPAN 的目標是提升安全性和可用性,同時不會對使用者造成額外負擔。

從安全性的角度來看,從使用者驗證程序中移除密碼,就能減少清單型攻擊造成的損害。另外,就可用性而言,提供不依賴密碼記住密碼的驗證方法,可以避免使用者因忘記密碼而無法登入。

Yahoo! JAPAN 的無密碼計畫

Yahoo! JAPAN 採取了幾個步驟來推廣無密碼驗證,通常可分為三類:

  1. 提供密碼驗證的替代方式。
  2. 密碼停用。
  3. 註冊無須密碼的帳戶。

前兩項計畫適用於現有使用者,而無密碼註冊計畫則是鎖定新使用者。

1. 提供替代密碼驗證方式

Yahoo! JAPAN 提供下列密碼替代選項。

  1. 簡訊驗證
  2. 透過 WebAuthn 使用 FIDO

此外,我們也提供驗證方式,例如電子郵件驗證、密碼結合簡訊動態密碼 (動態密碼),以及密碼與電子郵件動態密碼。

簡訊驗證

簡訊驗證是一種系統,可讓已註冊的使用者透過簡訊接收六位數驗證碼。使用者收到簡訊後,即可在應用程式或網站中輸入驗證碼。

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",請參閱「簡訊動態密碼表單最佳做法」。

搭配 WebAuthn 使用 FIDO

搭配 WebAuthn 的 FIDO 會使用硬體驗證器產生公開金鑰加密組合,並證明其擁有。使用智慧型手機做為驗證器時,智慧型手機可與生物特徵辨識驗證 (例如指紋感應器或臉部辨識) 搭配使用,以執行兩步驟驗證。在這種情況下,只有來自生物特徵辨識驗證的簽章和成功指標才會傳送至伺服器,因此不會有生物特徵辨識資料遭竊的風險。

下圖顯示 FIDO 的伺服器用戶端設定。用戶端驗證器會使用生物特徵辨識驗證使用者,並使用公開金鑰密碼編譯簽署結果。用於建立簽名的私密金鑰會安全地儲存在 TEE (受信任的執行環境) 或類似位置。使用 FIDO 的服務供應商稱為 RP (依賴方)。

使用者執行驗證 (通常是使用生物特徵辨識掃描或 PIN 碼) 後,驗證器會使用私密金鑰將已簽署的驗證訊號傳送給瀏覽器。接著,瀏覽器會將該信號提供給 RP 的網站。

接著,RP 網站傳送已簽署的驗證信號至 RP 的伺服器,根據公開金鑰驗證簽名,以便完成驗證程序。

詳情請參閱 FIDO 聯盟提供的驗證指南

Yahoo! JAPAN 支援 Android (行動應用程式和網頁)、iOS (行動應用程式和網頁)、Windows (Edge、Chrome、Firefox) 和 macOS (Safari、Chrome) 上的 FIDO。FIDO 是消費者服務,幾乎適用於所有裝置,因此很適合推廣無密碼驗證機制。

作業系統 支援 FIDO
Android 應用程式、瀏覽器 (Chrome)
iOS 應用程式 (iOS14 以上版本)、瀏覽器 (Safari 14 以上版本)
Windows 瀏覽器 (Edge、Chrome、Firefox)
Mac (Big Sur 或較新) 瀏覽器 (Safari、Chrome)
Yahoo!JAPAN 提示,透過 FIDO 進行驗證。

Yahoo! JAPAN 建議使用者透過 WebAuthn 註冊 FIDO (如果尚未透過其他方式進行驗證)。如果使用者需要在同一部裝置上登入,可以使用生物特徵辨識感應器快速進行驗證。

使用者必須在用來登入 Yahoo!Japan。

為推廣無密碼驗證機制,並考量改用密碼轉移的使用者,我們提供多種驗證方法。這表示不同使用者可能有不同的驗證方法設定,且可使用的驗證方法可能會因瀏覽器而異。我們相信,如果使用者每次以相同的驗證方法登入,會帶來更優質的體驗。

為了符合這些要求,您必須追蹤先前的驗證方法,並將該資訊以 Cookie 等形式儲存,來連結至用戶端。接著,我們可以分析不同瀏覽器和應用程式用於驗證的方式。系統會要求使用者根據使用者的設定、先前採用的驗證方法,以及所需的最低驗證層級,要求使用者提供適當的驗證服務。

2. 停用密碼

Yahoo! JAPAN 會要求使用者設定替代驗證方法,並停用其密碼,因此無法使用。除了設定替代驗證外,停用密碼驗證機制 (因此無法只使用密碼登入) 還能保護使用者免於清單型攻擊。

我們採取了下列步驟,鼓勵使用者停用密碼。

  • 在使用者重設密碼時宣傳其他驗證方法。
  • 鼓勵使用者設定易於使用的驗證方法 (例如 FIDO),並在需要頻繁進行驗證的情況下停用密碼。
  • 要求使用者先停用密碼,再使用高風險服務,例如電子商務付款。

如果使用者忘記密碼,可以執行帳戶救援程序。以往需要重設密碼,現在,使用者可以選擇設定不同的驗證方法,建議他們這麼做。

3. 無密碼帳戶註冊

新使用者可以建立免密碼的 Yahoo!JAPAN 帳戶。使用者必須先註冊簡訊驗證。並在他們登入後鼓勵他們設定 FIDO 驗證。

由於 FIDO 是一項每部裝置的設定,因此如果裝置無法運作,可能很難復原帳戶。因此,即使使用者已設定額外驗證,我們仍會要求使用者保留電話號碼。

無密碼驗證機制的關鍵挑戰

密碼仰賴人為記憶,因此取決於裝置。另一方面,截至目前為止,無密碼計畫中推出的驗證方法僅適用於裝置。這帶來幾項挑戰

使用多部裝置時,存在一些與可用性相關的問題:

  • 使用簡訊驗證登入電腦時,使用者必須檢查手機是否收到傳入的簡訊。這可能會造成不便,因為使用者隨時都能輕鬆使用手機。
  • 透過 FIDO,特別是平台驗證器,擁有多部裝置的使用者將無法在未註冊的裝置上進行驗證。請務必為要使用的每部裝置完成註冊程序。

FIDO 驗證會綁定特定裝置,因此裝置須在使用者擁有並保持啟用狀態。

  • 服務合約取消後,將無法再傳送簡訊到已註冊的電話號碼。
  • FIDO 會將私密金鑰儲存在特定裝置上,如果裝置遺失,這些金鑰就無法使用。

Yahoo! JAPAN 採取了多項措施來解決這些問題。

其中最重要的解決方案是鼓勵使用者設定多種驗證方法。如此即可在裝置遺失時提供替代帳戶存取權。FIDO 金鑰因裝置而異,因此建議您在多部裝置上註冊 FIDO 私密金鑰。

或者,使用者也可以使用 WebOTP API,將簡訊驗證碼從 Android 手機傳送至電腦版 Chrome

我們相信,隨著無密碼驗證的傳播,解決這些問題將變得更加重要。

推廣無密碼驗證

Yahoo! JAPAN 從 2015 年起就開始執行這些無密碼計畫。 此課程始於 2015 年 5 月取得 FIDO 伺服器認證,接著介紹簡訊驗證、密碼停用功能和每部裝置的 FIDO 支援。

如今,每月活躍使用人數超過 3, 000 萬人已停用密碼,並使用非密碼驗證方法。Yahoo! JAPAN 支援 FIDO 的 Android 版 Chrome 和 FIDO 驗證機制,目前已有超過 1 千萬名使用者設定 FIDO 驗證機制。

由於 Yahoo!JAPAN 的倡議計畫,就尚未記錄登入 ID 或密碼的問題數量,比不上密碼量最高的那段時間減少了 25%,而我們也能夠確認,未經授權的存取行為是因無密碼帳戶數量增加而遭拒。

由於 FIDO 的設定非常容易,因此轉換率特別高。事實上,Yahoo!JAPAN 發現 FIDO 的轉換率比簡訊驗證高。

    25 %

    忘記憑證的要求數量減少

    74 %

    使用者成功通過 FIDO 驗證

    65 %

    成功完成簡訊驗證

FIDO 的成功率比簡訊驗證更出色,且平均驗證時間也更快。部分密碼的驗證時間較短,我們懷疑原因可能是瀏覽器的 autocomplete="current-password"

比較密碼、簡訊和 FIDO 的驗證時間圖表。
FIDO 平均需要 8 秒才能完成驗證,密碼在 21 秒內完成驗證;簡訊驗證則需要 27 秒。

提供無密碼帳戶的最大難度並非提供驗證方法,而是採用驗證器的特點。如果使用無密碼服務的經驗不容易使用,轉換方式並不容易。

Google 認為想要達到更高的安全性,必須先提升可用性,因為這需要每種服務都需要獨特創新。

結論

密碼驗證在安全性方面具有風險,也會在可用性方面帶來挑戰。現在,支援非密碼驗證的技術 (例如 WebOTP API 和 FIDO) 已更加普及,該是時候開始進行無密碼驗證了。

Yahoo!JAPAN,採用這種做法對可用性和安全性都有明確的影響。不過,許多使用者仍使用密碼,因此我們會繼續鼓勵更多使用者改用無密碼驗證方法。我們也會繼續改善我們的產品,以提供無密碼驗證方法的使用者體驗。

相片由 olieman.eth 在 Unsplash 網站上提供