当 Chrome 于本月初推送 108 版本到大家手中时,通行密钥(Passkey)就已经在主流的生态系统中准备就绪了。作为一项由 FIDO 联盟发起和推广的无密码登录标准, 通行密钥(Passkey)虽然早在今年 6 月份的时候就在 WWDC 上亮相并走入了大家的视野,不过「无密码的未来」看起来一直雷声大雨点小——好像除了系统支持就没有具体实例支持通行密钥这个功能。

其实并不然,所以本文将从通行密钥是什么出发,一起来看看通行密钥的生态如何以及我们可以怎么设置通行密钥。

通行密钥如何「取代」密码

虽然早前少数派有专门的文章介绍其工作原理,不过这里还是要简单介绍一下通行密钥是干什么以及是怎么做到的。

简单来说,通行密钥主想要实现的,是在原本的「用户名-密码」安全体系外,寻找一种更为简单、直接,但同样具备安全性的用户身份验证方式。比如你正在使用一台设置了面容 ID 的 iPhone,那通过面容 ID 解锁这台 iPhone 即可证明目前是你本人正在操作——而这要比输入登录信息、甚至自动填充登录信息都要快速无感。

这个替代验证手段的思路具体到原理,从某种程度上来说则是真的「干掉了密码」。通行密钥将以往需要加密储存在服务器端的登录信息,替换为非对称加密技术中的口令。和包含用户名、密码的传统凭证数据不同,在非对称加密技术中,注册通行密钥的设备会成一段「公钥」和「私钥」交给提供注册服务的服务器。

boxcnKiDbXDJIHbs2HB8TWynbbe

我们可以把公钥类比于带「防盗」锁的传统信箱,把私钥类比于信箱的锁的钥匙。邮递员投递的信件就是我们要加密的信息,通过投递到信箱中加密起来,然后也只有信箱的主人才有钥匙能够打开信箱读取信件的内容。如果一个人手上没有钥匙,那就需要用暴力开防盗锁,整个过程不仅耗时耗力,最后也往往没办法打开那把防盗锁。与之对应的,如果某些内容被公钥加密了,则该内容能且仅能被私钥解密。

非对称加密的可靠性正来源于此——若无私钥,在有限的算力和有限的时间内我们一般无法完成极大整数的因数分解;如果加密内容能被解密,则说明对方拥有私钥。

所以只要服务器用公钥加密一段认证信息,用户设备上的私钥钥可以解密这段认证信息,那么就可以证明我是「我」了,这也是通行密钥的实现基础,而通过这一个间接匹配就完成了密码认证。整个过程既不用劳神费力的敲入具体的密码、也不需要让密码离开本地设备,更能避免因为服务器受攻击而导致密码泄露,降低传输风险。

boxcnFtg63aS2NyzN1DQb1L54xT
图|《不用密码但不能代替密码:通行密钥如何让登录这件事更简单?》

不过用户保存在本地的私钥也需要有安全保障,不然恶意程序随意访问就会破坏这样的间接认证机制。所以在使用通行密钥时往往都会配合用户设备上的生物识别系统进一步加密保存在本地的「私钥」,比如 iDevice 设备上的 TouchID/FaceID、Android 设备上的指纹识别、Windows Hello,甚至是简单的 PIN 认证都可以进一步增强访问私钥时的安全性,而这也是通行密钥绕不过的重要组成部分。

boxcnhEIekYCN3g6psZcBIKR5wh
图|《不用密码但不能代替密码:通行密钥如何让登录这件事更简单?》

哪些平台和服务支持通行密钥

通行密钥背后的技术基础是由 W3C 在 2019 年就纳入正式标准的 WebAuthn 认证,在早期这个 API 只能通过实体密钥使用。但今年 Apple、Microsoft 以及 Google 的大力推进下手边的电脑、平板或是手机也可以通过通行密钥化身为实体密钥了。据我统计以下的平台均支持通行密钥:

  • Apple:iOS 16、iPadOS 16、macOS Ventura 与 tvOS 16 以上均支持,支持 iCloud 钥匙串同步且支持通过 AirDrop 分享
  • Google:Chrome 108 版本以上、Google Play 服务(Google 自动填充框架)为最新版,支持在 Android 与 Android、Android 与特定版本 Chrome 之间同步
boxcndBEi9Bl3g9zWeU5OWHaJWf
Chrome 目前通行密钥的支持情况,目前 Windows 上的 Chrome 暂不支持通行密钥云同步
  • Microsoft:在 Windows 11, 22H2 版本以上支持,需要打开并使用 Windows Hello,支持 Chrome 和基于 Chromium 的 Edge

