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 授權下自由使用。
