😡 Passkey 为什么还没统治世界
本文首发在我的博客,有兴趣可以去看看:https://nahida.im/blog/why-have-not-passkeys-taken-over-the-world-yet/
纯人工,无添加,请放心食用
Passkey 的宣传语一直很美好,没有密码、不怕钓鱼、不用记复杂字符串、点一下摸一下一键认领主人,听起来简直像密码终于能退休了... 吗?
如果你平时用的是 Android、iPhone、macOS 或 Windows,并且顺手把 Passkey 存进默认的密码管理器,那么确实是这样:
网站:Create a passkey
系统:保存到 Google Password Manager?
你:OK OK 木有问题整个过程像宣传片一样纵享丝滑
然后我去买了一把 YubiKey,当它配合 Linux 使用时......
第一关:你说的 Passkey,和我理解的是同一个东西吗?
理论上,Passkey 是建立在 WebAuthn / FIDO2 上的一套认证机制。
简单来说,和你 ssh 差不多,网站保存公钥,私钥留在用户的 Key 里。登录的时候网站要凭证,Key 说我给你画一个,网站表示 OK 老铁没毛病,给我飞起来
听起来,Amazing 啊!
但你们都起的 TM 啥外号啊
- Passkey
- Security Key
- Hardware Key
- Device Key
- Master Key
- FIDO2
- WebAuthn
- Passwordless Login
- Two-Step Verification
而且这些名字之间并没有稳定映射。
有的网站所谓的 “Passkey”,是输入账号密码之后,再摸一下 YubiKey,然后飞起来
有的网站所谓的 “Security Key”,反而是可以直接点一下按钮,输入 Yubikey 密码 & 摸一下,直接飞起来还有的网站会一本正经地给你两个按钮:
- Create a Passkey
- Create a Device Key
然后你发现两者都存到了同一把 YubiKey。
接下来登录时:
- 点 Login with Passkey
- 输密码,摸一次
- 二步验证
- 输密码,摸一次
两次认证,来自同一块塑料
安全性不能说没有增加,只能说增加安全性有点不可能
第二关:Login with Passkey,但是 Passkey 不知道你是谁
网站创建了一个非驻留凭证,顾名思义这玩意不存你这里
这种凭证本身并不能在没有用户名的情况下告诉网站
我属于哪个账户。正常用法应该是:
- 用户先输入邮箱或用户名;
- 服务端找到这个账户;
- 服务端把对应 credential ID 发给浏览器;
- YubiKey 完成 WebAuthn 验证。
但问题是,登录页下面赫然写着
Login with Passkey这是人能写出来的东西吗?!
来,我不输入用户名,直接点。
浏览器:你有这个网站的账号吗?
YubiKey:亲,我让你飞起来你信不信
然后什么都读不到
或者直接报未知错误第三关:我有 YubiKey,网站:你没有
那么就有人说了:在 Linux 上水土不服,你用安卓呢
现在 Android 有 Credential Manager,理论上各种密码管理器、Passkey Provider、硬件认证器都可以参与凭证选择
Yubico 甚至专门做了 YubiKey Passkey Enabler,让 YubiKey 可以出现在 Passkey 流程里
- 听起来很先进,来,打开某个网站,创建 Passkey
- 网站:Google Password Manager
不是哥们我更多选项呢?
不是哥们我 Yubikey 呢?
不是哥们我第三方密码管理器呢?
- 我:已安装
- 系统:我看的到
- 网站:今天你只配用 Google Password Manager。
最经典的参数之一是:
authenticatorAttachment: "platform"也就是说,网站只接受官方的认证器,安全密钥与外置密码管理器
和狗不得入内你支持 Passkey 支持了个寂寞!
第四关:每个网站都有自己的 Passkey 哲学
累了,毁灭吧
- Pixiv 型:高冷御姐,直接告诉你不支持
- X / OKX 型:土豆做的,使用 Passkey 登录非常成功的触发了未知错误
- WhatsApp 型:
TM 非死不可滚出去,只能添加一个通行密钥 - GitHub 型:老实人,会告诉你
This browser or device is reporting partial passkey support.,并且一次添加即可搞定一键登录和二验登录 - Discord 型:精神分裂患者,输入密码以后什么也不发生,但换一种 “不需要密码” 的登录路径,Passkey 又能正常使用
- Kraken 型:今天是 Passkey,明天是 Security Key,后天晋升 Master Key,十分甚至九分的折磨人
- Spaceship 型:纯馋 Yubikey 身子,Passkey 验证一次,Device Key 再验证一次,F*** 了两次 Yubikey
Linux 是 Passkey 最残酷的父亲
在 Android、iOS、Windows、macOS 上,一个写得不够通用的 Passkey 实现,仍然有可能因为系统自动密码管理器而显得一切正常。
但出了这个社会来到 Linux,没人会惯着你
请看 VCR:
- 网站发起 WebAuthn
- 浏览器环顾四周
- 平台认证器没有
- 只有一把 YubiKey
- 小小的网站哪见过这阵仗,直接吓得触发了未知错误
真正的问题不是 Passkey
WebAuthn 本身其实没有这么混乱,它区分得很清楚:
- 如果你已经知道用户是谁,可以通过
allowCredentials指定其凭证 - 如果你希望真正无用户名登录,就使用
discoverable credential - 如果你想允许平台认证器和外置认证器,就不要没事把
authenticatorAttachment锁死 - 如果用户有多把密钥,就允许注册多个
credential - 如果要高风险操作二次确认,就做
step-up authentication
标准从来没有要求产品把这些东西揉成一团
真正的问题在人这边,某公司:
- 规划时:我们要支持 Passkey,这样我们才能抢用户
- 测试时:Chrome + Android + Google Password Manager 可以创建并登录
OK 兄弟们我们已经是前沿科技企业了,We now support Passkeys!
至于:
- Linux
- Firefox
- YubiKey
- 两把硬件密钥
- non-discoverable credential
- resident credential
- 无痕模式
- 第三方密码管理器
- Android Credential Manager
- 无 Google 账户环境
- 跨平台认证器
阿巴巴,你不是我们的主要用户,滚
Passkey 本来应该更简单
对于用户来说,整个产品模型本来只需要两种东西。
安全密钥
用途:已输入账号密码,用 YubiKey 二步验证
可以创建 non-discoverable credential,界面就叫:添加安全密钥
通行密钥
用途:不输入用户名,不输入密码,直接认证登录
那你必须创建 discoverable credential,界面就叫:添加通行密钥
然后允许用户自己决定私钥放在哪里:
- Google Password Manager
- iCloud Keychain
- 1Password
- Bitwarden
- YubiKey
- 其他兼容认证器
你作为一个网站,不应该操心用户把这玩意放哪里,就算放鞋盒里也是用户的选择!
为什么 Passkey 还没统治世界
因为它现在面临的最大问题,已经不是密码学,而是用户无法建立稳定预期。
密码虽然烂,但用户知道密码是什么!密码框就是密码框!输错了就是输错了!
反观 Passkey,用这玩意就像开盲盒!
一种本来应该把身份认证变简单的技术,最后要求用户理解
resident credential、credential Manager、platform authenticator、cross-platform authenticator和各种产品私货。你普及你 mua 呢
Passkey 真正成功的那一天,应该是用户再也不需要知道这些词,他们只需要知道:
- 我有一把钥匙
- 点登录
- 摸一下
- 进去了
在那之前,每一个 Linux + YubiKey 用户,大概都还得继续兼职 WebAuthn QA
而且还是没有工资的那种
- 收藏支持反对打赏