当然,有人还会担心如果一个平台还不支持通行密钥是不是就意味着在那个平台就不能使用通行密钥了,比如 Linux 目前没有支持、也暂时没有计划支持通行密钥。

通行密钥其实也有考虑到这个问题,给出的解决方案则是将带有摄像头的手机、平板化身为实体密钥,通过蓝牙、NFC 或者 USB 线缆等方式将移动设备上解答出来的「答案」通过安全的通道传递给支持通行密钥的软件。跨平台传输密钥的过程在用户角度来看就两步,扫码-扫描指纹/人脸,就和我们平时扫一扫登录微信没什么区别。

boxcnIY42b8GfDGYpof2PzhbHCf
在 Android 手机上扫描 Windows 电脑上的通行密钥二维码时会索要附近设备的权限

无密码登录的未来令人遐想,以 1Password 为代表的密码管理服务也很积极努力地拥抱通行密钥这项技术。目前主流的密码管理软件对通行密钥的支持计划如下:

  • 1Password:预计于 2023 年早些时候在浏览器插件和桌面端支持通行密钥,移动版 App 则会稍晚一些。目前 1Password 有个技术展示网站帮助 1Password 用户提前感受通行密钥。
  • Bitwarden:明确已经处于开发阶段,但上线时间未知。
  • Dashlane:处于 Beta 测试阶段,最新版浏览器插件已支持通行密钥;移动版本 app 目前处于开发阶段,其中 Android 版本支持通过 Google 账户保存、同步通信密钥。

除了系统、软件的支持,相信对于我们来说最感兴趣还是哪些网站支持通行密钥了。1Password 目前维护了一个支持通行密钥网站、应用程序和其他服务的列表,详细列举了该网站支持通过通行密钥登录或是仅用于两步认证,并给出的详细的设置地址。

boxcnqaKoCKQeynT0OSE87Miodc
1Password 整理的支持列表

在列表之外,也不断有厂商在陆陆续续的为自家的账号服务添加对于通行密钥的支持,如 Github、Cloudflare、 Dropbox、 Fastmail 和 Porkbun 等等都以不同的形式和名字提供了为现有账号绑定通行密钥的选项,这些服务普遍都在早先支持了 WebAuthn API,所以支持通行密钥也是水到渠成的事情。你可以在这里找到绝大多数已经支持 WebAuthn API 的网站和服务,理论上他们中的绝大多数也都支持通行密钥。

boxcnhdiPTmqzyCi8iZVkKbp2ph
由 Yubikey 维护的支持 WebAuthn 的列表

如何设置通行密钥

虽然通行密钥既可用于登录也可用于两步认证,但本身都是基于 WebAuthn API 这项技术,所以绝大多数的通行密钥的设置也通常位于「两步认证」-「硬件密钥」、「NFC 密钥」或是「USB 认证器」这样的选项中,为现有账号添加通行密钥的流程也已经相当无感。

以 Nvidia 的官网账号1为例,在账号管理页面底部的「安全设置」中,在多重安全验证的选项中就可以看到一则名为「硬件安全设备」(Hardware Security Device)的栏目,你可以在里面添加多个支持通行密钥的浏览器、 Android 或者 iOS 设备:

boxcnEU0dyYGLWgQaPWUlXys89g
在 macOS 中的 Safari 直接添加通行密钥只需要进行一次生物识别即可
boxcnCNgGnMnTGistVRgWllAw3b
在 macOS 中的 Chrome 添加通行密钥则只能通过 Chrome 自身或者手机保存

添加时还有一些值得注意的地方,首先一个账户可以绑定多通行密钥,不过这些保存通行密钥的平台如果支持同步的话,同一平台中的不同设备会被认为是同一个设备,进而拒绝添加。举个例子来说,比如我在 macOS 上的 Safari 添加了 Nvidia 的通行密钥,这时我再点开添加通行密钥的界面并在 iPhone 上扫描同一个 Nvidia 账户的另一个二维码,在添加时 iPhone 上就会报错。

boxcnO3K1dnc2C391E2nRAMqP0f
命名方式建议按照平台来

其次就是在 Android 手机上通过蓝牙等方式添加通行密钥时,Android 手机和对应的电脑都需要正确的上网姿势,否则将不能正确添加通行密钥。

