零、前情提要
还是从公众号过来的,看到小青蛙发的《顶级密码学专家把密码弄丢了》文章的评论,多半是不看好 FIDO 硬件的。说实话我并不这么认为
在经历过买的小鸡被别人暴力破解 SSH 的痛楚,也经历过我爸为了释放手机空间把 TOTP 软件删了难恢复账号的困境,现在我更愿意接受硬件密钥这个方案,毕竟拿在手上的密码更能让我心里踏实吧
不过现在的商业 FIDO 硬件确实贵。yubikey 以前确实做活动,但现在高达 500RMB 的售价确实让我望而却步,而国产 FIDO 设备如飞天棒又难买到。由于 FIDO 设备的重要性和易失性,你还不得不买上2个以上作为备份。我想这可能就是 FIDO 设备难推广的重要原因吧
直到今年我看 linuxdo 站说他们网站支持了 FIDO 硬件登录,并且有大佬找到了50以内平替 yubikey 的开源方案,我才看到了 FIDO 硬件在我这的希望。借此机会我买了相关物料并体验了一番后觉得不错,现推荐给大家
对了现在 linuxdo 不知道为啥被 GFW 屏蔽了,所以那个介绍 FIDO 的帖子我找不到了。你们找到了发给我看看
一、YubiKey 的平替
就是 Pico Keys,一款采用树莓派 Pico 做的加密硬件密钥项目
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 入门 网站中翻到这一页
然后在Vendor和Model中选择你手中的树莓派 Pico 开发板型号,下载相关固件
[!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放个固件够了,要啥自行车)
打开这个分区长这样
将刚刚下好的固件*.uf2拖进去,进度条跑完后该分区会自动弹出去,这个时候固件就烧好了,真方便啊!
[!question]- 我在电脑上找不到这个盘怎么办
那你这个开发板可能是二手的哈(开个玩笑)
这个时候可以按住你开发板上的
Boot按键再次进入刷写模式,就会弹出这个盘了
Boot按键会在开发板的丝印处标注,你也可以问问商家如何给开发板二次烧写程序
2. 配置 FIDO
新手机初次启动是需要配置网络、账号和应用的,这个刚出生的小 FIDO 也要让它认认主
[!todo]+ 第一步
烧写固件后就可以去配置刚刚烧写好的 FIDO 板子了
这个界面长这样子,看着复杂是不是?没错你的直觉是正确的!
先跟紧我,在Product Name中填入yubico yubikey,接下来是我的掰扯时间
[!question]- “Select a known vendor” 这一栏我选哪个好
这一栏是用于设置让 Pico Keys 去模拟哪个出名的 FIDO 设备的
- 新手可以无脑选全世界使用最多的
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” 必须填上面那个字符吗
这个选项将写入到开发板的名称中,并在设备管理器中体现
这一步主要是我看很多人的教程中都提及了这一点,但是呢我又觉得为什么大家要按照这一硬性规定定义设备又没怎么说为什么要这么做呢?
于是凭借着摸爬滚打 3 年的 Flutter 经验,我顺藤摸瓜找到了
Yubico Authenticator是怎么发现设备的代码
好嘛进程间通信,线索指向了管理 yubikey 的 Python 工具
yubikit,这个工具是通过串口和 yubikey 建立联系,像识别硬件就是走在串口上的,而不是通过 wmi
所以我觉得 “Product Name” 其实对于工具识别不是太重要
不过我的 FIDO 已经写死了不能更改,希望大家可以试着变动 “Product Name” 看看是否影响 FIDO 的识别并告诉我,多谢[!question]- “Options” 这么多选项,选择哪些比较好
LED dimmable和LED steady二选一
一个是设置 LED 状态为呼吸灯(我喜欢),一个是设置状态为常亮
Initialize是初始化开发板[!warning] 注意
以前存储在开发板内存的用户设置将在勾选此选项后全部消失,不可逆转
Secure Boot和Secure Lock全勾选
用于保护 FIDO 硬件不被别人篡改和破解[!warning] 注意
勾选这两项后你的开发板将只用作 Pico Keys 用途
因为 BootLoader 将被立即锁定,无法烧写别的固件
Power Cycle on Reset可选
设置树莓派系列开发板的重置按钮是否可用
由于官方的树莓派 Pico 是没有重置按钮的,需要开发者自行定义软重启的操作
勾选此项会赋予开发板的多余按钮重置的功能。这个功能因人而异吧看你需不需要开发板重置
Secp256k1 curve可选
偷个懒不另注释了,底下有
“Android does not support secp256k1 curve.”
[!todo]+ 第二步
接下来点击Commission via WebUSB或Commission via WebAuthn将配置信息写进开发板中,就能踏进奇妙的没有密码的 FIDO 世界了
你猜为什么我要把这段文字另起一行放在第二步?
因为绝大多数人会困在这一步,为什么点了Commission via WebUSB找不到我的 FIDO 设备啊这是个玄学问题,据已知的博客分析,这个网站对于 Windows 端 Chromium/Firefox 的 WebUSB 支持并不健全,换成安卓手机上用 OTG 连上开发板重新配置一下试试,或者使用
Commission via WebAuthn连接并配置(这种方式不支持设置Secure Boot和Secure Lock)
[!todo]+ 第三步
去微软商店上下载
Yubico Authenticator软件,这个软件可以管理 FIDO 上存放的通行密钥和 TOTP 密码
软件打开长这样,一股Flutter味儿我喜欢
此时插上 FIDO 硬件,就可以在主页中给它起名字了,搞定!
[!danger] 警告
由于存在开发板的 Pico Keys 的固件是可以被拷贝的问题你一定一定一定要设置 TOTP 和通行密钥的验证密码,
不然别人捡到你的 Pico Keys,拷贝一份就能把你的通行密钥偷偷拿走了
3. 体验 FIDO
我列举了一些好玩的使用场景,按照截图步骤尽情体验无密码的世界吧,Have fun!
[!note]- 就在小众论坛体验
@小青蛙 出来修论坛了
[!note]- 在微软账号体验
[!note]- 体验硬件的 TOTP
三、自荐一下我设计的外壳
很显然哈上面的这些教程你可以在搜索引擎上一找一大堆,好多人分享用这个廉价 FIDO 方案保护自己的账户的方法,但貌似评论区中很多人关注如何为这个 FIDO 配置一个合适的外壳
确实现在这类自制 FIDO 的帖子中针对外壳就没有太好的方案。有用热缩管套一下开发板的“简约”方案,有用钥匙串扣住开发板的 GPIO 的“凑合”方案,还有3D打印的“奢版”方案
我比较看好3D打印的方案,并且我试着打印了一个目前仅有的 RP2350 One 外壳。固然开创者精神值得钦佩,但是目前的外壳方案实属臃肿了一点,不像个小u盘。于是我重新设计了一下 RP2350 One 外壳,改进了卡扣设计,还自创了在小尺寸设计中的加强筋组件
直达作品MakerWorld链接,希望大家捧场哈!真是为了这盘醋包了这么多饺子,东扯西扯终于花了一点点篇幅推荐了下自己的作品[笑哭]































