1 个不稳定版本
0.5.0 | 2024年4月28日 |
---|
#1052 在 身份验证
1.5MB
23K SLoC
fidou密钥管理器
fidou密钥管理器
是一个基于 kanidm webauthn-authenticator-rs 库 的命令行工具,用于管理和配置 FIDO/CTAP 2 兼容验证器(安全密钥)。
重要: 此工具不支持仅 FIDO 1(U2F)令牌。
构建和运行
首先,您需要安装 OpenSSL 的头文件和库。
# Build fido-key-manager
cargo build --bin fido-key-manager
# Run fido-key-manager
./target/debug/fido-key-manager --help
在 Windows(PowerShell)上
# Build fido-key-manager
cargo build --bin fido-key-manager
# Either:
# A) run Windows Terminal as Administrator, or,
Start-Process "shell:AppsFolder\$((Get-StartApps Terminal | Select-Object -First 1).AppId)" -Verb RunAs
# B) run PowerShell as Administrator.
Start-Process -FilePath "powershell" -Verb RunAs
# Run fido-key-manager from the Administrator terminal:
.\target\debug\fido-key-manager.exe --help
默认情况下,Cargo 将使用 fidou密钥管理器
的 nfc
和 usb
功能 构建。其他功能在 Cargo.toml
和本文件的其余部分中描述。
命令
大多数 fidou密钥管理器
命令(除 info
和 factory-reset
外)将作用于第一个 兼容 的验证器,该验证器
- 位于连接的NFC读取器的范围内
- 在已连接的设备上按下按钮
- 在
fidou密钥管理器
运行时连接
这应该可以相当可靠地减轻意外或非故意的选择,但在运行 fidou密钥管理器
时,最好只将 一个 验证器连接到您的计算机。
有关以下命令的更多信息,可以通过运行 fidou-key-manager --help
或 fidou-key-manager [command] --help
查看。除非以下指定,所有命令都需要至少支持 CTAP 2.0 的验证器。
命令 | 描述 | 要求 |
---|---|---|
info |
获取连接验证器的信息 | |
selection |
在连接验证器上请求用户存在 | |
set-pin |
在尚未设置PIN的验证器上设置PIN | |
change-pin |
更改已设置PIN码的验证器的PIN码 | |
出厂重置 |
将验证器重置为出厂默认设置,删除所有密钥材料 | |
启用企业认证 |
启用企业认证功能 | CTAP 2.1 |
设置PIN策略 |
设置最小PIN长度策略,或在下次使用前强制更改PIN码 | CTAP 2.1 |
切换始终用户验证 |
切换始终要求用户验证功能 | CTAP 2.1 |
生物信息 |
显示验证器指纹传感器的信息 | CTAP 2.1-PRE,指纹传感器 |
列出指纹 |
列出注册的指纹 | CTAP 2.1-PRE,指纹传感器 |
注册指纹 |
注册新的指纹 | CTAP 2.1-PRE,指纹传感器 |
重命名指纹 |
重命名注册的指纹 | CTAP 2.1-PRE,指纹传感器 |
删除指纹 |
删除注册的指纹 | CTAP 2.1-PRE,指纹传感器 |
获取凭证元数据 |
获取可发现凭证存储的元数据 | CTAP 2.1-PRE,凭证管理 |
列出凭证 |
列出可发现的凭证 | CTAP 2.1-PRE,凭证管理 |
删除凭证 |
删除可发现的凭证 | CTAP 2.1-PRE,凭证管理 |
更新凭证用户 |
更新可发现凭证的用户信息 | CTAP 2.1,凭证管理 |
厂商特定命令
警告:出于安全考虑,在使用任何厂商特定命令时,请确保您仅连接了该厂商的安全密钥(密钥),即使是良性的。
在CTAP 2协议中,厂商特定命令ID在不同的厂商上可能有不同的含义(确实如此!)——一个厂商可能将某个ID用作安全操作(例如“获取信息”),但另一个厂商可能使用相同的ID来启动固件更新、更改密钥的运行模式或执行某些可能破坏性的操作。
对于需要向安全密钥发送多个命令的操作,如果密钥报告不支持其中一个命令或返回了意外的值,此工具将尝试提前停止。
SoloKey 2 / Trussed
提示:此功能仅在
fido-key-manager
构建时带有--features solokey
时可用。
SoloKey 2 / Trussed命令目前仅通过USB HID支持。未来可能添加NFC支持,但我们遇到了许多与SoloKey和Trussed设备通过NFC通信的问题,这使事情变得困难。
命令 | 描述 |
---|---|
solo-key-info |
获取所有连接的SoloKey的唯一ID、固件版本和安全启动状态 |
solo-key-random |
从SoloKey获取一些随机字节 |
YubiKey
提示:此功能仅在
fido-key-manager
构建时带有--features yubikey
时可用。
此功能仅支持通过USB HID和CTAP 2.0接口(FIDO2)启用YubiKey 5系列和Yubico安全密钥设备。未来可能添加NFC支持。
不计划支持YubiKey 4及更早版本——它们不支持CTAP 2.0,使用不同的配置格式和协议,并且一些固件版本报告了错误数据。
命令 | 描述 |
---|---|
yubikey-get-config |
获取连接的YubiKey的设备信息、固件版本和接口配置 |
平台特定说明
蓝牙默认禁用,因为它在macOS以外的设备上不可靠,并且容易意外选择附近的设备。可以通过--features bluetooth
启用。
Linux
-
蓝牙支持并不特别可靠,在使用此工具之前可能需要预先配对。
-
NFC支持需要PC/SC Lite和为您的NFC收发器(读卡器)提供的PC/SC初始化器(驱动程序)。
如果您使用的是带NXP PN53x系列芯片组的收发器(例如:ACS ACR122、Sony PaSoRi),则需要阻止
pn533
和pn533_usb
内核模块(这些模块与其他所有NFC软件不兼容所有其他NFC软件)加载。echo "blacklist pn533" | sudo tee -a /etc/modprobe.d/nfc.conf echo "blacklist pn533_usb" | sudo tee -a /etc/modprobe.d/nfc.conf sudo modprobe -r pn533 sudo modprobe -r pn533_usb
根据您的内核版本,这些
modprobe -r
命令中有一个将失败。最后,拔掉并重新插上收发器。
如果重启计算机后问题仍然存在,您可能还需要重新构建initrd来获取上述
blacklist
条目,然后再次重启。 -
USB支持需要
libudev
和适当的权限。systemd (udev) v252及更高版本自动标记USB HID FIDO令牌并根据
0xf1d0
用法页面设置权限,这应该适用于任何FIDO合规的验证器。较旧版本的systemd将需要“U2F规则”软件包(例如:
libu2f-udev
)。但是,这些规则与使用已知USB制造商和产品ID的FIDO验证器匹配,这可能会为新或特殊验证器带来问题。
macOS
-
蓝牙支持相当可靠,但自动配对可能会允许附近的恶意设备通过蓝牙对您的计算机进行长期跟踪。
无法使用
System Settings
配对蓝牙验证器,而是需要程序为您配对(webauthn-authenticator-rs
将为您完成)。但是,它将尝试配对附近的任何验证器,并且某些验证器在使用后可能会保持在线几分钟。 -
NFC应该“正常工作”,前提是您已经为您的收发器安装了PC/SC初始化器(驱动程序)(如果它不支持
libccid
)。macOS倾向于通过选择PIV小程序来“介入”独家连接,这可能会对某些密钥的固件造成问题,尤其是如果它们支持PIV。
-
USB应该“正常工作”。
Windows
重要:此工具仅在64位平台(arm64
和x86_64
)上的Windows 10和11的当前构建上进行了测试。此工具(有意)不支持较旧的Windows版本,并在32位系统上未经测试(2023年,快点吧)。
Windows 10版本1903及更高版本(以及Windows 11)阻止直接与FIDO验证器通信(或隐藏USB设备),因此此工具必须以Administrator
身份运行。
此工具已配置为以管理员运行清单运行,有一些注意事项
cargo run
无法运行此程序- 如果需要提升权限,它不会在您的当前控制台窗口中显示工具的输出
始终从作为管理员运行的控制台运行此工具。
您可以在构建时禁用提升权限清单:
$Env:RUSTFLAGS="--cfg disable_windows_manifest"
cargo build --bin fido-key-manager
但是,程序可能无法再使用。
只要您以管理员身份运行fido-key-manager
-
蓝牙支持需要在
Settings
中预先配对,并且并不特别可靠。 -
NFC支持应该“正常工作”,前提是您的收发器支持PC/SC API。
-
USB支持应该“正常工作”。
依赖关系
~18–50MB
~803K SLoC