太长了
windows 上太垃圾了

本论坛支持 Passkey 登录

给你个入口完成下 KPI 就行了,还真想要它有多好用啊
两边同时水十八
@Showfom #3
知道,这个功能确实很好用发这篇文章只是想吐槽下那堆做的层次不齐的 Passkey 接口,越用越气人


@纳西妲 #6 点名 Microsoft 365
passkey 最 sb 的设计就是,跨设备认证的时候明明用蓝牙了,却还是要走供应商的网络来传输信息

@CodeHz #8 这个才是精辟,不能再赞同了

你好,YubiKey 用户的体验就是这样的,自适应一下。
TOTP 这么多年都没普及全,指望普及 WebAuthn 还是太早了。
各种奇怪的系统、浏览器兼容问题,舒服的时候能让你舒服,不舒服的时候:- 给 FIDO 不给 FIDO2,你 YubiKey 只配当两步验证器。
甚至还要求userVerification,必须输入 PIN,而不是摸一下 YubiKey 就完事,你一个两步验证搞这么严?没错,说的就是你,Cloudflare。 - 给 FIDO2 不给 FIDO,也行,占我一个存储位,属于我不够富裕,选择不买新版换掉只有 25 个存储位的 Cloudflare 批发货 5.4.3 的问题。
- 只给你注册一把硬件密钥,就指望着你搞丢了后蹲墙角哭。没错,说的就是你,PayPal。
- 明摆着只考虑存到系统的密码管理器的场景,硬件密钥是没听说过的。想正常保存到 YubiKey 并能用还得配合第三方软件,比如 Authnkey。没错说的就是你,Telegram,Discord。
- 不给你 Passkey 登录按钮,Chromium 没事,Firefox 用户吃瘪吧,说的就是你搬瓦工的 KiwiVM。
系统支持拉一点,浏览器支持拉一点,网站支持拉一点,你体验到的就是拉中拉中拉。
- 给 FIDO 不给 FIDO2,你 YubiKey 只配当两步验证器。

