30 块钱 DIY 一个物理安全密钥
::::warning[警告]{open} (8/6更新)好像大家对这个价格有点误解。
这个跟正规牌子的差的还是挺远的,如果你的密钥被偷了的话,物理攻击是能盗取数据的。
不要对这个价格有一些误解,这个跟市面上的比不了的。
DIY 产品,风险还是得自己承担。
::::
8/7 更新:修正了一些图片。笔者被 edge 默认的密码管理器坑了。想用这个一定要点击 使用其它方式保存
0. 什么是物理安全密钥?
物理安全密钥(Physical Security Key)是一种实体硬件设备,用于在登录在线账户或系统时验证你的身份。它通常外观像一个U盘或小型电子标签,是目前公认最安全的账户保护方式之一。
你可以把它理解为你数字身份的“物理钥匙”,其核心价值在于,即使你的密码被泄露,没有这个实体设备,攻击者也无法登录你的账户。
你也可以使用该物理安全密钥存储一些私钥,用于加密和签名。
本文的物理安全密钥指 FIDO2 标准的硬件安全密钥。
支持物理安全密钥的平台
- Google 谷歌
- Microsoft 微软
- Apple 苹果
- Luogu 洛谷
- GitHub
- ...
为什么要自己做而不去买一个呢?
- 市面上的物理安全密钥都挺贵……
- Yubico 几乎都要 400+ 元。
- 国产的 CanoKey 便宜一些,180 元左右。
- 还有,自己做一个真的很酷哎!
注意事项
自己制作的物理安全密钥的稳定性难以保证,建议保存好平台通常会提供的
Recovery Codes,防止出现“防住了别人,也防住了自己”的猎奇情况。
1. 购买原料
需要购买带有 RP2350 芯片、支持 USB 的开发板。比较推荐硬件厂商微雪。 型号可选:
微雪 RP2350-One:自带 USB-A 公头,无需转接口,图方便建议这个。微雪 RP2350-Zero:带 Type-C 母口,需要 A-to-C 线或者转接口。- 其他 RP2350 型号应该也可以,建议需要的读者自行查阅。
笔者选用的是
微雪 RP2350-Zero,花了 29 元。
不建议使用 RP2040 芯片。虽然也能运行,但 RP2350 新增了安全启动(Secure Boot) 和 OTP 存储,能更好地保护存储在芯片内的密钥材料(如 FIDO 私钥),物理安全性更高。
RP2350-Zero 的外观如下:
真的好小哎……
2. 固件选择
开源社区有几种流行的固件来提供物理安全密钥的功能
- pico-fido2 应该是比较早的一个,但是由于其转向商业化(社区版、商用版、例如其约 30 欧元的官方 APP,比硬件贵多了……),之后源码仓库被清空只剩下几个说明文件,这篇博客没有采用。
- RS-Key 是使用 Rust 的一个 pico-fido 的重写。这个其实也不错,包含除了基础功能外的众多功能。但是伪装 YubiKey 相关功能需要自己编译固件,这个有点麻烦,故本文不涉及。
- LibreKeys 是 pico-fido2 商业化删库前的版本的分叉,并且也开发了一个支持上述固件的 APP picoforge,本文笔者选用此固件。
3. 下载固件
LibreKeys 官方文档 暂时还没有什么实质内容,不过有固件用就可以。
固件列表:Releases · librekeys/pico-fido-firmwares。
我们需要在 162 种固件中找到符合自己型号的固件,直接找 waveshare_rp2350 的固件,这里有 one/tiny/zero 型号的固件。建议选择有 eddsa 后缀的固件。
4. 刷入固件
按住开发板左侧的 boot 按钮,使用 USB 插入电脑,会发现出现一个叫做 RP2350 的盘。
刷写也是非常地简单,直接把下载的 uf2 格式固件复制进去就好了。
复制进去之后,文件资源浏览器立刻就关闭了,然后 LED 会开始闪动,等到开始持续闪烁蓝灯就 OK了(而且特别亮!)。
5. 配置固件
我们使用 picoforge 作为管理工具,可以去 Releases · librekeys/picoforge 中下载。例如 Windows 用户可以下载这个。
下载后进行安装即可。
然后,打开 picoforge 软件,注意,如果看见右上角 FIDO 没有显示任何内容,请关闭软件,并且 使用管理员权限 运行它。正常是这样的:
改个产品名字
然后我们点击左侧栏的 Configuration ,改改配置。
这似乎是必须的?
笔者测试过不经过这一步就去使用 WebAuthn,发现一直在打转,所以建议还是改一下。
- 可以通过修改 Vendor Preset 和 Product Name 进行伪装,伪装成
更高贵的其他设备。这样我们除了使用 picoforge 之外,还可以使用 Yubico Authenticator - 如下图。选 YubiKey 5 ,输入 Yubico YubiKey,还可以顺手把 LED 调暗点(例如 1 就够了),然后到页面最底下,点击 Apply Changes 按钮。
设置个 PIN 密码
点击 Set up PIN,设置一个你忘不掉的数字密码。
6. 测试使用
如果图片不一样的话,注意一下点击 使用其它方式保存。
打开 WebAuthn 官网,随便输一个用户名,点击 Register。会发现:
点击创建,按照提示来没有大问题。
点击 Authenticate 来测试密钥登录。
然后这样就成功了:
7. 使用 Yubico Authenticator
前往 Yubico Authenticator 下载安装该软件。
可以看到 Yubico Authenticator 也能识别我们的 DIY 安全密钥。
8. 注意事项:通行密钥未显示?
另外,如果你发现无论 PicoForge 还是 Yubico Authenticator 都没有显示你刚才在某些网站上绑定的密钥,不要慌张,这是因为有不同的显示方式,由网站决定。
- 可发现凭证 Discoverable Credential
- 会列出,不过储存的数据更多,占空间多
- 不可发现凭证 Non-Discoverable Credential
- 不会列出,只在绑定的网站上使用,储存的数据少,占空间少
- 不会把所有信息都存在你的密钥里,而是只存一部分,剩下的信息在验证时由网站提供
测试过 洛谷应该会显示的 。
至于其他玩法,例如 OTP,比较简单,建议读者自行探索。
9. 给它搞个外壳
裸露的电路板未免有点吓人,而且还容易坏掉,所以建议给它搞个外壳。
在 3D 打印相关的社区中已经有一些现成的外壳模型了。
- RP2350-One: waveshare rp2350 one USB 外壳 / by @wtser
- RP2350-Zero: Waveshare RP2040-Zero带钥匙扣的外壳 / by MorastBlitz 按理来说这个 RP2040 外壳也能用在 RP2350-Zero 上……笔者使用了这个。
如果没有自己的 3D 打印机,也可以去找一些打印服务商帮你打印,淘宝上就有不少。
笔者砍价能力不行,又花了 30 元去打印外壳。实际发现可以接着砍价砍到 20……
当然如果你使用 外星科技 纸皮 + 胶水,也可以 DIY 一个外壳的。
RP2350-Zero + 外壳成品如图。
注意事项
电路板边缘有些小突起,导致电路板差一点点才能塞进去,建议打磨一下电路板边缘,包括左右边缘和后边缘。
笔者这里使用了磨刀石。
这个上下外壳似乎并不需要胶水,因为它们卡得很死。
后记
笔者后面还尝试了 RS-Key 固件,这个固件使用也不错。它支持更多功能,例如储存 OpenPGP 密钥,可以用来进行一些数字签名的操作。
这是笔者第一次写 DIY 硬件类型的文章,可能写得有点乱……
也发于笔者的个人博客 tobylai.fun 上。
© 2024–2026 Tobylai. 保留所有权利。
内容采用 知识共享署名 4.0 国际许可协议(CC BY 4.0)。
https://www.tobylai.fun/blog/2026-07-31-diy-rp2350-sk/