一文搞懂Passkey

廖雪峰
资深软件开发工程师,业余马拉松选手。

苹果在2022年的WWDC大会上宣布了在iOS设备上可以使用一种名叫Passkey的无密码登录,苹果把它翻译成“通行密钥”,并随后又在macOS上支持它。谷歌和微软随后也宣布在Android和Windows系统上支持通行密钥。

那么,什么是通行密钥?它和传统的登录方式有何区别?

我们先回顾最原始的登录方式——密码登录:

┌──── Sign in ─────────────┐
│                          │
│    ┌────────────────┐    │
│    │bob@example.com │    │
│    └────────────────┘    │
│    ┌────────────────┐    │
│    │********        │    │
│    └────────────────┘    │
└──────────────────────────┘

密码登录,要求用户设置一个高强度的密码,因为强度低,容易被破解,但强度高,又记不住。很多网站要求注册时密码必须包含大小写字母、数字和特殊符号,纯属给用户添堵。

而用Passkey登录,则无需输入密码,只需要点一下“一键登录”,就可以直接完成登录。

这种无密码登录到底是什么原理,为什么这么神奇?

其实Passkey的核心技术非常简单粗暴,就是用非对称密钥通过签名完成认证:

┌─────────────────────┐           ┌──────────────────────┐
│       Client        │           │        Server        │
│  ┌───┬───────────┐  │ signature │  ┌─────┬──────────┐  │
│  │bob│private key│──┼───────────┼─▶│bob  │public key│  │
│  └───┴───────────┘  │           │  ├─────┼──────────┤  │
└─────────────────────┘           │  │alice│public key│  │
                                  │  └─────┴──────────┘  │
                                  └──────────────────────┘

使用Passkey登录时,网站存储了用户的公钥,而用户的私钥存放在本地设备(电脑或手机)中,通过给服务器发送私钥签名,服务器验证签名无误,即登录成功。

由于非对称加密是目前加密强度最高的加密技术,所以用Passkey登录,以目前计算机的算力,任何人都无法破解,可以说安全性是100%。

接下来我们看看如何使用Passkey登录网站。以下演示使用macOS系统和Safari浏览器。

使用Passkey分为两步:登记公钥和一键登录。

登记公钥就是在服务器上登记用户对应的公钥,这个步骤只需要做一次。然而服务器如何知道当前用户的身份呢?所以,登记公钥前,还是需要以传统方式登录网站。比如,我们用OAuth登录网站www.liaoxuefeng.com,然后在右上角选择用户 - 通行密钥 - 注册新的通行密钥,浏览器会弹出提示框询问是否存储Passkey到iCloud:

save-passkey

选择Continue,浏览器先在本地保存了私钥,然后把公钥发送给服务器,我们就可以看到当前用户绑定的公钥:

registered-passkey

至此,Passkey就可以使用了。

我们退出登录后,再准备重新登录,选择Passkey登录:

signin-with-passkey

点击Sign in with Passkey,浏览器弹出对话框,询问是否用已保存的Passkey登录网站:

ask-passkey

选择Continue,登录成功!

如果在iPhone和Mac上使用的是同一用户,由于iCloud会在多个设备中自动同步,所以我们在iPhone上使用系统浏览器时,也可以直接用Passkey登录:

iphone-passkey-signin

使用Passkey登录,就是这么简单!

优点

使用Passkey非常安全,不存在破解的可能。此外,本地存储Passkey时,还会同时关联网站域名,可以从根本上防止钓鱼攻击,因为一个Passkey对应一个网站,无法跨多个网站使用。

使用限制

Passkey就是用非对称密钥签名登录,那么私钥存储在哪呢?

私钥存储在操作系统内置的密钥管理器中,浏览器通过与操作系统的API交互完成签名,所以,操作系统和浏览器都要支持Passkey才行。Mac的系统浏览器Safari本身是苹果自己开发的,当然能直接集成macOS的Passkey功能。如果换成Chrome浏览器,当前版本还无法直接与macOS的Passkey交互,所以它会弹出一个二维码,可以用iPhone相机扫码登录,属于曲线救国路线,稍微麻烦点。但可以肯定,各浏览器迟早都会打通直接与操作系统的Passkey交互。

如何删除Passkey

可以从服务器上删除Passkey(实际是删除公钥),也可以从本地设备删除Passkey(实际是删除私钥),都可以让该Passkey失效。

从服务器上删除Passkey需要登录网站后,找到相关页面删除。从本地删除Passkey,可以打开Mac的系统设置 - 口令,在列出的网站上点击右键,选择删除。



Comments

Loading comments...