Passkey(通行密钥)
Passkey 是基于公私钥凭证和本机解锁确认的登录机制,用设备持有的私钥替代可被泄露或转发的共享密码与验证码。
#type / concept
#status / evergreen
#tech / security
#resource / passkey
[!info] related notes
- 所属 MOC: 安全 MOC
- 前置概念: WebAuthn, 非对称密码学(Asymmetric-Encryption), 数字签名
- 并列概念: TOTP(基于时间的一次性密码), 虚拟 MFA
- 易混淆概念: 密码, 短信验证码, 硬件安全密钥
- 关系笔记: 虚拟 MFA、短信 MFA、Push MFA 与 WebAuthn / Passkey 的安全边界
- 相关资源: Telegram
Passkey(通行密钥)
一句话定义
Passkey 不是“新型密码”,而是把登录从“你知道一个秘密”改成“你持有一把私钥,并且当前设备已经确认是你本人在用它”。
核心机制 / 工作原理
Passkey 的底层是公钥凭证认证:
- 服务端保存公钥
- 用户设备、密码管理器或安全密钥保存私钥
- 指纹、Face ID、PIN 或设备密码只用于解锁本机对私钥的使用权限
登录时,服务端不会再要求用户提交一个静态秘密,而是给客户端发一个一次性挑战:
服务端生成随机 challenge
-> 客户端请求使用对应 passkey
-> 用户用指纹 / Face ID / PIN / 设备密码确认
-> 私钥在本机对 challenge 签名
-> 服务端用公钥验签
-> 验签成功后通过登录
这意味着:
- 私钥不会发送给服务端
- 指纹和人脸不会发送给服务端
- 用户也不需要手动输入可被转发的验证码
Passkey 常见有两种保存形态:
- 同步型 passkey:保存在 iCloud Keychain、Google Password Manager、1Password、Bitwarden 一类同步系统里,换机更方便
- 设备绑定 passkey:只存在某台手机、电脑或硬件安全密钥里,迁移更麻烦,但边界更硬
最小例子 / 最小场景
以 Telegram 一类已支持 passkey 的应用为例:
用户先用旧方式登录一次
-> 在账号安全设置里创建 passkey
-> 设备为该账号生成一对新密钥
-> 公钥绑定到账号,私钥留在设备或密码管理器
-> 以后在新设备登录时,用户只需调用 passkey 并完成本机解锁确认
这个流程里,passkey 解决的是“如何证明你控制着之前绑定过的设备密钥”,而不是“如何把短信发到你的手机号上”。
边界与易混淆点
- Passkey 不是密码的花哨包装,它的安全模型从共享秘密变成了公私钥签名。
- Passkey 不是单纯的“验证码替代品”,它的关键优势是私钥不出设备,而且凭证与站点或应用身份绑定。
- Passkey 往往能替代短信登录码或一次性登录码,但不一定自动绕过账号自己的二步验证密码。
- 生物识别不是发给网站的认证数据,而是设备本地的解锁动作。
- 它比短信验证码更稳定,也比密码和 TOTP 更抗钓鱼,但仍然受恢复链路、云账号安全和设备被控风险影响。
- 新设备上是否会自动弹出 passkey,取决于应用是否主动调用相关登录流程,以及设备是否能访问保存 passkey 的密码管理器。