低成本安全密钥 PicoKeys 踩坑记 —— 把 Passkey 和 OpenPGP 密钥塞进树莓派 Pico
最近看到了开源物理安全密钥方案 Pico Keys FIDO 2,可以在一块树莓派 Pico (RP 2350) 上面存储 Passkey,甚至 OpenPGP 密钥。
于是火速买了块华强北国产 RP 2350 树莓派,很快就到祸货了啊,就是下面的这个:

注:如果你是来看 PicoKey OpenPGP 踩坑的,你大可以略过前面内容,去看省流。
刷点固件
Pico-FIDO 2 支持同时保存 Passkey TOTP 和 OpenGPG 密钥。要开始使用这块开发板,我们必须先刷入固件。
按住 BOOT 按钮,然后插入数据线到电脑(别松手),你就会看到一个额外的存储器,允许我们把固件刷入。
你得先根据你的设备型号(开发商一般标注在板子上),然后下载对应固件。去上面 Github Release 里面下(Latest 的管理面板密钥有 Bug 而且型号不全,建议 Nightly,如果仍然有 Bug 你可以一路降级刷入)。
下载的 .uf2 固件复制到那个存储器里面,然后拔掉重新插入开机。非常好!你已经获得了一个暂时不能用的物理安全密钥!
初始化
要使用这个密钥,是时候初始化你的密钥了!
打开 Pico Commissioner,Vendor 选 Yubikey 4/5 然后勾上 LED dimmable(自动灭灯防止闪瞎狗眼),Initialize(自动清除所有已经保存的密钥),Product Name 填 yubico yubikey(必须完全一致!否则之后管理应用程序会报错)
然后 Commission via WebAuthn,弹出窗口选择更改位置,选择安全密钥:

如果你是第一次初始化,那么会要求你设置一个密码 PIN,否则会先提示你输入旧的密码。根据提示按一下互动按钮(是 BOOT 按钮,不是 Reset)。
保存后插拔一下你的密钥,现在你的密钥已经可以用于 Passkey 了!去任何支持的网站添加,然后选择保存到安全密钥,即可使用。
管理你的安全密钥
还记得吗?我们上面把密钥命名为了yubico yubikey,这是为了模拟成一个 Yubikey,这样就能用 Yubico Authenticator 来管理你的密钥了。你搜一搜就能在官网上找到这个 APP,安装好运行就行了。打开之后输入密码提权一下就能看到 Passkey 密钥了。

OpenPGP
嗯,实际上前面都是简写,我踩坑最大的还是 gpg 命令行的问题。
我们可以把 gpg 密钥移动到 Pico 上面,作为 OpenPGP 智能卡来用。这样的话,不仅可以在多个电脑上使用,也更加安全,因为密钥不能提取和复制。
首先,请记住下面几个血的教训(省流提示)
- 进行任何迁移到卡的操作,都是不可逆的,请务必在操作前进行备份。
- Yubico App 打开时候,gpg 命令行会 Card Error,无法读取这个智能卡,所以请先关闭再操作
- Yubico App 里面的 PIV 管理和 gpg 命令行是分开的,改了一个密码和另外一个无关(非 Nightly 固件还有 Bug,密码改不了,重置后无法获得管理密钥等神奇状况……)
- 默认的 PIN
123456,默认的 Admin PIN12345678 - 默认 PIN 不改掉,gpg 是用不了的
- Admin PIN 不能太短,也不要和 PIN 重复
备份你的密钥
好的,如果你是小白,那么上面省流你也看不懂,跟着我操作吧。
首先我们假设你已经有 OpenPGP 的主密钥和子密钥了,如果没有请自行生成。
然后我们先备份一下,防止被干掉。
1 | |
这个命令可以看到你有哪些 Key。
示例输出(我已经把子密钥移动到了 Pico,你的输出应该会告诉你子密钥的 ID):
1 | |
然后导出主密钥和子密钥备份到本地文件:
1 | |
把 ID 改成你上面提示的 ID(两个都是主密钥的!)
按照提示输入密码解锁,然后把生成的文件,保存到一个离线的硬盘里面,确保安全。
初始化智能卡
你必须先初始化你的 Key,才能迁移密钥并使用。
请注意,这一步是必须的,不能跳过改密码。
插入你的 Pico,然后输入:
1 | |
这个命令会进入智能卡编辑状态。
输入 admin 进入管理模式。
然后输入 passwd 修改默认 PIN,选择 1。
输入 PIN 123456,然后再设置你的新的 PIN。

然后输入 3,修改 Admin PIN。输入 12345678 解锁,然后改一个自己喜欢的。注意别太短,也别重复,会报错。
然后 Q 退出,输入 quit 退出命令行,卡初始化完成。
迁移密钥
初始化之后我们就能用卡了。
首先进入密钥编辑模式:
1 | |
你的 ID 就是主密钥的 ID。进入命令行,然后输入 key 1/2(不要输入 0,把主密钥保存在卡里面是不推荐的,选一个子密钥),选中之后,输入 keytocard。
提示选择密钥槽位,会根据你的密钥类型自动匹配。选择你想要的(槽位一共有三个,分别是签名、加密、认证)

然后根据提示输入密码就行了。
迁移完你的密钥之后,输入 save 保存退出命令行。此时,你的密钥已经不在本地了,保存到了你的 Pico 上面,非常安全。
测试密钥
我们来签名下试试:

输入 PIN,成功!
这下你就能用 gpg 了,当然 git 提交签名什么的都不是问题了。
在其它电脑上使用
由于智能卡只存储私钥,所以要让另一台设备也保存你的公钥吗,才能识别。你可以导出再导入:
1 | |
也可以直接发布你的公钥,然后远程下载回来(我没成功,或许是网络问题?):
1 | |
当然你也能用 Kleopatra,反正能拿到公钥就行。
接下来插入卡,就能使用啦。





