「不再使用那种偷得走的密码」——实现这一点的正是 passkey。本文讲解其原理,以及它与密码、短信验证的区别(不会写出攻击手法)。
原理:秘密「不会离开设备」
passkey 基于公钥密码学(FIDO2 / WebAuthn 这一标准)运行。注册时设备会生成一对密钥,只把公钥交给服务器。登录时,只需用设备内的私钥对服务器发来的「题目(challenge)」进行签名并返回。私钥不会离开设备的安全区域。
密码
你 和 服务器 共享同一个秘密。服务器泄露/在假网站输入就会被偷走
passkey
私钥只在设备内。服务器只有公钥=泄露也无法被滥用
「服务器上只有公钥」这一点很关键。公钥顾名思义就是可以公开的值,因此即使数据库泄露,单凭它本身也无法用来登录(这与密码的保存前提正好相反→ 什么是哈希化)。
与密码+短信到底有何不同
密码+短信验证码
- 共享秘密(密码)会泄露/因重复使用而连锁失守
- 在假网站输入时,连验证码一起被中间人转发
- 容易以「我自己能识破」的过度自信为前提
passkey
- 没有共享秘密=不存在可被偷走的字符串
- 签名绑定到域名=在假网站上无法成立
- 即使用户没察觉,机制上也会挡住假网站
中间人型钓鱼(AiTM)即使你小心翼翼地输入了正确的验证码,也会连那个验证码一起转发(→ 什么是钓鱼)。passkey 因为签名被绑定在域名上,从原理上堵住了这条路径。
接下来阅读
- 入门:如何挑选密码管理器(也关系到 passkey 的保管・同步)
- 两步:如何挑选多因素认证(MFA)(什么是抗钓鱼)
- 原理:密码的安全保存方法 / 术语:什么是钓鱼
FAQ
Qpasskey 和密码有什么区别?
密码是「你和服务器共享的一串秘密字符」,所以一旦泄露任何人都能使用。passkey 则不持有共享的秘密。它用设备内的私钥进行签名,服务器上只保存与之配对的公钥。不存在可被偷走的字符串,即使服务器发生泄露,仅凭公钥也无法被滥用——这是根本性的区别。
Q为什么 passkey 抗钓鱼能力强?
passkey 的签名绑定在「面向哪个网站(域名)」上。即使被诱导到假网站登录,由于域名不一致,签名本身就无法成立。也就是说,即使用户没有察觉自己进了假网站,从机制上假网站也通不过。这与密码+短信验证码在中间人攻击中被原样整体转发形成鲜明对比。
Q丢了设备就无法登录了吗?
passkey 在多数情况下会通过操作系统或密码管理器的云同步进行备份,在其他设备上也能使用(同步 passkey)。此外,在多台设备或多把密钥上注册 passkey、并准备好恢复手段会更安全。应避免只绑定到一台设备且没有任何恢复手段。