通行密鑰為何能抵抗網絡釣魚?WebAuthn、FIDO2 與公開密鑰登入原理
DDEVELOPER
開發發布: 13 分鐘閱讀

通行密鑰為何能抵抗網絡釣魚?WebAuthn、FIDO2 與公開密鑰登入原理

通行密鑰(passkey)不是把密碼儲存得更方便,而是採用 WebAuthn/FIDO2 的公開密鑰身份驗證。服務驗證數碼簽署,毋須在每次登入時接收一組可以重複使用的密碼。

它的重要作用是抵抗網絡釣魚:假登入頁面不能像收集密碼或手動驗證碼般,直接取得並轉用真正服務的通行密鑰。這個保障有明確範圍;備用密碼登入和帳戶復原仍須另外保護。以下從註冊及登入流程解釋原理。

日文原文發布: 2026-06-19

密碼是共用秘密,通行密鑰用公開密鑰驗證

傳統登入會把用戶輸入的密碼傳送給伺服器。妥善的實作會儲存加鹽的密碼雜湊,而非明文,但用戶仍要在登入時提交同一個可重複使用的秘密。

通行密鑰改用一對密鑰。驗證器(authenticator)或憑證提供者管理私鑰,服務儲存對應的公開密鑰。伺服器為登入發出新的挑戰值(challenge),驗證器簽署包含該挑戰資訊的資料,服務再驗證簽署。

密碼登入:
  用戶 -> 伺服器:密碼
  伺服器:與已儲存的密碼雜湊比對

通行密鑰登入:
  伺服器 -> 瀏覽器:challenge
  驗證器:簽署 authenticatorData || SHA-256(clientDataJSON)
  瀏覽器 -> 伺服器:驗證回應及簽署
  伺服器:以公開密鑰驗證簽署,並檢查請求條件

以上只是流程示意,並非完整實作。密碼外洩後可能被重用;單靠外洩的公開密鑰,卻不能產生有效登入簽署。私鑰不會交給登入服務的伺服器。同步通行密鑰的提供者可能透過端對端加密,在用戶的裝置之間同步密鑰資料;這與把密鑰交給登入服務是兩個不同邊界。

WebAuthn 與 FIDO2 的角色

WebAuthn 是讓網頁應用程式建立和使用公開密鑰憑證的瀏覽器 API。WebAuthn Level 3 於 2026 年 8 月 25 日成為 W3C Recommendation,定義應用程式、瀏覽器、驗證器和依賴方之間的互動。

如表格未能完整顯示,可左右捲動。

名詞意思
依賴方(Relying Party,RP)接受登入的網站服務,例如 example.com 的服務。
驗證器(Authenticator)管理私鑰使用的功能或裝置,例如裝置內置驗證功能或保安密鑰。
PublicKeyCredentialWebAuthn API 傳回的公開密鑰憑證物件。

通行密鑰是供無密碼登入使用的 FIDO 可探索憑證(discoverable credential);不是所有 WebAuthn 憑證都稱為通行密鑰。FIDO2 結合 W3C WebAuthn 與 FIDO CTAP,後者處理與外部驗證器通訊等情境。

註冊:將公開密鑰連到正確帳戶

用戶毋須自行構思通行密鑰的內容。新的密鑰對由驗證器產生。

  1. 伺服器提供用戶識別碼、RP ID、挑戰值、允許的演算法及其他註冊選項。
  2. 網頁應用程式在瀏覽器內呼叫 navigator.credentials.create({ publicKey: ... })。
  3. 驗證器確認所需操作。指紋、面容或 PIN 所做的用戶驗證(UV),與觸碰保安密鑰等用戶在場確認(UP)不同;觸碰本身不證明操作者是誰。
  4. 驗證器產生私鑰及公開密鑰。
  5. 伺服器檢查回應 type、已發出的 challenge、允許的 origin、RP ID 雜湊、所需 UP/UV 旗標、演算法和 attestation 政策,然後才將憑證 ID、公開密鑰等資料綁定至正確帳戶。

服務收到的是公開密鑰及憑證資訊,不是私鑰。同步提供者可能把加密的密鑰資料傳到另一裝置,但 RP 不會因此收到私鑰。

向現有帳戶新增通行密鑰,必須先透過適當的身份驗證或重新驗證,確認操作者有權新增,並把註冊作業綁定至該帳戶。建立全新帳戶屬於另一註冊流程。有效的註冊回應或裝置 UV,不能單獨證明操作者有權替所聲稱的現有帳戶加入憑證。

驗證器證明(attestation)可供 RP 評估驗證器的特性或來源,在企業或較高保證要求的環境可能有用,但也涉及私隱和部署成本。一般服務可選擇不要求能識別驗證器來源的證明。

登入:證明回應屬於今次請求

