一直想买一个yubikey,但苦于其高昂的价格一直没能入手,最近突然看到Google的开源FIFO验证器google/OpenSk,可以实现 yubikey的功能,但是所需要的硬件却更便宜,所以就动了心思。

准备硬件

  • 一台*nix电脑,OpenSk似乎不能在Win上编译,当然你也可以使用WSL2/虚拟机,关于如何把USB透进WSL2可以看我上篇文章
  • 一个nRF52840开发版,opensk官方使用的是Nordic(我买的是这个),同样受支持的还有makerdairy的,感觉他的资料比Nordic还全一些,裸板便宜了10块钱,但是加了个壳贵了50??? 但是一堆国产的就不敢说了,我也没上这种灵车。
  • 一个编程器,如Jlink(可选,救砖用)
  • 3D打印一个外壳(可选,模型见 https://www.thingiverse.com/thing:4132768 )

编译和安装

首先插上你的开发版,看到开发版上红灯闪烁,并且在设备管理能看到 Open DFU Bootloader 即可刷入系统

2020-08-01T15:23:12.png

准备依赖

## rustup
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
## nrfutil
pip3 install nrfutil

编译

git clone https://github.com/google/OpenSK && cd OpenSK
./setup.sh
# 这里会在crypto_data/里生成私钥和公钥,如果需要使用自己的,请替换`opensk_cert.pem`和`opensk.key`

./deploy.py --board=nrf52840_dongle_dfu --opensk --programmer=nordicdfu
# 官方文档属实不行嗷,翻了半天issues才看到这个可以不用外接编程器

# 如果你有买jlink之类的编程器
brew tap homebrew/cask-drivers
brew cask install segger-jlink
./deploy.py --board=nrf52840_dongle --opensk

# 如果在使用linux,还需要添加udev规则以供普通用户使用
sudo cp rules.d/55-opensk.rules /etc/udev/rules.d/
sudo udevadm control --reload

# 如果需要更新opensk,按住主按钮后面的Reset按钮,插入电脑,进入DFU模式就可以刷机了

结束后重新插入板子,可以看到板子上的灯不闪了,设备管理里面显示的是OpenSK
2020-08-01T15:59:25.png

测试

OpenSK所支持的协议有测试demo可用

Webauthn: https://webauthn.io/
U2F: https://mdp.github.io/u2fdemo/

实际使用

OpenSK所支持的协议主要用于Web登陆的2FA,就我简单的测试来看, 1Password, GitHub, Cloudflare这类支持FIDO的网站和GitLab这类支持U2F都可以通过验证。

但是它没有本地验证的功能(可以用Windows Hello),不能用来登陆(macOS从10.15封禁了这类方法,yubikey也不能用来登陆mac), ssh和sudo,比起yubikey差了许多,不过既然是Google的开源项目,应该不会很快弃坑,期待下一步的发展