-
Notifications
You must be signed in to change notification settings - Fork 1
Description
Pico Keys是一个开源的硬件安全密钥项目,可以让Pi Pico成为一个硬件安全密钥。Pico 2支持硬件加密,使项目不再依赖于软件加密,不再是玩具而是真正的安全密钥。
写入固件
Pi Pico很容易刷固件,只需要:
- 按住BOOT按钮
- 连接电脑
- 电脑会出现一个移动硬盘的盘符
- 把固件文件复制到这个盘符中
- 固件就刷好了
兼容YubiKey
PicoKey项目提供了一个Commissioner工具,可以用来配置PicoKey:
- 打开网站后,Vendor选择 YubiKey 4/5
- VID:PID填写 1050:0407
- Product Name填写 yubico yubikey
- 勾选 Secure Boot 和 Secure Lock 实现硬件加密锁
- 使用 Commission via WebUSB 按钮将配置写入到PicoKey中
- 如果无法写入,可以试试 Commission via WebAuthn
这些配置可以实现PicoKey兼容YubiKey,使用YubiKey Manager可以管理PicoKey。
网站免密登录
目前有一些网站支持Passkey登录,例如GitHub、Google等。还有一些网站支持硬件密钥作为2FA。
我平常使用Bitwarden,它的浏览器插件支持2FA和Passkey,所以我没怎么用这个功能,仅给Bitwarden的2FA配置了PicoKey。
操作系统免密登录
yubikey 支持设置静态密码,使用模拟键盘输入,无需任何软件配合,所以可用于登录系统。
安全事项
由于静态密码不需要验证pin,并且会明文输入,设备被别人捡到后能获取到这个密码,所以静态密码应该使用随机生成而不能是自己常用密码。静态密码使用时应该是 自定义短密码+随机静态密码。这样就算捡到硬件设备也无法直接登陆系统。
Linux 配置
我个人使用发现 windows 上无需任何配置就能在系统登录界面使用静态密码,但在 Linux 上tty可直接使用,图形界面却需要使用ykman命令之后静态密码才能用。所以配置了一个services服务和一个udev规则插入硬件后自动执行ykman list。
/etc/systemd/system/yubikey.service
[Service]
Type=oneshot
ExecStart=ykman list
/etc/udev/rules.d/99-yubikey-input.rules
ACTION=="add", SUBSYSTEM=="input", ATTRS{idVendor}=="1050", TAG+="systemd", ENV{SYSTEMD_WANTS}="yubikey.service"
sudo免密
安装和配置
# 安装libpam-u2f
sudo apt install libpam-u2f
# 创建目录
sudo mkdir -p ~/.config/Yubico
# 创建密钥
sudo u2f_register ~/.config/Yubico/u2f_keys
# 注册硬件密钥
pamu2fcfg > ~/.config/Yubico/u2f_keys配置PAM
在/etc/pam.d/sudo文件中添加以下内容(为避免出问题,先在另一个终端sudo bash保持会话):
+auth sufficient pam_u2f.so cue [cue_prompt=Tap YubiKey]
@include common-auth这样配置后,执行sudo时会优先验证硬件密钥,如果失败会提示输入密码。
问题解决
我自己使用时发现如果密钥被拔掉再插上,会直接跳过验证失败,提示输入密码,应该是因为没有PIN码解锁导致。
所以我又修改了/etc/pam.d/sudo文件,添加了以下内容:
+auth sufficient pam_u2f.so cue [cue_prompt=Tap YubiKey] pinverification=1
@include common-auth但是这样配置后,每次使用sudo都提示输入PIN码,很不方便,最后修改为:
+auth sufficient pam_u2f.so cue [cue_prompt=Tap YubiKey]
+auth sufficient pam_u2f.so cue pinverification=1 timeout=30
@include common-auth这样配置后,首次使用会提示输入PIN码,之后仅需要点击密钥按钮即可。