前言
咱其实很久之前就知道了这个东西,一个形似U盘的物理密钥,类似于加密狗的功能,可以插入后跳过登录验证什么的,但是这东西在国内很小众,所以也就仅限了解了就没下文,直到后来看到了群友分享了自己的极其昂贵的 Yubikey ,咱就也想整一个玩玩,虽然商业方案很贵,但是咱相信现在社区应该已经有了很不错的开源方案,简单了解过后,咱发现 Raspberry Pi 的 RP2350是个很不错的选择
为什么选择RP2350?
目前来说,市面上可用于作为 PassKey 的产品,可以分为这三种:
- 商业闭源成品(Yubikey)
- 开源成品方案(PicoKeys)
- 通用微控制器(RP2040/RP2350/ESP32)
| 项目 | RP2350 | RP2040 | YubiKey | PicoKeys / 开源方案 |
|---|---|---|---|---|
| 平台 | Raspberry Pi 新一代 MCU | Raspberry Pi 首代 MCU | 商业安全密钥 | 开源安全密钥方案(MCU + 安全芯片/固件) |
| 架构 | 双核 ARM Cortex-M33 + 可选 RISC-V | 双核 ARM Cortex-M0+ | 内置安全芯片 + MCU | MCU(RP2040 / STM32 等)+ 加密处理 |
| 内存 | 520 KB SRAM,多银行 | 264 KB SRAM | 内置安全存储、固件 | 取决硬件设计(可能有外部闪存/EEPROM) |
| 安全特性 | Secure Boot、OTP 存储、TrustZone、TRNG、抗故障/抗干扰 | 无硬件安全特性 | 专用安全模块、防物理攻击 | 可通过安全芯片/防护设计增强 |
| 抗攻击能力 | 有硬件抗干扰,社区测试过 | 弱,几乎无保护 | 高,成熟防护机制 | 取决设计是否加入安全防护 |
| 生态 | 新兴平台,开源社区支持增强 | 成熟生态,文档丰富 | 厂商支持完善,认证齐全 | 开源社区多样,有成熟项目也有实验性项目 |
| 成本 | 略高于 RP2040,板级成本可控 | 极低 | 高 | 取决组件,可比商业密钥便宜 |
从上表可以看出,RP2350 在成本和安全性之间找到了一个较好的平衡——既比商业成品便宜,又提供了硬件安全特性,是开源 PassKey 项目的理想选择。
但是通用 MCU,例如RP2350,本身只是一个基础硬件,只不过提供了安全能力,可以用于自制 PassKey,而为了实现PassKey的功能,是需要刷入PicoKeys的固件的。
不过上面咱没提ESP32的事,ESP32系列当然也能做安全密钥,还能直接使用线刷跳过配置步骤,但是ESP32有爆出来过漏洞可以Flash直读密钥。
硬件购买
PickKeys的固件支持 RP2040 RP2350 以及 ESP32 ,但通常是使用树莓派芯片烧录。
芯片毫无意外选择了 RP2350 ,从上面的表格可以看出 RP2350 有了很多安全设计,而RP2040则理论上也可以直接读取出密钥
硬件上选择的是微雪RP2350-One,价格仅需32CNY

1. 烧录
下载固件
去PickKeys官网下载固件,往下滑找到下载固件, Firmware 固件类型选择 Pico Fido ,供应商和芯片型号根据实际填写,咱选的是微雪RP2350-One,然后点击 Download 下载uf2固件

刷入固件
微雪RP2350-One上面有两个按钮,一个是Boot,一个是Reset,按住Boot插入电脑后,你会发现出现了一个127MB大小的盘,把固件拖进去即可,会自动刷入,刷好后开发板上的灯应该会长亮,时不时灭一下,如果没有也不用紧张

2. 配置固件
访问 Picokeys 官网的在线调试工具 Pico Commissioner 来配置一下固件设置

- Vendor设置为YubiKey 4/5,因为咱们要刷的就是YubiKey,后续可以通过YubiKey的软件管理咱们的PicoKey
- LED brightness是LED亮度,如你所见,默认亮度非常瞎眼,所以设置到1
- 勾上LED dimmable,Secure Boot² 和 Secure Lock²,Power Cycle on Reset³,具体有什么用可以 Baidu/Google
- Product Name设置为 Yubico YubiKey
Secure Boot 和 Secure Lock 是为了防止提取密钥的
但是开启 Secure Boot 前一定要考虑清楚,开启后只能运行官方签名固件,安全性高,但限制了自定义固件,如果不希望从此只能运行官方固件但希望开启安全锁可以使用 自签名
配置好后点击Commission via WebUSB,设备选择Pico Key

请改用安卓手机进行调试,至于怎么把USB插入手机嘛,用OTG就可以了,咱这里就出现了这个问题,最后是使用手机调试好的

3. 测试
配置好后,重新拔插一下,然后点击 Commission via WebAuthn 进行测试,不过这个测试只是测试可用而已,如果要功能测试,还是需要去其他网站,例如 WebAuthn 或 Token2
需要注意第一次使用Windows会让你设置PIN,也就是主密码,之后使用此密钥、查看密钥信息都需要输入此PIN,当然后面也可以改,但通常不建议,因为改的次数是有限的
这里以WebAuthn为例,在输入框随便输入一个用户名,先点击Register,也就是注册

然后保存密钥后,点击Authenticate登录测试

看到图示界面即登陆成功
功能
主页
Pico Keys兼容YubiKey,所以可以很方便的在 Yubico Authenticator, YubiKey Manager,ykman软件里管理密钥,咱使用的是 Yubico Authenticator

注意,密钥的 S/N (序列号)是机密信息,最好不要在网上公开它,所以在此咱打了码。
密钥的使用方法是在需要按按键时按下Boot键,不要在插入时按,那是刷固件的操作。
另外Boot键没有长按功能,想要触发长按的话请连续按两下。
OTP账户
此功能是生成OATH验证码(基于时间的动态2FA)或HOTP验证码(基于次数的动态2FA)
功能和谷歌的Google 身份验证器一样,不同的是两步验证密钥是存放在刚刚制作的物理安全密钥里,不会存在本地硬盘里
在这里你可以添加OTP账户

通行密钥
通行密钥是保存在密钥里面的密钥凭证,访问此区域需要输入PIN,你可以在里面查看自己密钥凭证,请不要随意泄露这里的信息
在这里你可以删除密钥或者更改你的PIN

槽位
这是一个比较有意思的功能,可以设置密钥上的物理按键的功能
它可以做到:
- 按下按键自动输入静态密码登录电脑
- 按下按键自动生成并输入基于次数的一次性2FA代码
- 自动应答验证…


自定义图标
自定义Yubico Authenticator里显示的图标,使其更易于管理
Yubico Authenticator默认图标非常不方便看出是哪家,但是你可以通过手动自定义图标包,可以选择去查看Aegis 图标包格式然后一个个自定义图标,或者选择使用Aegis图标包
咱懒,直接选择了Aegis图标包


最后
折腾完啦,只花了32CNY就获得了一个媲美Yubikey物理密钥的PassKey,安全性也不算差,而且挺好玩的,此外这个其实社区是有3D打印外壳的,感兴趣的话,可以自己去看看哦~
需要注意如果是裸着开发板的情况,请不要放到潮湿的地方,还有,请不要把物理密钥当做是唯一手段,这个东西丢了是真的丢了,做好备份,多套方案才是好的习惯