問題
網路釣魚是網路上最重大的安全問題:81% 的駭客相關帳戶 使用低強度或遭竊的密碼。這個產業的 都是多重驗證 實作部分零碎,多數還是無法妥善處理網路釣魚。 從那時起,我們便一直與 FIDO 聯盟合作 以及最近與 W3C 合作導入標準化的 可防範網路釣魚的通訊協定,任何網頁應用程式都能使用這個通訊協定。
什麼是 WebAuthn?
Web Authentication API 提供了 應用程式會由使用者代理程式中介存取驗證器,這通常 透過 USB/BLE/NFC 或直接內建於 平台 – 以便產生和挑戰應用程式範圍 (eTLD+k) 公開金鑰憑證。這可實現多種用途,例如:
- 低度簡化和可防範網路釣魚的雙重驗證 (適合搭配 密碼)。
- 無密碼的生物特徵辨識重新授權。
- 不需輸入密碼 (可直接使用) 這類帳戶)。
這個 API 預計可由大多數主要瀏覽器實作, 同時簡化了 UI 的 線上證明程序 可大幅減少網路釣魚行為
WebAuthn 擴充了 Credential Management API,並新增了
憑證類型 PublicKeyCredential
。WebAuthn 會將
瀏覽器和驗證器之間的通訊,並可讓使用者:
- 為網站建立及註冊公開金鑰憑證。
- 證明擁有對應的私密資訊,藉此驗證網站 鍵。
Authenticator 是可產生私密/公開金鑰組合的裝置, 同意。只需輕觸一下,即可授予簽署同意聲明, 或其他方式 (前提是其遵守 FIDO2 的規定) 相關規定 (加入認證計畫 或來自 FIDO 聯盟)。Authenticator 可內建 (例如智慧型手機上的指紋掃描器) 或透過 USB、藍牙低功耗 (BLE) 或近距離無線通訊 (NFC)。
運作方式
建立金鑰組並註冊使用者
使用者想要為網站註冊憑證 (WebAuthn 稱為) 做為「依賴方」):
- 依賴方產生挑戰。
- 依賴方要求瀏覽器透過 Credential Manager API 要求瀏覽器 為信賴方產生新的憑證 (指定裝置) 功能,例如裝置是否提供本身的使用者驗證 (有生物特徵辨識)。
- 驗證器取得使用者同意聲明後,驗證器會產生 並將公開金鑰和選用的簽署認證傳回給 網站。
- 網頁應用程式會將公開金鑰轉送至伺服器。
- 伺服器會儲存公開金鑰和使用者身分,以便記住 並供日後驗證時使用
let credential = await navigator.credentials.create({ publicKey: {
challenge: new Uint8Array([117, 61, 252, 231, 191, 241, ...]),
rp: { id: "acme.com", name: "ACME Corporation" },
user: {
id: new Uint8Array([79, 252, 83, 72, 214, 7, 89, 26]),
name: "jamiedoe",
displayName: "Jamie Doe"
},
pubKeyCredParams: [ {type: "public-key", alg: -7} ]
}});
驗證使用者
網站需要取得網站互動的證明時,才能與正確的網頁互動 使用者:
- 依賴方產生挑戰,並提供瀏覽器清單 註冊使用者擁有的憑證並標明 尋找本機內建驗證器等憑證 並透過 USB、BLE 等方式
- 瀏覽器要求驗證者簽署驗證。
- 如果驗證器包含其中一個指定憑證,驗證器 收到使用者同意聲明後,會將已簽署的宣告傳回網頁應用程式。
- 網頁應用程式會將已簽署的宣告轉送至依賴方的伺服器 進行驗證。
- 一旦伺服器通過驗證,驗證流程就會視為驗證流程 成功。
let credential = await navigator.credentials.get({ publicKey: {
challenge: new Uint8Array([139, 66, 181, 87, 7, 203, ...]),
rpId: "acme.com",
allowCredentials: [{
type: "public-key",
id: new Uint8Array([64, 66, 25, 78, 168, 226, 174, ...])
}],
userVerification: "required",
}});
前往以下網址試用 WebAuthn: https://webauthndemo.appspot.com/.
下一步是什麼?
Chrome 67 Beta 版內建 navigator.credentials.get({publicKey: ...})
和 navigator.credentials.create({publicKey:... })
,並支援
在電腦上透過 USB 傳輸進行 U2F/CTAP 1 驗證器。
即將發布的版本將支援更多傳輸方式,例如 BLE、NFC,以及 新版 CTAP 2 有線通訊協定。我們也正在研究更進階的流程 啟用 CTAP 2 和 WebAuthn,例如 PIN 碼保護驗證器、本機 登入帳戶 (而不是輸入使用者名稱或密碼),以及 指紋註冊。
請注意,Microsoft Edge 也支援 API 和 Firefox 自 Firefox 60 起支援 WebAuthn。
資源
我們正在打造更詳細的說明文件:
- WebAuthnDemo 依賴方範例 模式
- WebAuthn 的分析 文章:Adam Langley