Passkey 无密码登录

Passkey(通行密钥)是基于 FIDO2/WebAuthn 的无密码登录凭证,本质是绑定到具体网站域名的非对称密钥对(设备握私钥、服务端验签名)。
私钥锁在用户设备安全区(Secure Enclave/TPM 或 iCloud Keychain、Google 密码管理器),永不离开设备;服务端只存公钥。
因凭据与 RP ID(域名)强绑定,钓鱼站拿不到有效签名,拖库也只泄露公钥——这是它相对密码的根本优势。

简单说,Passkey 存储在Authenticator(认证器)中,可以是软件形式,也可以是硬件形式。

  • 平台认证器(Platform Authenticator):内置在你已有的设备里,比如 Mac 的 Touch ID/Face ID(背后是 Secure Enclave)、Windows Hello(背后是 TPM)、Android 生物识别(StrongBox/TEE)。
    这类 passkey 常通过 iCloud Keychain、Google 密码管理器在生态内加密同步,私钥不出安全区,但凭据可在多设备用。
  • 漫游认证器(Roaming Authenticator):独立外设,典型就是 YubiKey 等 FIDO2 安全密钥,USB/NFC/蓝牙插拔使用,密钥钉死在这块硬件里、不云同步。

实现流程

  • 注册
    1. 服务端发随机 challenge + RP 信息
    2. 前端调 navigator.credentials.create()
    3. 设备本地生成密钥对,用户生物/PIN 授权
    4. 返回公钥、credentialID、签名 attestation
    5. 服务端验 challenge 与 origin,存公钥。
  • 登录
    1. 服务端发新 challenge
    2. 前端调 navigator.credentials.get()
    3. 设备找匹配凭据,用户解锁后私钥对 challenge 签名
    4. 服务端用存的公钥验签,通过即登录。每次 challenge 一次性,天然防重放。

与同类方案差异

  • 密码:共享秘密,可钓鱼、可撞库、拖库即泄露;
    Passkey 无秘密可偷,公钥泄露无意义。
  • SMS/Email OTP:依赖电信或邮箱,易受 SIM 交换、拦截、AiTM 代理中继;
    Passkey 不传任何可复用秘密。
  • TOTP(验证器 App):虽离线生成,但 6 位码仍可被实时钓鱼代理中继到真站;
    Passkey 签名绑死 origin,假域拿不到有效签名。
  • Push MFA:存在 MFA 疲劳轰炸、中间人中继风险;
    Passkey 无"批准"动作可被滥用。
  • 硬件安全密钥(YubiKey 等 FIDO 键):安全等级与 Passkey 同级(都防钓鱼、无共享秘密),但需携带实体、成本更高;
    Passkey 可走平台认证器(Touch ID/Face ID/Windows Hello)或云同步(iCloud Keychain、Google 密码管理器),体验更轻,代价是同步副本安全性取决于同步账户本身。
  • 智能卡/PIV:企业级、策略强、但消费端不友好、部署重;
    Passkey 是同一密码学家族里面向消费互联网做的"轻量可同步"形态。
如果你有魔法,你可以看到一个评论框~