分享yubikey硬件密钥的开源替代 + 我为它设计的外壳

零、前情提要

还是从公众号过来的,看到小青蛙发的《顶级密码学专家把密码弄丢了》文章的评论,多半是不看好 FIDO 硬件的。说实话我并不这么认为

在经历过买的小鸡被别人暴力破解 SSH 的痛楚,也经历过我爸为了释放手机空间把 TOTP 软件删了难恢复账号的困境,现在我更愿意接受硬件密钥这个方案,毕竟拿在手上的密码更能让我心里踏实吧

不过现在的商业 FIDO 硬件确实贵。yubikey 以前确实做活动,但现在高达 500RMB 的售价确实让我望而却步,而国产 FIDO 设备如飞天棒又难买到。由于 FIDO 设备的重要性和易失性,你还不得不买上2个以上作为备份。我想这可能就是 FIDO 设备难推广的重要原因吧

直到今年我看 linuxdo 站说他们网站支持了 FIDO 硬件登录,并且有大佬找到了50以内平替 yubikey 的开源方案,我才看到了 FIDO 硬件在我这的希望。借此机会我买了相关物料并体验了一番后觉得不错,现推荐给大家

对了现在 linuxdo 不知道为啥被 GFW 屏蔽了,所以那个介绍 FIDO 的帖子我找不到了。你们找到了发给我看看


一、YubiKey 的平替

就是 Pico Keys,一款采用树莓派 Pico 做的加密硬件密钥项目

Pico Keys 入门

Pico Keys 可以烧录在树莓派 RP2350/2040 芯片中,模拟 yubikey5 设备的 TOTP、通行密钥、SLOT 和 PGP 功能

[!question] 把密码存在树莓派芯片安全不

[!success] 放心吧

树莓派的 RP2350/2040 里面有 OTP 安全硬件,还支持 BootLoader 加锁,足以安全保存你们的通行密钥和一次性密码私钥

[!question] 我有 ESP32,可以装 Pico Keys 吗

[!warning] 不建议

虽然 Pico Keys 的官方 Github 有写进 ESP32S3 的固件,但是这个芯片的安全功能没 RP2350/2040 厉害,你的通行密钥和一次性密码私钥可能会明文保存在芯片内


二、制作自己的 FIDO 硬件

罗永浩最近在采访何同学的时候,何同学说他爸给他说过的一个至理名言 “要想越狱一台 iPad,你得先有一台 iPad”

同理要想制作自己的 FIDO 硬件,你得先要有自己的 FIDO 硬件。这里推荐微雪的 RP2350 One 开发板,我是 29 块入的

1. 装上 FIDO

这一步相当于给你的开发板安装一个系统,一个安全地存放你的通行密钥的系统

[!todo]+ 第一步

在上面的 Pico Keys 入门 网站中翻到这一页
然后在 VendorModel 中选择你手中的树莓派 Pico 开发板型号,下载相关固件

屏幕截图 2025-11-25 120624.png

[!question]- “Firmware” 这一栏我选哪个好

  • 小白建议无脑选 Pico OpenPGP,这个固件最好玩功能最全,将 RP2350/2040 的特性全部榨干

  • Pico HSM 能让你的树莓派 Pico 开发板摇身一变成为硬件安全模块,主要是 PGP 功能,这个功能能给你创造的东西“盖”个属于你独一无二的章

  • Pico Fido 就支持存储 TOTP 和通行密钥了,可以说这两个功能是让我们摆脱繁琐的密码的基础。仅想使用 FIDO 功能可以下载这个精简固件

[!question]- 我需要给 “EdDSA support” 一栏打勾吗

听我的,打上
这个是最新的爱德华兹曲线加密算法,比以往的 DSA 算法性能更好

[!question]- 点了下载没反应怎么办

这个问题老生常谈了,得怪Github不给力哈,加速器准备一下就好了

[!todo]+ 第二步

