大家好,最近在折腾 TG的通行密钥功能,遇到了一个极其“精神分裂”的 Bug,想问问有没有老哥遇到过同样的情况?
【我的环境】
硬件:正版 YubiKey 5 NFC 5.7.1固件
软件:最新版 TG PC 桌面客户端
【极其割裂的复现步骤】
绑定阶段(成功但“不占坑”):我在已经登录的电报客户端里,成功把 YubiKey 添加为了通行密钥。电报界面提示成功,但是,我用 Yubico Authenticator 软件查看,发现坑位占用依然是 0(这说明电报强制使用的是 Non-Discoverable Credential 非驻留密钥,没把账号存进 U 盾本地)。
登录阶段(强行要“驻留凭证”):我打开一个全新的最新版电报 PC 客户端,在不输入手机号的情况下,直接点击界面的【使用通行密钥登录】。系统正常唤起了验证,要求我输入 PIN 码并触摸 YubiKey。
死锁报错:触摸完毕后,系统直接报错“此安全密钥似乎不正确”(底层的错误大概率是 PASSKEY_CREDENTIAL_NOT_FOUND)。
【我的疑惑】
这不纯纯的逻辑精神分裂吗?!创建凭证的时候,电报的代码让硬件“不要占坑”(不保存本地记录);结果到了登录的时候,又不让先输手机号,直接强行找硬件索要“占坑”的驻留凭证!U 盾肚子里根本没存,当然报不正确啊!
这种最基础的逻辑死循环,电报的开发团队上线前,难道就只测了 Windows Hello/iCloud,连一次正经的物理安全密钥都没测试过吗?不知道大家有没有遇到过这个问题,目前除了当废设还有解吗?
根据询问AI得知 驻留密钥 根本还没有普及虽然这个协议8年前推出的但是几乎所有的厂家都是把它当成高级的2AF来对待只有少部分厂家是真的支持驻留密钥。坑真的坑买它的话你就把它当成一个离线硬件的2AF使用吧,想无账号密码登录可惜的是大部分的厂家都不支持。
当初花这么多钱买 YubiKey 5 NFC,就是冲着 **FIDO2 / Passkey 的驻留密钥(Discoverable Credential / Resident Credential)** 去的。
我的理解很简单:
> 把账号凭证直接存进 YubiKey,
> 登录的时候插上/碰一下,输 PIN、摸一下,甚至连账号都不用输入,YubiKey 自己告诉网站“我是谁”。
结果折腾了一圈才发现,**很多厂商的 Passkey 根本不给你存成驻留凭证。**
Google、Cloudflare,还有不少服务,实际给硬件安全密钥创建的都是 Non-Discoverable Credential。
于是登录流程就变成:
**先输入账号 → 再输入密码/选择账号 → 调出安全密钥 → 输入 YubiKey PIN → 触摸 YubiKey → 完成验证。**
等等……
这跟我以前用 2FA 验证器有什么本质区别?
2FA:
> 输入账号密码 → 打开验证器 → 输入 6 位验证码。
YubiKey:
> 输入账号 → 输入密码 → PIN → 插入/靠近 → 触摸。
甚至某些场景下还比 TOTP 麻烦。
我买 YubiKey 不就是为了**不用记账号、不用输入密码、不用拿手机找验证码**的吗?
结果厂商给我整一个 Non-Discoverable Credential,然后登录的时候还得先告诉服务器“我要登录哪个账号”。
那你这个 Passkey 和传统的第二因素到底有什么区别?
当然,从 WebAuthn 的技术定义来说,**Non-Discoverable Credential 和 TOTP 2FA 还是完全不同的东西**。它依然具有公钥密码学、抗钓鱼等优势,不能简单说成“就是 2FA”。
但问题是:
**我买硬件安全密钥,看中的就是它作为 Passkey 的“无账号上下文登录”和驻留凭证能力。**
如果最后每家厂商都把它当成一个高级版第二因素来用,那我为什么不继续用 2FA?
尤其是 Telegram 这个更离谱。
我在已经登录的 Telegram 里成功把 YubiKey 添加成 Passkey。
结果 Yubico Authenticator 一看:
> **Passkeys:0**
也就是说根本没有给我创建驻留凭证。
然后我打开一个全新的 Telegram PC 客户端,点:
> **使用通行密钥登录**
它又不让我输入手机号,直接让我拿 YubiKey 登录。
YubiKey:
“哥们你倒是先告诉我我要找哪个 credential 啊,我肚子里根本没有驻留凭证。”
然后:
**PIN → 触摸 → “此安全密钥似乎不正确”**
?????
这不是纯纯的逻辑闭环吗?
注册的时候:
> 不给你存驻留凭证。
登录的时候:
> 不告诉我账号,直接让我从安全密钥里找驻留凭证。
最后:
> 此安全密钥似乎不正确。
我:?????
目前我折腾下来,真正让我觉得“这钱没白花”的反而是 **GitHub**。
GitHub 的 Passkey 做得比较符合我当初对这玩意的期待:凭证存进 YubiKey,登录时可以直接让安全密钥参与发现和认证,不需要每次先把账号信息喂给网站。
所以现在最大的感受就是:
**不是 YubiKey 本身不行,而是很多网站根本没有把它当“真正的 Passkey”来用。**
花几百块买了个硬件,结果不同网站给你实现成:
> “高级一点的 2FA”
真的有一种花钱买了性能,然后发现游戏锁了 30 FPS 的感觉。
所以准备买 YubiKey 的兄弟们,**千万别只看“支持 Passkey / FIDO2”这几个字。**
一定要先确认你实际使用的网站到底支持:
**Discoverable / Resident Credential**
还是只是:
**Non-Discoverable Credential**
这俩对用户体验的区别真的巨大。
不然最后很可能就是:
**“我花钱买了 YubiKey,是为了无密码、无账号、插上就登录。”**
实际得到:
**“请输入账号 → 输入密码 → 输入 YubiKey PIN → 触摸 YubiKey。”**
我真的绷不住了。