登入時,伺服器要求驗證器證明它能使用已登記的私鑰,而且這份回應是為今次驗證產生。

  1. 用戶開始登入。
  2. 伺服器回傳不可預測的挑戰值及驗證條件。不先輸入用戶名稱的流程可省略 allowCredentials,或將它設為空陣列。
  3. 網頁應用程式在瀏覽器內呼叫 navigator.credentials.get({ publicKey: ... })。
  4. 驗證器完成所要求的用戶驗證或在場確認。
  5. 驗證器簽署 authenticatorData 與 SHA-256(clientDataJSON) 串接後的位元組。challenge 和 origin 位於 clientDataJSON,透過雜湊納入簽署。
  6. 伺服器以已儲存的公開密鑰驗證簽署,並檢查 challenge、origin、RP ID、操作類型、所需旗標和帳戶對應。

要防止重放攻擊,伺服器須發出足夠隨機的挑戰值,綁定至待完成作業、檢查期限,而且只接受一次。簽署有效不等於可以接受重複回應。NIST 亦將 nonce 或 challenge 視為抗重放協定的機制。

用戶可能覺得是「用指紋登入」,但指紋影像不會傳給服務。生物認證或 PIN 是在本機授權使用密鑰的操作。

簽署涵蓋甚麼資料

WebAuthn 的登入簽署並非只涵蓋 challenge。輸入是 authenticatorData || SHA-256(clientDataJSON),|| 表示位元組串接。必須對收到的原始 clientDataJSON 位元組計算雜湊,不能先解析再重新序列化 JSON 來代替。RP ID 雜湊是 RP ID 字串的 SHA-256。

如表格未能完整顯示,可左右捲動。

資料主要內容檢查目的
clientDataJSONchallenge、origin、type 等連結至預期請求、網站來源和操作類型。
authenticatorDataRP ID 雜湊、旗標、簽署計數器等確認 RP 綁定,以及是否完成所需用戶驗證或在場確認。

伺服器除了驗證簽署,也要檢查 challenge 是否由自己發出、origin 是否獲准、RP ID 雜湊是否相符,以及必要旗標是否成立。數學上正確的簽署,不能令不獲准的來源或過期挑戰值變得有效。

簽署計數器只是輔助訊號。有些驗證器一直回傳 0,同步憑證的計數器亦不能一概假設為單調遞增,因此不能只憑數值便斷定憑證被複製。應使用成熟的 WebAuthn 程式庫並遵循完整註冊及驗證程序;本文重點不是自行實作伺服器端驗證邏輯的完整清單。

保障來自簽署、瀏覽器的網站限制、請求條件和驗證器檢查的配合,不是單靠一般數碼簽署 API。

假登入頁面為何不能直接借用真正網站的憑證

通行密鑰的抗網絡釣魚能力不依賴用戶每次都看出網址差異。NIST 將這種能力描述為避免向假冒驗證方交出認證秘密或有效認證輸出;WebAuthn/FIDO2 使用驗證方名稱綁定。

憑證的使用範圍由 RP ID 限定。為 example.com 建立的通行密鑰,不能直接由外觀相似的 examp1e.com 使用。

真正網站:https://example.com
  example.com 的憑證 -> 可用於這個網站

假冒網站:https://examp1e.com
  example.com 的憑證 -> 這個網站不能直接使用

RP ID 通常是 origin 的主機名稱或允許的上層網域,不含 scheme 或連接埠。origin 包括 scheme、主機和連接埠,RP 還要另外驗證允許的 origin。Related Origin Requests 等機制可容許明確設定的例外,不能把所有 WebAuthn 情境都理解為主機名稱必須完全相同。

origin 納入已簽署的資料,單純複製畫面並不足以取得真正服務可接受的登入。通行密鑰流程沒有要求用戶把可轉用的密碼或驗證碼交給假表單。

與 TOTP 和短訊驗證碼的分別

在密碼以外加入獨立的持有因素,例如適當設計的 TOTP 或短訊確認,可加強雙重認證。單靠一組驗證碼不會自動變成兩個因素,TOTP 亦不一定是六位數。短訊還有 SIM 卡被冒名補領或電話號碼被轉移等風險。

手動輸入的驗證碼可能被即時轉送:假頁面收集驗證碼,再趁有效時提交至真正網站。NIST 不把這類手動輸入的認證輸出視為具備抗網絡釣魚能力,因為它未以阻止轉送所需的方式綁定至特定驗證會話。

如表格未能完整顯示,可左右捲動。

方式提交內容網絡釣魚風險
密碼可重複使用的秘密假表單可收集並重用。
TOTP/短訊短時間有效的驗證碼可在到期前被即時轉送。
通行密鑰與 origin/RP 綁定的簽署假網站不能直接使用真正服務的憑證。

這不代表 TOTP 沒有用途。適當加入的因素可以補強只用密碼的不足;WebAuthn 則以服務綁定來處理手動驗證碼容易被轉送的問題。