下载的固件后缀名应该是以后缀 *.uf2 结尾的文件,比如我的
pico_fido_waveshare_rp2350_one-6.6-eddsa1.uf2

时代在变革,以前玩嵌入式的想向开发板烧个程序那得费老大劲了,开放串口,切换 Boot,设置内存… 都是丝滑小连招劝退新手啊

现在烧写固件方便了
先把刚买来的开发板插到电脑上,会弹出一个u盘分区供你放固件(128MB放个固件够了,要啥自行车)

屏幕截图 2025-11-25 125322.png

打开这个分区长这样
将刚刚下好的固件 *.uf2 拖进去,进度条跑完后该分区会自动弹出去,这个时候固件就烧好了,真方便啊!

屏幕截图 2025-11-25 130056.png

[!question]- 我在电脑上找不到这个盘怎么办

那你这个开发板可能是二手的哈(开个玩笑)

这个时候可以按住你开发板上的 Boot 按键再次进入刷写模式,就会弹出这个盘了

Boot 按键会在开发板的丝印处标注,你也可以问问商家如何给开发板二次烧写程序

2. 配置 FIDO

新手机初次启动是需要配置网络、账号和应用的,这个刚出生的小 FIDO 也要让它认认主

[!todo]+ 第一步

烧写固件后就可以去配置刚刚烧写好的 FIDO 板子了

点击进入 Pico Keys 固件配置入口

这个界面长这样子,看着复杂是不是?没错你的直觉是正确的!
先跟紧我,在 Product Name 中填入 yubico yubikey,接下来是我的掰扯时间

PixPin_2025-11-25_13-40-45.png

[!question]- “Select a known vendor” 这一栏我选哪个好

这一栏是用于设置让 Pico Keys 去模拟哪个出名的 FIDO 设备的

PixPin_2025-11-25_13-43-37.png

  • 新手可以无脑选全世界使用最多的 Yubikey 4/5,这个设备可以无伤使用 Yubico Authenticator 的全部功能
  • 高级用户可以选 Nitrokey,这是个新兴的开源硬件密钥项目,但是相关工具链我不熟悉,还是 Yubico Authenticator 适合大家
  • 不要选择带 HSM 标签的设备,HSM 刚刚说过是硬件安全模块,是用来做公私钥相关操作的,不能存通行密钥
  • 不要选择带 GnuPG 标签的设备,GnuPG 是专门用于做GPG的设备,负责读写验证GPG格式的公私钥的,你可能在配置软件源的时候见过它,但不能存通行密钥

[!question]- “or use a custom VID:PID” 需要我填吗

哥们你英语需要进修了,“or”“or”“or”,或者或者或者,念三遍!

除非你想让 PicoKeys 模拟其他 HID 设备“骗”其他客户端,不然不要动它

[!question]- “Presence Button Timeout” 是干什么的

这个是负责设置无操作超时时间的

想象一下你刷完抖音后去上厕所,把手机放在桌子上,但是没有锁屏
在手机没有息屏的这一段时间内你的手机是可以被别人拿去玩的

FIDO 也是这样,当你插入 FIDO 设备并输入验证密码后
在一段时间内你是不需要重复去输验证密码就能验证下一个网站
这个选项就是负责输完密码后这一段空白时间的

设置短的话你就需要多次输入验证密码验证 FIDO 很麻烦
但设置长了就怕别人趁你离开的间隙偷偷验证网站
这里设置15秒足矣

[!question]- “LED brightness” 是干什么的

设置开发板指示灯亮度的

尽量调低一点,6 ~ 8 就可以了,调低了指示灯会暗的看不清,调亮了照亮你的美

[!question]- “LED GPIO pin / LED driver” 需要我填吗

根据你买的开发板的文档去调,如果固件型号对应你的开发板型号,就不用动它

[!question]- “Product Name” 必须填上面那个字符吗

这个选项将写入到开发板的名称中,并在设备管理器中体现

