硬件 Passkey:用来证明『我是我』
买硬件Passkey(正确的名字应该是硬件安全密钥)这件事并非空穴来风。之前笔者就询问过有关如何证明『我是我』的问题,在下面的回复中,硬件密钥是很多人的推荐方式。再加上最近的一些事情,于是终于下定决心,在对比过几个方案之后,下单了RP2350,自己打两把硬件Key。
便宜,真的便宜1. 前言
Passkey(通行密钥),各路介绍文章已经有不少,其简单来说就是基于非对称密钥体系来实现方便快捷的身份证明操作,因而被称为『密码终结者』。虽然短期之内这个理想恐怕并不会这么快实现,但并不妨碍我们尝尝鲜。
拥有硬件Key之前,笔者曾经体验过软件Key,但更多的还是作为2FA/MFA(多因素验证)去使用,比如人见人爱的Cloudflare,Pixiv,都支持使用通行密钥来作为2FA:
Bitwarden内置的Passkey当然,用过软件之后,对于更加便携,且在物理意义上独立于其他设备的硬件Key,就更加觉得有趣了。这里特地强调『独立于其他设备』并不是说笔者对安全性有非常苛刻的需求,只是基于一个很显然的问题:互为冗余。比如我手机和硬件Key都设置为验证器,那么出门在外,不论是丢了手机还是丢了Key,都不至于完全失去验证能力。至于小小的一个U盘大小的Key到底是更好保存还是更容易丢,各方都有自己的看法,这里就不深入了。
继续聊下去之前,需要先注解一点:本文所说的硬件Key,特指支持Fido2且用作通行密钥的设备。因为从字面意义上来说,硬件Key的范围是很广泛的,从以前网购要用的U盾,打游戏用的网易将军令,激活软件的加密狗,到现在各种公司所使用的实体CA(俗称投标Key),都可以认为是硬件密钥。比如到今天都能看到,干业务比较多的公司,会买一个专用的USB服务器,把各种Key可控地暴露给内网不同设备使用,于是就能看到服务器上面一插就是两排Key,很壮观的:
图源互联网话题回来。硬件Key当中最为有名的,莫过于Yubikey,其安全性是没得说的(当然据说并非如此,前段时间也爆出来固件有漏洞且无法更新就是了),但其售价却让人觉得不太值,对一般用户而言,有种用六位数密码保护两位数存款的感觉——这还没算上,为防止Key丢失(物理意义上的丢失)而需要购买不止一个Key的问题。好在,有大神开发了替代方案,基于RP2350的PicoKey,这才有底气一次买两个(互作冗余)回来,享受享受。
当然,这次下决心买Key还有个比较那啥的原因:人见人爱的纸飞机,最近支持了使用Passkey来作为辅助验证手段,方便了收不到或难以发送短信地区的人们使用(比如+7,+86,后者最近要求开会员,因为短信接口成本太高了)。不过毕竟这玩意比较新,会有些问题:桌面版本会拉起Windows安全,但Windows还会要求你插入硬件安全密钥;安卓版本虽然可以方便按指纹,但也会被Google截胡,帮你备份一份什么的。
Windows 10 22H2虽然,新版本的操作系统提供了新的API,可以原生地让第三方密码管理器来作为软Passkey使用,但问题是,这么做至少得要求系统是Windows 11,或者说Android 14+。笔者手头的设备,一个是Windows 10,一个是Android 13,于是两头堵了。目前来看,这个问题只能通过硬件Key来解决,毕竟买俩硬件Key,可比买新手机或者给电脑升级新系统,要方便多了。
2. 一些已知的缺点
如果你看了上面的内容,觉得很心动,那么笔者必须提醒你几件事,看完之后再决定要不要继续下去,也不迟:
2.1 消失的 Pico Commissioner
最糟糕的事情还是发生了,作者已经明确表态删除Pico Commissioner(且作者已经发DMCA给各大存档站,截止到更新时间,Wayback Machine和Archive.is均已下架),被PicoKey App取代,这是一个付费应用,且授权似乎针对单个硬件,一个授权就要30欧元。
2026年2月19日 10:54 EDIT:发现有大神复刻了前端版Pico Commissioner,可以到这个地方,或者说这个地方使用。观察发现这个纯前端页面较为简单,因此也许可以通过保存js文件的方式自行部署。但仍需注意:不排除作者后期放弃对此类老工具支持的可能性,因此请务必小心。
虽然目前有人备份了另一个工具pypicokey,但很难保证不被作者下架(所以建议尽快保存到本地),以及后期更新固件后失效的可能性。如果有需求,除了上面那个链接外,还可以到ipfs://QmPpHbAfP9deJ8n58KQ7TLWbDyYhjnzDYePje2kSKqxu8b或ipfs://bafybeiav6ai4yy7kevg6n4ucpo6mtjd2ukfupmbel6ycrx3pnheirj6oua获取
这个东西的使用方法是:
- 下载仓库,解压,进入解压后的文件夹,打开终端
- 插上PicoKey
终端内依次执行:
python ./setup.py install pip install pypicokey python ./configure.py --apply- 就可以在CLI界面上配置PicoKey了,具体配置项请看下面 3.2 小节,应该是相通的,笔者有友人在Python 3.10上跑通了,能被Yubikey管理器识别
如果这件事没有任何改善(比如未出现第三方管理器等),那么笔者的看法是,PicoKey的优势可以说是不复存在了。
目前(2025年12月30日)购买硬件以及后续使用,问题不大,但想在这个时候配置你的硬件Key,不太容易。原因在于,不知道什么原因,至少在Issue 216里,作者说他在重构项目,但反正就在这两周时间,也就是v7.0固件正式发布之后的两周时间,官方移除了官网上的Pico Commissioner。
不过好在从安全角度看,这个东西必然是要做成纯前端的,因此可以通过网页时光机存档来继续使用此页面。与此同时,出现了一个未在官网列出的文档页面及其对应的GitHub仓库,里面提及了一个同样是未在官网出现(仅在7.0版本固件release note中提及)的PicoKeys APP。按照作者设想,以后可以通过这个APP来对硬件Key进行管理,可能不再需要依赖Yubikey的管理器。
目前可以认为,PicoKeys项目处于过渡期,未来发展如何暂未确定。删除在线配置器这个行为,只能善意地猜测为是后续的固件与这个配置器不兼容,所以先下线了,不过毕竟官方只是简单粗暴地删除页面了事,所以很难说具体原因,如果你对于安全性有很高的需求,建议先谨慎观望,或者购买其他类型的,久经考验的硬件Key。 (删除原因,见上文更新)
2.2 拉不起来的纸飞机
上面提到的tg,在Desktop端添加硬件Key似乎还有些问题,表现为按流程操作完之后,页面未提示有新增的Key。安卓端,依然是被Google密码管理器给截胡了,根本不会碰到硬件Key。笔者并不确定问题究竟出在哪,但既然事实证明存在发生这种事情的可能性。如果你对此比较难接受,同样是建议先谨慎观望。
当然了,这个问题的影响范围,同样是尚不明确,因为笔者在网页端Vaultwarden中添加硬件Key,则一切正常,测试也可以通过硬件Key来作为MFA手段,所以可能只是纸飞机的问题。
2.3 Windows Hello 验证路径锁定
这是一个非常抽象,非常常见,不仅限于PicoKey,但目前又没有比较合适的缓解方式的问题。
简单来说,如果你在使用Windows 10,浏览器是Chrome,且以前使用过WinHello来作为某网站的平台认证器(Platform Authenticators),那么即使你后来再在这个网站额外添加硬件Key(他的角色是漫游验证器,Roaming Authenticators),即使你能添加成功,也会发现重新插拔硬件后无法使用这个硬件Key,表现为弹出WinHello认证窗口,点击取消后平台直接提示验证失败,而不是让你选择其他验证器。
究其原因,我们需要了解,认证器的选择权在Windows,而不在Chrome或网页。但Windows有个特性,他会缓存一个表,用来记录网站(准确来说是Relying Party ID)是否可以使用平台验证器,如果WinHello内存有此网站的Passkey,且你曾经成功使用这个key去登录网站,那么WinHello会认为平台验证器已经够用,直接把车门焊死,外部认证器不再作为回落手段,取消WinHello直接判定为用户拒绝认证。
此外还有两个因素会加剧这个问题。第一个当然就是Chrome了。使用Edge的朋友可能比较难碰到这个问题,是因为Edge会额外传递允许枚举外部认证器的hint,让Windows可以选择外部验证器。但请注意,究竟是『Chrome没有传递这个Hint』,还是『只有Egde会传递这个Hint』,笔者并不清楚,也没有深入了解。
第二个因素,如果网站开发者没有明确设置allowCredentials,或者在调用navigator.credentials.get()时, 把option userVerification设置为required或者preferred,Windows就会自己挑选验证器,于是自然加剧了这个问题。
想要规避这个问题,其实并没有什么太完美的方案,但可以尝试:
- 换用Edge尝试一次
- 移除目标网站上的WinHello验证器
- 后续也要避免同时使用WinHello与硬件Key
- 完全退出Chrome后,插入硬件key,再打开Chrome
- 开一个浏览器隐私窗口来操作
- 临时禁用WinHello
3. PicoKey的初始化
如果你能接受上面的乱七八糟玩意,那么就可以动手了。
3.1 刷入固件
这里刷入的是7.0版本固件。和以前的不同,新版本固件,如果选Fido2,可以把Fido和OpenGPG功能合二为一,但目前这个时间点,官方可能只放出来通用固件,可能存在板子适配性不好的情况,比如笔者的板子在刷入之后,基础功能正常,但指示灯是不会亮的(可能需要修改LED灯GPIO),一些暂时未测试到的功能也不确定是否能用。如果你有顾忌,当然不妨使用稳定一些的6.6版本。
下载下来是一个uf2文件:

