引言

不想看废话==>跳转到刷机教程

网络安全是永恒的话题,WebAuthn 机制正迅速成为众多网站采用的第二因素验证主流方案。它不仅极大地简化了用户登录流程,摆脱了传统密码和短信验证码的繁琐,更在底层提供了强大的抗钓鱼和安全性。对我个人而言,这种便捷性已经融入日常,我的 Windows Hello 和移动设备中都存储着大量的 WebAuthn 凭据。

然而,在我个人的长期使用中,这种看似流畅的体验很快遭遇了本地凭据同步和跨平台兼容性的挑战,我在使用过程中主要遇到了两个问题:

  1. 凭据不可迁移:在Windows平台上,WebAuthn凭据可以保存在Windows Hello中,但是凭据无法迁移和备份,因此这些凭据只能在当前设备上使用,无法在别的设备上使用,并且重装系统还会导致凭据丢失,到时候还得重新注册;
  2. 承接上条,虽然也可以用移动设备充当验证器或者使用第三方的密码管理器,但是初期导入很麻烦,使用移动设备验证时需要扫码通过蓝牙连接,我个人使用时有时会出现始终连不上的情况,这时就会非常恼火;
  3. Linux桌面支持不完善:目前Linux的桌面环境下没有Windows Hello类似的设施,因此在Linux环境下尝试使用WebAuthn时浏览器会提示你只支持漫游验证器(即移动设备或物理安全密钥),而使用移动设备时就会遇到连接不稳定的问题,使用体验并不如想象中那样方便。

既然Windows Hello具有若干痛点,移动设备作为验证器来说体验不佳,那么另一个选择自然就是物理安全密钥

在物理安全密钥领域,比较流行的选择自然是 YubiKey ,作为硬件安全密钥领域的领导者,Yubico Key 拥有极其完善的生态系统和品质保证

  1. 卓越的兼容性:它几乎支持所有主流的操作系统、浏览器和企业服务,即插即用,兼容性无与伦比
  2. 多协议集成:它将 FIDO2、U2F、OATH-TOTP/HOTP、OpenPGP 和 Smart Card 等多种安全协议集成在一个耐用的外壳中,功能强大且稳定可靠。
  3. 工业级品质:防水、抗震、设计紧凑,提供了工业级的耐用性和安心的保障。

然而,这种极致的便利和完善性也体现在成本上,市面上的YubiKey均价通常是小几百。

考虑到我的核心需求集中在 FIDO2OpenPGP跨平台漫游使用,而这些功能可以完全通过开源社区驱动的固件实现。因此,在成本效益的考量下,我选择了这条 DIY 路线:

  • 一块基于 RP2040 芯片(或 RP2350)的开发板,成本通常远低于一个多功能 YubiKey 的价格(开发板只要约30元左右就能入手)。
  • 通过刷入 Pico-FIDO2 复合固件,我能以极低的硬件投入获得一个功能上完全满足我核心安全需求(FIDO2 + OpenPGP)的漫游密钥。

这是一个在功能满足度经济成本之间取得的完美平衡。

硬件准备与设备初始化

硬件选择

Pico Keys项目支持的设备很多,主要支持基于树莓派RP2040和RP2350,以及ESP32-S3芯片的开发板。RP2040因为缺失部分安全功能,因此更推荐使用RP2350芯片的开发板,能提供更好的安全性。我个人选择了微雪的RP2350-ONE,板载USB-A公口,可以直接连接到电脑使用,无需额外转接线。

1764590908 Image

固件选择

与许多安全功能集一体的YubiKey,Pico Keys项目将多个功能拆分成多个固件,目前无法同时运行。

Pico Keys官网 上给出了3种固件:

1. Pico FIDO (FIDO2/Passkey)

  • 功能焦点: 专注于 FIDO2CTAP 协议。它将你的 RP2040 变成一个标准的 Passkey(通行密钥)或 U2F 密钥。
  • 用途: 用于 Google、Microsoft、GitHub、Facebook 等支持 FIDO2/WebAuthn 的网站和应用程序进行安全登录。这是解决前文提到的 Windows Hello 凭据无法漫游问题的完美方案。
  • 你应该选这个: 如果你的主要目的是提升日常网页登录的安全性,摆脱短信验证码和本地凭据的限制,这是最直接的选择。

2. Pico OpenPGP

  • 功能焦点: 专注于 OpenPGP 智能卡标准。它允许你将 PGP 私钥安全地存储在硬件中,并使用硬件进行加密、解密和数字签名操作。
  • 用途: 配合 GnuPG (gpg) 等工具,用于安全电子邮件通信(加密和签名)、代码签名以及 SSH 认证(通过 PGP 代理)。
  • 你应该选这个: 如果你是开发者信息安全从业者,或者需要对敏感邮件、代码提交进行硬件级签名和加密,那么这个固件是为你准备的。

3. Pico HSM (Hardware Security Module)

  • 功能焦点: 这是一个通用密码学工具箱。它支持生成、存储和管理大量的密钥,包括 RSA(最高 4096 位)、各种 ECC 曲线和 AES 密钥。它通过 PKCS#11 接口与 OpenSSL 等工具集成。
  • 用途: 建立小型公钥基础设施 (PKI)、大规模密钥管理、高级加解密操作,以及需要工业级密钥保护的场景。
  • 你应该选这个: 如果你需要的不仅是登录或邮件加密,还要进行更复杂的密码学操作、管理大量密钥,或者打算将设备集成到专业安全系统中(用树莓派,你认真的?),则应选择 HSM。