屏幕截图 2025-11-25 144416.png

这一步主要是我看很多人的教程中都提及了这一点,但是呢我又觉得为什么大家要按照这一硬性规定定义设备又没怎么说为什么要这么做呢?

于是凭借着摸爬滚打 3 年的 Flutter 经验,我顺藤摸瓜找到了 Yubico Authenticator 是怎么发现设备的代码

屏幕截图 2025-11-25 151707.png

屏幕截图 2025-11-25 152213.png

好嘛进程间通信,线索指向了管理 yubikey 的 Python 工具 yubikit,这个工具是通过串口和 yubikey 建立联系,像识别硬件就是走在串口上的,而不是通过 wmi

屏幕截图 2025-11-25 152847.png

源码在此大家可以观摩一下

所以我觉得 “Product Name” 其实对于工具识别不是太重要
不过我的 FIDO 已经写死了不能更改,希望大家可以试着变动 “Product Name” 看看是否影响 FIDO 的识别并告诉我,多谢

[!question]- “Options” 这么多选项,选择哪些比较好

  • LED dimmableLED steady 二选一
    一个是设置 LED 状态为呼吸灯(我喜欢),一个是设置状态为常亮

  • Initialize 是初始化开发板

[!warning] 注意
以前存储在开发板内存的用户设置将在勾选此选项后全部消失,不可逆转

  • Secure BootSecure Lock 全勾选
    用于保护 FIDO 硬件不被别人篡改和破解

[!warning] 注意
勾选这两项后你的开发板将只用作 Pico Keys 用途
因为 BootLoader 将被立即锁定,无法烧写别的固件

  • Power Cycle on Reset 可选
    设置树莓派系列开发板的重置按钮是否可用
    由于官方的树莓派 Pico 是没有重置按钮的,需要开发者自行定义软重启的操作
    勾选此项会赋予开发板的多余按钮重置的功能。这个功能因人而异吧看你需不需要开发板重置

  • Secp256k1 curve 可选
    偷个懒不另注释了,底下有
    “Android does not support secp256k1 curve.”

[!todo]+ 第二步
接下来点击 Commission via WebUSBCommission via WebAuthn 将配置信息写进开发板中,就能踏进奇妙的没有密码的 FIDO 世界了

屏幕截图 2025-11-25 161604.png

你猜为什么我要把这段文字另起一行放在第二步?
因为绝大多数人会困在这一步,为什么点了 Commission via WebUSB 找不到我的 FIDO 设备啊

