2026 數位防禦實踐:Passkey 完全取代密碼的技術指南

為什麼密碼已死

2025 年全球資料洩漏報告:81% 的入侵事件與密碼相關問題有關:

  • 🔓 弱密碼或跨站重複使用
  • 🎣 釣魚攻擊 (Phishing)
  • 🗄️ 憑證填充攻擊 (Credential Stuffing)

Passkey 從根本上讓這些攻擊在技術層面徹底失效。


Passkey 技術原理

基於 FIDO2 / WebAuthn 標準,核心是非對稱加密:

[Registration Flow]

User Device                    Server
    |                             |
    |  1. 生成金鑰對               |
    |     私鑰 → 留在設備 (TEE)    |
    |     公鑰 ──────────────── → | 儲存公鑰
    |                             |

[Authentication Flow]

User Device                    Server
    |                             |
    |  ← ── Challenge(隨機值)─── |
    |                             |
    |  生物識別解鎖私鑰             |
    |  對 Challenge 簽名 ──────→  | 用公鑰驗證
    |                             | ✓ 認證成功

關鍵安全屬性:

  • 私鑰永不離開設備(TPM / Secure Enclave / TEE)
  • Challenge 綁定 Origin:釣魚網站無法重用簽名
  • 無密碼 = 無密碼洩漏風險

Node.js 實作範例

import {
  generateRegistrationOptions,
  verifyRegistrationResponse,
} from '@simplewebauthn/server';

const RP_ID = 'blog.idri.ai';
const ORIGIN = 'https://blog.idri.ai';

export async function generatePasskeyRegistration(userId, username) {
  const options = await generateRegistrationOptions({
    rpName: 'IDRI BLOG',
    rpID: RP_ID,
    userID: Buffer.from(userId),
    userName: username,
    attestationType: 'none',
    authenticatorSelection: {
      residentKey: 'required',       // Discoverable Credential
      userVerification: 'required',  // 強制生物識別
    },
    supportedAlgorithmIDs: [-7, -257], // ES256, RS256
  });
  
  session.challenge = options.challenge;
  return options;
}

2026 平台支援現況

平台 支援狀態
Chrome / Edge 108+ ✅ 完整支援
Safari / iOS 16+ ✅ 完整支援
Firefox 122+ ✅ 完整支援
Android(指紋/臉部) ✅ 完整支援
Windows Hello ✅ 完整支援
YubiKey 5 系列 ✅ 硬體金鑰

遷移路徑

Phase 1 → 密碼 + Passkey 並存(使用者可選)
Phase 2 → Passkey 優先(密碼移至「其他方式」)
Phase 3 → 完全無密碼(新用戶無法設密碼)

去密碼化的旅程從今天開始。 作為資安研究員,推廣 Passkey 普及是目前最具實際效益的防禦工作之一。

本文代碼可在 MIT 授權下自由使用。