同步通行密鑰與裝置綁定通行密鑰

部分憑證可在裝置間同步,部分則固定於某部裝置或保安密鑰。提供者可透過端對端加密同步密鑰資料,方便換機後繼續使用;裝置綁定方式的密鑰移動範圍較小,但遺失或故障時須有復原安排。

如表格未能完整顯示,可左右捲動。

類型好處注意事項
同步通行密鑰方便跨裝置使用及換機。保護同步帳戶,了解其復原程序。
裝置綁定/保安密鑰便於管理較明確的密鑰邊界。裝置遺失、損壞或無法使用時需要後備方案。

一般服務可能較重視同步方式的便利。管理員帳戶、企業管理裝置或較高保證要求的環境,則可能需要配合保安密鑰、裝置管理、attestation 政策及多組憑證。不能只憑類型名稱便判定符合所有保安要求。

可探索憑證與毋須先輸入用戶名稱的登入

可探索憑證讓驗證器不用先收到 RP 提供的憑證 ID 清單,也能找到帳戶對應的憑證,支援毋須先輸入用戶名稱的登入方式。

傳統流程通常先輸入帳戶及密碼,再使用驗證碼或保安密鑰。通行密鑰可由瀏覽器或作業系統的憑證管理工具,列出符合目前 RP ID 的帳戶選項;用戶選取後完成所需驗證。

介面仍要考慮共用電腦會顯示哪些帳戶、家庭成員會否選錯,以及公司裝置是否容許個人通行密鑰。帳戶選擇、說明文字和裝置政策同樣重要。

帳戶復原仍須獨立設計

通行密鑰加強登入,卻不會自動保護所有復原途徑。較弱的復原程序仍可能繞過原有保障。

例如平日登入必須使用通行密鑰,復原卻只需電郵中的驗證碼,攻擊者便可能改為入侵電郵帳戶。新增可信任裝置、多組憑證、後備碼和客戶支援程序,都應納入設計。

  • 在服務支援時,為重要帳戶登記多組通行密鑰。
  • 同一組同步通行密鑰在多部裝置可用,並不代表獨立於同步帳戶;可考慮另一復原方法或獨立登記的保安密鑰。
  • 為同步帳戶本身設定強健的身份驗證。
  • 保持復原電郵地址和電話號碼有效。

目標是讓合法用戶能恢復存取,同時避免為攻擊者提供更容易的入口。

實作時不能略過的檢查

瀏覽器和驗證器無法補救所有伺服器端錯誤。

  • 重用 challenge:挑戰值須不可預測、短時間有效、綁定至待完成作業,而且只接受一次。
  • 缺少 origin/RP ID 檢查:簽署正確之外,也要符合允許的來源及預期 RP。
  • 混淆 UP 與 UV:需要用戶驗證時,指定 userVerification: "required",並在伺服器確認 UV 旗標。
  • 憑證對應錯誤:管理好憑證 ID、公開密鑰、帳戶之間的關係及新增權限。
  • 復原途徑薄弱:檢查所有新增或更換憑證的入口。

用戶亦需要知道密鑰可在哪些裝置使用、會否同步,以及能否用於公司裝置。說明應交代操作和後果,不應假設用戶熟悉密碼學術語。

通行密鑰不是全面保安保證

通行密鑰主要改善登入憑證被網絡釣魚竊取的問題。惡意程式仍可能劫持登入後的會話;授權漏洞、會話固定攻擊、跨網站指令碼(XSS)、OAuth 設定錯誤和假冒客戶支援,都要另行處理。

若用戶被騙而將攻擊者的裝置或憑證加入帳戶,仍可能失去帳戶控制權。遙距支援騙案、未受管理的裝置和營運程序,也超出一般假登入頁面的防護範圍。

這些限制不會抹去通行密鑰的作用。公開密鑰憑證與服務綁定,可以阻止一類常見的密碼及驗證碼竊取、轉送攻擊,但要配合安全的會話、授權、登記和復原流程。

由輸入秘密,轉為授權密鑰簽署

密碼是用戶提交的秘密;TOTP 是手動轉交的短效驗證碼;通行密鑰則由驗證器使用與服務綁定的私鑰產生簽署,服務以公開密鑰驗證。

這個分別同時解釋抗網絡釣魚能力和實作責任:註冊要把正確密鑰連到正確帳戶,登入要同時檢查簽署和請求條件。新增裝置、帳戶復原及客戶支援也要維持這個邊界。

把通行密鑰視為完整身份驗證設計,而不只是多一個登入按鈕,才能發揮它的保障。

參考資料及來源

編輯說明

本文使用 AI 協助編輯,並在發布前由編輯核對。內容仍可能包含事實、理解或時效上的錯誤;作出重要決定前,請查閱所列的一手資料或官方文件。

相關工具

相關文章