按住开发板上的BOOT按钮,插入USB,略微等一下后松开按钮,电脑上会多出来一个名为RP2350的U盘。把固件复制进去,开发板就会自动断开连接,开始刷写。刷写速度是很快的,几秒钟就好,6.6版本还能看到指示灯点亮。
3.2 初始配置
网页配置方法已失效,请使用上面更新内容中提到的pypicokey(选项是相同的)
准备一台有较新版本Chrome的安卓手机(理论上在Windows继续操作也行,但笔者没有成功),以及OTG线,把开发板连接到手机,并在手机上打开这个网站(须科学上网),然后如下设置:
- Select a known vendor 选 Yubikey 4/5
- LED brightness 调到 1
- 右侧勾选LED dimmable,Initialize(初始化),以及Power Cycle on Reset。
- 至于右侧的Secure Boot和Secure Lock,如果你对安全要求高,可以选上,但选上之后开发板就只能刷PicoKey官方签过名的固件了(至于刷nuke清空设备是否会移除此限制,尚不明确)。笔者还想折腾点别的,就没有选择。
- Product Name 填写
Yubico Yubikey
Secure Boot和Secure Lock 按需选择准备好之后,点击下面的Commission via WebAuthn,如果一切无误,Chrome会弹窗提醒你需要给硬件Key设置一个PIN,一般来说六位数字都可以了,有需要的可以设置更长。输入两遍PIN之后,Chrome会提示你此网站需要与Key通信,让你再输一次PIN,输完后提示你『触摸硬件』,我们的PicoKey没那么高级的功能,只需按一下BOOT按钮即可。
随后,页面会多出一行绿色字,大概就是Commission Successfully之类的,此时你的硬件Key就准备好了。
4. 硬件Key的使用
4.1 用作验证器
把Key插入电脑,如果你跟我一样刷的是7.0固件,会看到电脑成功识别出来两个设备,一个是Yubikey(我们上面设置的伪装),另一个是智能卡,可以用来签OpenPGP。
后者一时半会用不上,这里就不再赘述,简单来说,基本上就是用你的PGP主密钥生成一些子密钥(似乎签名/加密/认证要分开?),然后转移到硬件Key里即可。
至于前者,只需要在各大网站上添加Passkey,以后就可以带着这个玩意到处跑了,不再拘泥于平台验证器。不同网站的具体操作步骤并不一样,但一般来说都大同小异:
- 插入硬件Key
- 登录网站,找到账户设置/登录设置等选项
- 选择添加通行密钥(Passkey)
- 选择你的硬件Key,输入PIN,并按一下BOOT键表示确认
- 添加成功,可以选择起个昵称
关于昵称,笔者的取法是这样的:电脑上安装一个Yubico Authenticator(这玩意是Yubico官方用来替代之前的Yubikey Manager GUI的),打开,可以看到硬件Key的SN号,一般来说不同Key的前四位数都是不一样的,比如1234,所以网站上给这个key的昵称可以设置为硬件Key 1234,这样就便于识别。
4.2 外壳保护
开发板是裸板一块,长期用手接触可能会出现汗渍腐蚀等问题。推荐的保护方法是搞一个3D打印的外壳,比较牢靠,或者如果图省事,也可以像笔者一样,剪一截热缩管套里头,多少也能起到保护的作用。

