使用 WebAuthn 啟用高強度驗證

問題

網路釣魚是網路上最重大的安全問題:81% 的駭客相關帳戶 使用低強度或遭竊的密碼。這個產業的 都是多重驗證 實作部分零碎,多數還是無法妥善處理網路釣魚。 從那時起,我們便一直與 FIDO 聯盟合作 以及最近與 W3C 合作導入標準化的 可防範網路釣魚的通訊協定,任何網頁應用程式都能使用這個通訊協定。

什麼是 WebAuthn?

Web Authentication API 提供了 應用程式會由使用者代理程式中介存取驗證器,這通常 透過 USB/BLE/NFC 或直接內建於 平台 – 以便產生和挑戰應用程式範圍 (eTLD+k) 公開金鑰憑證。這可實現多種用途,例如:

  • 低度簡化和可防範網路釣魚的雙重驗證 (適合搭配 密碼)。
  • 無密碼的生物特徵辨識重新授權。
  • 不需輸入密碼 (可直接使用) 這類帳戶)。

這個 API 預計可由大多數主要瀏覽器實作, 同時簡化了 UI 的 線上證明程序 可大幅減少網路釣魚行為

WebAuthn 擴充了 Credential Management API,並新增了 憑證類型 PublicKeyCredential。WebAuthn 會將 瀏覽器和驗證器之間的通訊,並可讓使用者:

  1. 為網站建立及註冊公開金鑰憑證。
  2. 證明擁有對應的私密資訊,藉此驗證網站 鍵。

Authenticator 是可產生私密/公開金鑰組合的裝置, 同意。只需輕觸一下,即可授予簽署同意聲明, 或其他方式 (前提是其遵守 FIDO2 的規定) 相關規定 (加入認證計畫 或來自 FIDO 聯盟)。Authenticator 可內建 (例如智慧型手機上的指紋掃描器) 或透過 USB、藍牙低功耗 (BLE) 或近距離無線通訊 (NFC)。

運作方式

建立金鑰組並註冊使用者

使用者想要為網站註冊憑證 (WebAuthn 稱為) 做為「依賴方」):

  1. 依賴方產生挑戰。
  2. 依賴方要求瀏覽器透過 Credential Manager API 要求瀏覽器 為信賴方產生新的憑證 (指定裝置) 功能,例如裝置是否提供本身的使用者驗證 (有生物特徵辨識)。
  3. 驗證器取得使用者同意聲明後,驗證器會產生 並將公開金鑰和選用的簽署認證傳回給 網站。
  4. 網頁應用程式會將公開金鑰轉送至伺服器。
  5. 伺服器會儲存公開金鑰和使用者身分,以便記住 並供日後驗證時使用
,瞭解如何調查及移除這項存取權。
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} ]
}});

驗證使用者

網站需要取得網站互動的證明時,才能與正確的網頁互動 使用者:

  1. 依賴方產生挑戰,並提供瀏覽器清單 註冊使用者擁有的憑證並標明 尋找本機內建驗證器等憑證 並透過 USB、BLE 等方式
  2. 瀏覽器要求驗證者簽署驗證。
  3. 如果驗證器包含其中一個指定憑證,驗證器 收到使用者同意聲明後,會將已簽署的宣告傳回網頁應用程式。
  4. 網頁應用程式會將已簽署的宣告轉送至依賴方的伺服器 進行驗證。
  5. 一旦伺服器通過驗證,驗證流程就會視為驗證流程 成功。
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 也支援 APIFirefox 自 Firefox 60 起支援 WebAuthn

資源

我們正在打造更詳細的說明文件:

「在網路上註冊和登入的新功能」工作階段 2018 年 Google I/O 大會中探討 WebAuthn