根据你的实际需求选择适合你的固件,大部分人应该只是作为WebAuthn凭据使用,那么应该使用Pico Fido固件。

我个人则是选用了集成了 Pico Fido 和 Pico OpenPGP 两种固件的 Pico Fido2 ,这个固件的仓库地址在https://github.com/polhenarejos/pico-fido2 ,此固件仍然在开发阶段,这也是未公布在Pico Keys官网上的原因,选择这个固件需要注意可能会不稳定。

截至本文发布,仓库中最新的 6.6 Release 固件提供的PIV部分功能无法正常工作,需要使用夜间构建固件解决问题:https://github.com/polhenarejos/pico-fido2/releases/tag/nightly-main

你可以从 Pico Fido 固件无缝升级到 Pico Fido 2 (不丢失数据,但仍需小心)。

刷!

从Github仓库或者官网上下载到适合自己的固件,通常是 .uf2 后缀的文件。

如果使用 Pico Fido 2 固件,那你下载到的文件应当是 pico_fido2_waveshare_rp2350_one-6.6.uf2 ,目前夜间构建版本号依然是6.6,但已修复PIV故障,请不要使用 Latest Release 的 6.6 版本!

按住开发板上的BOOT键然后再连接到电脑,此时LED灯不亮,电脑上出现名为 RP2350 的可移动存储设备,将准备好的固件(uf2)复制到这个设备中,然后设备会自行断开连接,此时请不要断开连接,设备会自行重启并被识别为硬件密钥。

后期若有固件更新也是一样的操作,对于同类型固件数据不会丢失。

固件刷入后设备应当是LED蓝色/红色闪烁,这时候使用浏览器打开 Pico Keys 的初始化网页( https://www.picokeys.com/pico-commissioner/ ),设备选择 Yubikey 4/5 ,右下角设备名称输入 Yubico YubiKey ,亮度调整为1(避免太亮),LED Driver 选择 WS2812 ,勾选 LED Dimmable 和 Power Cycle On Reset 选项,如果确定设备将来只作为Key使用,那还可以勾选 Secure Boot 和 Secure Lock 选项增强安全性(这两个选项无法撤回,将导致设备将来只能运行Pico Keys系列固件)。

如果勾选 Initialize ,将导致设备初始化并丢失所有已保存的Key,除了第一次使用和特殊情况不建议勾选。

1764592913 Image

首次初始化点击左侧的WebUSB按键,浏览器会弹出设备选择框,选择Pico Keys 设备即可。然后需要断开设备重新连接,这时设备就会被系统识别成 Yubico Key 了,我们就可以使用 Yubico Key 的配套软件管理我们的Pico Key。推荐使用 Yubico Authenticator 软件,功能最为全面。然后回到先前的网页上,去掉初始化的选项,其他保持不变,选择WebAuthn:

1764593253 Image

对于初次使用的密钥,系统会弹出对话框让你选择密钥保存位置,选择安全密钥,然后设置一个新的PIN(这是你安全密钥的全局密钥,将来每次使用都需要输入,请不要使用过于简单的密码),然后按照说明按下按钮(对应BOOT按钮)

1764593417 Image
1764593436 Image
1764593450 Image

然后你应该能看到你的LED亮度设置立即生效,将来也能通过这个页面的WebAuthn方法修改Pico Key的设置(安全启动只能通过WebUSB方法打开)。

对于我的设备,在首次初始化后就无法使用WebUSB方法修改设置了(列出的设备中没有Key),除非完全重置设备。

至此你已完成 Pico Key 的安装和初始化工作。

切换和更新固件

更新固件

按住BOOT键插入电脑,设备将被识别为名称为RP2350的U盘,将新版本的固件(uf2)复制进去即可,设备将自动重启。

重置固件

如果只是需要清楚密钥上所有保存的凭据,使用 Yubico Authenticator 应用提供的恢复出厂设置功能即可;

如果需要完全重置设备,下载 https://github.com/Gadgetoid/pico-universal-flash-nuke 上提供的数据清除固件,按住BOOT键连接设备,将数据清除固件复制到RP2350中,设备会自行断开连接,然后等待一分钟左右,设备会自行重新连接并显示为RP2350 U盘,这时再安装新固件即可。

切换固件类型

如果需要在不同类型的固件之间切换,建议先按照上个章节完全重置设备,然后再安装设备。

从Pico Fido切换到Pico Fido 2 复合固件不会丢失数据,因此不需要完全重置。

LED灯状态说明

根据我观察和总结(不一定准确),得出一下结论供读者参考:

  • 绿色慢闪:设备尚未被系统初始化,所有功能不起作用
  • 蓝色慢闪:设备已初始化,正处于空闲状态
  • 红色慢闪:设备被非紧急工作占用,如被请求进行WebAuthn认证或OTP的生成
  • 红色快闪:设备正在进行加密/解密操作,这是尽量不要断开连接,将导致密钥和文件不完整

未完待续

Fido2相关功能主要包含OTP一次代码生成,WebAuthn认证和配置在按键槽位上的静态密码或动态密码,OpenPGP相关功能将在之后的文章中介绍。

除非注明,否则均为天远日记原创文章,转载必须以链接形式标明本文链接

本文链接:https://www.tqhyg.net/post641.html