基於 WebAuthn / FIDO2 標準的無密碼驗證機制
Passkey 基於 WebAuthn / FIDO2 標準,使用非對稱加密(公私鑰)取代傳統密碼:
1. 使用者點「建立 Passkey」
2. 伺服器產生 challenge + 使用者資訊 → 回傳給瀏覽器
3. 瀏覽器呼叫 navigator.credentials.create()
4. 作業系統提示生物辨識
5. 裝置產生金鑰對,私鑰存本地,公鑰簽名後回傳
6. 伺服器驗證簽章並儲存 (credentialId, publicKey, userId)
1. 使用者輸入帳號(或選擇 Passkey)
2. 伺服器產生 challenge → 回傳
3. 瀏覽器呼叫 navigator.credentials.get()
4. 裝置以生物辨識解鎖私鑰,簽署 challenge
5. 伺服器用儲存的公鑰驗證簽章 → 登入成功
origin(domain),假網站無法重用保留密碼登入,將 Passkey 作為額外的登入方式。
使用者建立 Passkey 後,提示「停用密碼」或將密碼降級為 fallback。
把 Passkey 當作 TOTP/SMS 的替代品,密碼仍為主驗證。
新使用者註冊預設使用 Passkey,舊使用者維持密碼直到自願升級。
| 階段 | 工作項目 |
|---|---|
| 後端 | 引入 WebAuthn 函式庫:Node @simplewebauthn/server、Go go-webauthn、Python py_webauthn、Java webauthn4j |
| 資料庫 | 新增 credentials 資料表:credential_id, public_key, user_id, sign_count, transports, aaguid |
| 前端 | 使用 @simplewebauthn/browser 或原生 navigator.credentials API |
| RP 設定 | 設定 rpId(domain)、origin、user verification 策略 |
| UX | 加入 Conditional UI(autofill 帶出 Passkey)、跨裝置 QR Code 登入流程 |
| Recovery | 規劃帳號復原機制:備用 email、recovery code、客服管道 |
example.com),子網域才能共用這是 Passkey 設計上最棘手的問題——沒有密碼可以打回原形,所以「帳號復原」必須事先規劃好。以下是業界常見做法:
現代 Passkey 預設透過雲端密碼管理器同步,裝置遺失 ≠ Passkey 遺失。
| 平台 | 同步機制 | 復原方式 |
|---|---|---|
| Apple | iCloud Keychain | 用 Apple ID 登入新裝置 → Passkey 自動同步 |
| Google Password Manager | 用 Google 帳號登入 Chrome/Android → 同步 | |
| Microsoft | Microsoft 帳號 | 透過 Authenticator app 同步 |
| 1Password / Dashlane | 自家雲端 | 主密碼解鎖 vault |
引導使用者在多個裝置註冊 Passkey,互為備援:
UX 設計重點:
GitHub、Google 都採此做法。
註冊 Passkey 時,產生 8–10 組一次性恢復碼,要求使用者印出或存到安全位置。
ABCD-1234-EFGH
WXYZ-5678-IJKL
...(共 10 組,每組用一次)
回到傳統的「忘記密碼」流程,但用來重新註冊新的 Passkey:
1. 使用者點「無法登入」
2. 系統寄驗證連結到註冊 email(或簡訊 OTP)
3. 點連結 → 進入「建立新 Passkey」流程
4. 舊的 Passkey 被標記為失效
讓使用者預先指定 2–3 位信任聯絡人,遺失時由他們協助驗證身分。
最後手段:使用者打客服,提供身分證件、回答安全問題、或視訊驗證。
| 網站 | 主要復原策略 |
|---|---|
| 雲端同步 + 多裝置 + Recovery code + 信任聯絡人 + 備用 email/手機 | |
| GitHub | 多 Passkey + Recovery code + SSH key fallback |
| Apple ID | iCloud Keychain + 信任聯絡人 + 復原金鑰 + 客服(含 7 天冷凍期) |
| 銀行 App | 雲端同步 + 臨櫃 / 視訊 KYC |
針對「從密碼遷移到 Passkey」的網站,推薦的最低組合:
Passkey 帶來的安全提升,本質上是把「使用者記得密碼」的責任,換成「使用者保管裝置 / 雲端帳號」的責任。復原機制設計的核心問題是:
你願意讓「攻擊者拿到 email 存取權」就能重設帳號嗎?
如果答案是「不」,那就不能只靠 email 復原,必須額外要求 recovery code 或多裝置驗證。這是 Passkey 時代帳號安全設計最關鍵的取捨。