瞭解 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. 提供替代密碼驗證方式
Yahoo! JAPAN 提供下列密碼替代選項。
此外,我們也提供驗證方式,例如電子郵件驗證、密碼結合簡訊動態密碼 (動態密碼),以及密碼與電子郵件動態密碼。
簡訊驗證
簡訊驗證是一種系統,可讓已註冊的使用者透過簡訊接收六位數驗證碼。使用者收到簡訊後,即可在應用程式或網站中輸入驗證碼。
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 (依賴方)。
詳情請參閱 FIDO 聯盟提供的驗證指南。
Yahoo! JAPAN 支援 Android (行動應用程式和網頁)、iOS (行動應用程式和網頁)、Windows (Edge、Chrome、Firefox) 和 macOS (Safari、Chrome) 上的 FIDO。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"
。
提供無密碼帳戶的最大難度並非提供驗證方法,而是採用驗證器的特點。如果使用無密碼服務的經驗不容易使用,轉換方式並不容易。
Google 認為想要達到更高的安全性,必須先提升可用性,因為這需要每種服務都需要獨特創新。
結語
密碼驗證在安全性方面具有風險,也會在可用性方面帶來挑戰。現在,支援非密碼驗證的技術 (例如 WebOTP API 和 FIDO) 已更加普及,該是時候開始進行無密碼驗證了。
Yahoo!JAPAN,採用這種做法對可用性和安全性都有明確的影響。不過,許多使用者仍使用密碼,因此我們會繼續鼓勵更多使用者改用無密碼驗證方法。我們也會繼續改善我們的產品,以提供無密碼驗證方法的使用者體驗。
相片由 olieman.eth 在 Unsplash 網站上提供