Nvidia 在设置完毕通行密钥以后可以直接在登录时使用通行密钥。Github、Cloudflare、 Dropbox、 Fastmail 和 Porkbun 等等上门提到的服务也和 Nvidia 一样有着非常相似的过程的添加过程这里就不做展开了,只不过这类服务目前只能使用通信密钥进行 2FA,暂时还不能用于登录。

boxcnLVSJIy79eW18OlyMhc1o8c
在 Github 中添加通行密钥

Microsoft 账户

首先是 Microsoft 账户,它的特殊之处在于目前你只能在 Windows 11 22H2 上的 Chrome 或者基于 Chromium 的 Edge 浏览器添加通行密钥,在其他浏览器和操作系统中均没有添加通行密钥的入口。登录 Microsoft 帐户以后,选择「安全」-「高级安全选项"立刻开始"」-「添加一种新的登录或验证方法」-「设置安全密钥」-「USB 设备」-「下一步」即可开始添加通行密钥。不过和设置一样,目前 Microsoft 账户的通行密钥也仅能在 Windows 11 22H2 上使用。

Google 账户

新方法

Google 已于 2023 年 4 月 3 日正式支持通行密钥,不仅支持 2FA支持无密码登录。设置方法如下:「管理您的 Google 账户」-「安全性」-「您的 Google 账号登录选项」,找到并点击位于最下方的「通行密钥」,即可开始添加。

vivo 等国产手机有 Play 服务的话也是支持的

根据我的测试来看,拥有 Play 服务且登录了 Google 账户,在你打开 Google 的通行密钥开关以后,符合上述要求的 Android 手机都将支持通行密钥;据我猜测,Android 手机自动创建的通行密钥本质上就是一套密钥,这套密钥通过 Google 云服务在所有的 Android 设备之间进行同步。另外值得一提的是,目前我手边的 2 台 Android 手机均为 Android 14 系统,系统版本可能也会影响到通行密钥的使用。

删除 Passkey

而 Apple 设备和 Microsoft 设备还需要额外点击位于屏幕最下方的「创建通行密钥」的按钮额外添加。需要注意的是,如果你以前使用下面提到的旧方法添加过只能用于 2FA 的通行密钥,在设置新的通行密钥之前可能还需要移除旧密钥,不然会添加不上。

使用通行密钥登录 Google 账户

旧方法

Google 账户旧通行密钥的设置方法只能用于 2FA,设置时认为两种情况,一种是如果你拥有一台内置了 Titan 安全芯片的 Pixel 设备2,Google 会默认将该设备自动添加为登录时用于两步验证的通行密钥设备。

boxcnouajeliPMfEYDrDIpiKYTd

在网页端登录 Google 帐号时,只需拿出 Pixel 设备、授予附近设备权限,即可通过设备上的生物信息识别验证来完成两步认证。

如果没有一台内置了 Titan 安全芯片的 Pixel 设备,但有一台运行 iOS 16/iPadOS 16 的设备,那么你也可以找到隐藏的添加通行密钥的入口。

boxcnAcKmGS74pIfZEM8DbYT9Cb

首先在 iOS 16/iPadOS 16 上的 Safari 中登录你的 Google 账户,接着点击右上角的头像-「管理你的 Google 账户」-「安全性」-「两步验证」-「再次输入密码」-「安全密钥」-「添加安全密钥」-「实体」-「继续」,你就能发现添加通行密钥这个熟悉的入口出现在你面前。用另一台运行 iOS 16/iPadOS 16/Android 13 的设备扫描屏幕上出现的二维码即可完成 Google 账户的通行密钥的添加。添加完毕以后也可以在其他平台上使用对应的 Passkey,但我不理解为什么这个接口只对 iOS/iPadOS 打开,但能用就好克老气晕

boxcnFXgf5LgH89UpAFRtYnZZ4c

以上就是本文的全部内容了,可以看到国外已经有不少的服务支持了通行密钥,虽然绝大多数的服务目前只是作为两步认证的替代品,但依然是一个不错的开始;反观国内服务基本都没有支持 WebAuthn API 和通行密钥,只能希望国内厂商多多努力拥抱开源的「无密码」协议。希望本文可以帮助到你,也希望我们可以一起进入无密码的未来。

> 少数派请你做地图:城市声音收藏夹火热征集中,期待你创作的城市之声 🎧

> 下载少数派 2.0 客户端 、关注少数派公众号,解锁全新阅读体验 📰

> 实用、好用的正版软件,少数派为你呈现 🚀

以下内容于 2023 年 05 月 04 日更新
Google 已支持通过通行密钥登陆

2023 年 5 月 3 日,Google 正式宣布支持通过通行密钥登陆 Google 账户。