这是个玄学问题,据已知的博客分析,这个网站对于 Windows 端 Chromium/Firefox 的 WebUSB 支持并不健全,换成安卓手机上用 OTG 连上开发板重新配置一下试试,或者使用 Commission via WebAuthn 连接并配置(这种方式不支持设置 Secure BootSecure Lock

[!todo]+ 第三步

去微软商店上下载 Yubico Authenticator 软件,这个软件可以管理 FIDO 上存放的通行密钥和 TOTP 密码

屏幕截图 2025-11-25 163904.png

软件打开长这样,一股Flutter味儿我喜欢

屏幕截图 2025-11-25 164023.png

此时插上 FIDO 硬件,就可以在主页中给它起名字了,搞定!

屏幕截图 2025-11-25 164503.png

[!danger] 警告
由于存在开发板的 Pico Keys 的固件是可以被拷贝的问题

你一定一定一定要设置 TOTP 和通行密钥的验证密码,
不然别人捡到你的 Pico Keys,拷贝一份就能把你的通行密钥偷偷拿走了

3. 体验 FIDO

我列举了一些好玩的使用场景,按照截图步骤尽情体验无密码的世界吧,Have fun!

[!note]- 就在小众论坛体验

屏幕截图 2025-11-25 165305.png

屏幕截图 2025-11-25 165315.png

屏幕截图 2025-11-25 165338.png

屏幕截图 2025-11-25 165350.png

屏幕截图 2025-11-25 165356.png

屏幕截图 2025-11-25 165410.png

@小青蛙 出来修论坛了

[!note]- 在微软账号体验

屏幕截图 2025-11-25 165938.png

屏幕截图 2025-11-25 165945.png

屏幕截图 2025-11-25 165959.png

屏幕截图 2025-11-25 170438.png

屏幕截图 2025-11-25 170034.png

[!note]- 体验硬件的 TOTP

屏幕截图 2025-11-25 170646.png

屏幕截图 2025-11-25 170944.png

屏幕截图 2025-11-25 170953.png


三、自荐一下我设计的外壳

很显然哈上面的这些教程你可以在搜索引擎上一找一大堆,好多人分享用这个廉价 FIDO 方案保护自己的账户的方法,但貌似评论区中很多人关注如何为这个 FIDO 配置一个合适的外壳

确实现在这类自制 FIDO 的帖子中针对外壳就没有太好的方案。有用热缩管套一下开发板的“简约”方案,有用钥匙串扣住开发板的 GPIO 的“凑合”方案,还有3D打印的“奢版”方案

我比较看好3D打印的方案,并且我试着打印了一个目前仅有的 RP2350 One 外壳。固然开创者精神值得钦佩,但是目前的外壳方案实属臃肿了一点,不像个小u盘。于是我重新设计了一下 RP2350 One 外壳,改进了卡扣设计,还自创了在小尺寸设计中的加强筋组件

直达作品MakerWorld链接,希望大家捧场哈!真是为了这盘醋包了这么多饺子,东扯西扯终于花了一点点篇幅推荐了下自己的作品[笑哭]

5 个赞

妙,好长你等我慢慢看

1 个赞

你看你写了这么多,居然没放最重要的自己设计的壳的图片

打印材料丑了 :sweat_smile:
用白色pla会更好看一点

正面 反面
webwxgetmsgimg (1).jpg webwxgetmsgimg (2).jpg
1 个赞

再搞个贴纸,放一只大蛤蟆 :smile:

楼主你打错缩写了,那个应该是FIDO,不是FDIO :joy:

2 个赞

别急,我在makeworld说过后期要设计类似于乐高积木的卡扣,蛤蟆会有的 :laughing:

在改了在改了哈

FIDO 硬件 的硬傷,應該是還沒有完成普及,以至於形成行業標準

而沒有標準的情況下,就是大家各做各的,而且YubiKey 原始碼是閉源的

這導致其中會有很多安全隱患,例如 YubiKey 4 就受 ROCA漏洞 影響

所以還需要等 FIDO聯盟 把可普及的方案弄出來

如此,這種硬件"虎符"遲早會成為大眾的隨身設備

1 个赞

嗯嗯,真的希望FIDO发展并大众化,苦密码久矣了

国产小作坊还有个Canokey

2 个赞

那款真的就是另当别论了 :sweat_smile:

屏幕截图 2025-11-26 100000.png

某宝有卖现成套件的(就是对方已经打印好了,外壳,电路板,拿回来只用组装和刷机即可)

这是我基于套件搞的备用密钥

_20251126101807.png

_20251126101941.png

1 个赞

这个可以,我就喜欢小巧的,塞钥匙扣方便

不过我之前在网上看到它的芯片是rp2040,不知道现在有没有迭代最新的芯片

方案是基于Raspberry Pi Pico的,自然芯片是RP2040
不过我看现在也有基于RP2350

1 个赞

能不能推荐个c口的链接?

c口的看这位,那个好像搜mxdiyfido,是现成方案,买了就能做FIDO用,价格我不清楚哈

啥都没搜着

搞错了,叫 MeXdiy Pico Fido :joy:

等等,我居然找到了 Pico Keys 国内交流群聊

就是这个,自己搞的话成本在30多到50多不等
作者 Metoo 也卖过成品,成品大概售价70~80多吧,已经记不清了