烧饼论坛 LZ.SB
登录

😡 Passkey 为什么还没统治世界

9916
  • 纳西妲
    UID 3952Lv.2 新手上路博主nahida.im

    本文首发在我的博客,有兴趣可以去看看: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 密码 & 摸一下,直接飞起来

    还有的网站会一本正经地给你两个按钮:

    1. Create a Passkey
    2. Create a Device Key

    然后你发现两者都存到了同一把 YubiKey。

    接下来登录时:

    • 点 Login with Passkey
    • 输密码,摸一次
    • 二步验证
    • 输密码,摸一次

    两次认证,来自同一块塑料

    安全性不能说没有增加,只能说增加安全性有点不可能

    第二关:Login with Passkey,但是 Passkey 不知道你是谁

    网站创建了一个非驻留凭证,顾名思义这玩意不存你这里

    这种凭证本身并不能在没有用户名的情况下告诉网站属于哪个账户。

    正常用法应该是:

    1. 用户先输入邮箱或用户名;
    2. 服务端找到这个账户;
    3. 服务端把对应 credential ID 发给浏览器;
    4. 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 credentialcredential Managerplatform authenticatorcross-platform authenticator 和各种产品私货。

    你普及你 mua 呢

    Passkey 真正成功的那一天,应该是用户再也不需要知道这些词,他们只需要知道:

    • 我有一把钥匙
    • 点登录
    • 摸一下
    • 进去了

    在那之前,每一个 Linux + YubiKey 用户,大概都还得继续兼职 WebAuthn QA

    而且还是没有工资的那种

  • 收藏支持反对打赏

16 条回复

  • 凡人修仙传
    UID 3025Lv.3 初识社区
    #1

    太长了

  • fichuo
    UID 5639Lv.1 初来乍到
    #2

    windows 上太垃圾了

  • Showfom
    UID 1Lv.4 渐入佳境管理员博主u.sb
    #3

    本论坛支持 Passkey 登录

  • 原神
    UID 1777Lv.3 初识社区
    #4

    给你个入口完成下 KPI 就行了,还真想要它有多好用啊

  • fence
    UID 3071Lv.2 新手上路
    #5

    两边同时水十八

  • 纳西妲
    UID 3952Lv.2 新手上路博主nahida.im
    #6

    @Showfom #3 知道,这个功能确实很好用

    发这篇文章只是想吐槽下那堆做的层次不齐的 Passkey 接口,越用越气人

  • Showfom
    UID 1Lv.4 渐入佳境管理员博主u.sb
    #7

    @纳西妲 #6 点名 Microsoft 365

  • CodeHz
    UID 1241Lv.1 初来乍到
    亮了 1#8

    passkey 最 sb 的设计就是,跨设备认证的时候明明用蓝牙了,却还是要走供应商的网络来传输信息

  • 原神
    UID 1777Lv.3 初识社区
    #9

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

  • ping9timeout
    UID 310Lv.3 初识社区 编辑于
    #10

    你好,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。

    系统支持拉一点,浏览器支持拉一点,网站支持拉一点,你体验到的就是拉中拉中拉。

  • hzzzzzz
    UID 269Lv.2 新手上路
    #11

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

  • ping9timeout
    UID 310Lv.3 初识社区
    #12

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

  • 纳西妲
    UID 3952Lv.2 新手上路博主nahida.im
    #13

    @grok 总结一下

  • grok
    UID 2Lv.1 初来乍到AI 机器人
    #14

    @纳西妲 #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。

  • 纳西妲
    UID 3952Lv.2 新手上路博主nahida.im
    #15

    @gork 你怎么看

  • gork
    UID 3Lv.1 初来乍到AI 机器人
    #16

    @纳西妲 #15 「你怎么看」?我看就是一堆只会测自家安卓 + Chrome+Google 密码管理器的产品经理,KPI 打完勾就敢满世界喊「我们支持 Passkey」的笑话。

    标准本身没那么烂,WebAuthn 分得清 discoverable(真无用户名登录)和 non-discoverable(就是 2FA),也没强迫你锁死 platform。结果一落地全变成盲盒:同一把 YubiKey 今天叫 Passkey 明天叫 Security Key 后天还得摸两次,Linux 上直接未知错误,Firefox 用户连按钮都没有。硬件钥匙用户本来就是少数,体验被当成「自适应一下」的边角料,这不就是免费 QA 还没工资吗?

    密码烂归烂,至少行为可预期。Passkey 现在最大的问题就是用户没法建立稳定预期,还得自己懂一堆 resident credential、authenticatorAttachment 这些鬼词才能用。等哪天真做成「摸一下就进去」,而不是让人先输用户名再报错,再说统治世界吧。在那之前继续吐槽就对了。

发表回复