5. 写在最后
目前还在折腾当中,也许还有别的新用途,比如Yubico Authenticator里选择槽位之后还可以看到一些笔者闻所未闻的功能,比如Yubikey 质询-响应,因为目前暂时用不上,就没有去研究了。
正如上文所说,Passkey是未来,即使在目前很多网站都是使用账户名密码来登录的情况下,也不妨碍我们先拿来玩玩。至少,可以拿来作为密码管理器的MFA,那也是挺好的了。
至于两个Key怎么放,以后可能会一个放家里一个(长时间出门时)随身带吧,毕竟出门在外的时候,硬件Key和手机都可以作为验证器。如果这两个都丢了,建议还是赶紧保护好自身安全,然后找个好心人借个电话打回家报平安吧。
(完)
你能在手机上给这个RP2350添加passkey吗?我这在手机上只能用了验证不能添加。
我当时在Chrome内测试是可以的
我找到了个软件可以解决这个问题的
https://f-droid.org/zh_Hans/packages/pl.lebihan.authnkey/ (我用了这个)
https://apt.izzysoft.de/fdroid/index/apk/s1m.hwfido2provider
请问这种有没有可能出现控制电脑的可能,像USBHarpoon那样
理论上不无可能,因为此类设备本来就是基于USB HID的,因此恶意固件可能会利用这条路径进行攻击。
一个比较简单的防范方法,可能是就是『即插即用』,有登录需要的时候才插硬Key,比如密码管理器的2FA,平时就使用密码管理器的软Passkey