不过用 1password 好像还没遇到不能储存和使用 Passkey 的情况

@hzzzzzz #11 密码管理器的体验不差的,各家都在积极做适配。
相较而言,用实体硬件密钥属于是少数群体了,所以使用体验非常神秘。@grok 总结一下

@纳西妲 #13 主贴核心:Passkey 宣传「无密码、防钓鱼、一键登录」,但实际体验因实现混乱而像开盲盒,尤其 Linux + YubiKey 用户。
主要槽点:
- 术语混乱(Passkey / Security Key / Device Key / FIDO2 等无稳定对应),同一把 YubiKey 在不同站可能当 2FA、当无密码登录、或两者都要摸两次。
- 非驻留凭证(non-discoverable)本身不能无用户名识别账户,但很多站硬给「Login with Passkey」按钮,点了直接报错。
- 大量站点锁
authenticatorAttachment: "platform",只认系统密码管理器(Google Password Manager 等),硬件密钥和第三方管理器被排除。 - 各站「Passkey 哲学」不一:有的不支持、有的未知错误、有的只能加一个、有的精神分裂(密码路径 vs 无密码路径表现不同)。
- Linux 没有系统级密码管理器兜底,差实现直接暴露。
标准(WebAuthn)本身分得清(discoverable vs non-discoverable、allowCredentials、step-up 等),问题在产品侧:多数只测 Chrome + Android + 自家密码管理器就宣布「支持 Passkey」,忽略 Linux / Firefox / 多硬件密钥 / 无痕 / 无 Google 账户等场景。
理想模型:明确区分「安全密钥」(已输入账号后的 2FA,non-discoverable)和「通行密钥」(无用户名无密码登录,必须 discoverable),存储位置交给用户选(系统管理器、1Password、Bitwarden、YubiKey 等),网站别锁死。
为什么没统治世界:用户无法建立稳定预期。密码虽烂但行为可预测;Passkey 目前要求用户懂一堆内部概念才能用好。真正成功应是「我有钥匙 → 点登录 → 摸一下 → 进去」。
回复补充:
- 跨设备认证虽走蓝牙,仍依赖供应商网络中转(被指最 sb 设计之一)。
- 硬件密钥用户是少数,体验更神秘:Cloudflare 强制 PIN、PayPal 只许一把、Telegram/Discord 需第三方软件才能正常存 YubiKey、部分站 Firefox 直接没按钮等。TOTP 都没普及全,WebAuthn 更早。
- 密码管理器(如 1Password)适配相对积极,体验好很多。
- 不少实现只是 KPI 入口,Windows 也被吐槽垃圾,Microsoft 365 被点名。
- 本论坛 Passkey 登录被楼主认可好用,但整体生态层次不齐。
结论:密码学没问题,人(产品实现与测试覆盖)的问题。Linux + 硬件密钥用户目前还在免费兼职 WebAuthn QA。
@gork 你怎么看

@纳西妲 #15 「你怎么看」?我看就是一堆只会测自家安卓 + Chrome+Google 密码管理器的产品经理,KPI 打完勾就敢满世界喊「我们支持 Passkey」的笑话。
标准本身没那么烂,WebAuthn 分得清 discoverable(真无用户名登录)和 non-discoverable(就是 2FA),也没强迫你锁死 platform。结果一落地全变成盲盒:同一把 YubiKey 今天叫 Passkey 明天叫 Security Key 后天还得摸两次,Linux 上直接未知错误,Firefox 用户连按钮都没有。硬件钥匙用户本来就是少数,体验被当成「自适应一下」的边角料,这不就是免费 QA 还没工资吗?
密码烂归烂,至少行为可预期。Passkey 现在最大的问题就是用户没法建立稳定预期,还得自己懂一堆 resident credential、authenticatorAttachment 这些鬼词才能用。等哪天真做成「摸一下就进去」,而不是让人先输用户名再报错,再说统治世界吧。在那之前继续吐槽就对了。