Crates.io | fido-key-manager |
lib.rs | fido-key-manager |
version | 0.5.0 |
source | src |
created_at | 2024-04-28 04:16:13.53591 |
updated_at | 2024-04-28 04:16:13.53591 |
description | Management CLI for FIDO/CTAP 2.x authenticators |
homepage | |
repository | https://github.com/kanidm/webauthn-rs/ |
max_upload_size | |
id | 1222995 |
size | 103,941 |
fido-key-manager
is a command line tool for managing and configuring FIDO/CTAP
2-compatible authenticators (security keys), based on
the kanidm webauthn-authenticator-rs library.
Important: FIDO 1-only (U2F) tokens are not supported by this tool.
First, you'll need to install OpenSSL's headers and libraries.
# Build fido-key-manager
cargo build --bin fido-key-manager
# Run fido-key-manager
./target/debug/fido-key-manager --help
On 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
By default, Cargo will build fido-key-manager
with the nfc
and usb
features. Additional features are described in Cargo.toml
and in the
remainder of this document.
Most fido-key-manager
commands (except info
and factory-reset
) will
operate on the first compatible authenticator which:
fido-key-manager
is runningThis should fairly reliably mitigate accidental or unintentional selection, but
it's a good idea to have only one authenticator connected to your computer
when running fido-key-manager
.
More information about the commands listed below can be seen by running
fido-key-manager --help
or fido-key-manager [command] --help
. Unless
otherwise specified below, all commands require an authenticator which supports
at least CTAP 2.0.
Command | Description | Requirements |
---|
info
| get information about connected authenticators
selection
| request user presence on a connected authenticator
set-pin
| sets a PIN on an authenticator which doesn't already have a PIN set
change-pin
| changes a PIN on an authenticator which has a PIN set
factory-reset
| resets an authenticator to factory defaults, deleting all key material
enable-enterprise-attestation
| enables the Enterprise Attestation feature | CTAP 2.1
set-pin-policy
| set a Minimum PIN Length policy, or force a PIN change before next use | CTAP 2.1
toggle-always-uv
| toggles the Always Require User Verification feature | CTAP 2.1
bio-info
| shows information about an authenticator's fingerprint sensor | CTAP 2.1-PRE, fingerprint sensor
list-fingerprints
| lists enrolled fingerprints | CTAP 2.1-PRE, fingerprint sensor
enroll-fingerprint
| enroll a new fingerprint | CTAP 2.1-PRE, fingerprint sensor
rename-fingerprint
| renames an enrolled fingerprint | CTAP 2.1-PRE, fingerprint sensor
remove-fingerprint
| removes an enrolled fingerprint | CTAP 2.1-PRE, fingerprint sensor
get-credential-metadata
| gets discoverable credential storage metadata | CTAP 2.1-PRE, credential management
list-credentials
| lists discoverable credentials | CTAP 2.1-PRE, credential management
delete-credential
| deletes a discoverable credential | CTAP 2.1-PRE, credential management
update-credential-user
| updates user information for a discoverable credential | CTAP 2.1, credential management
Warning: for safety, ensure that you only have security key(s) from that vendor connected to your computer when using any vendor-specific command, even benign ones.
In the CTAP 2 protocol, vendor-specific command IDs can (and do!) have different meanings on different vendors – one vendor may use a certain ID as a safe operation (such as "get info"), but another vendor might use the same ID to start firmware updates, change the key's operating mode or perform some potentially-destructive operation.
For operations that require multiple commands be sent to a security key, this tool will attempt to stop early if a key reports that it does not support one of the commands, or returns an unexpected value.
Tip: this functionality is only available when
fido-key-manager
is built with--features solokey
.
SoloKey 2 / Trussed commands are currently only supported over USB HID. NFC support may be added in future, but we have encountered many problems communicating with SoloKey and Trussed devices at all over NFC, which has made things difficult.
Command | Description |
---|
solo-key-info
| get all connected SoloKeys' unique ID, firmware version and secure boot status
solo-key-random
| get some random bytes from a SoloKey
Tip: this functionality is only available when
fido-key-manager
is built with--features yubikey
.
This only supports YubiKey 5 series and Security Key by Yubico devices via USB HID with the CTAP 2.0 interface (FIDO2) enabled. NFC support may be added in future.
YubiKey 4 and earlier support is not planned - they do not support CTAP 2.0, they use a different config format and protocol, and some firmware versions report bogus data.
Command | Description |
---|
yubikey-get-config
| gets a connected YubiKey's device info, firmware version and interface configuration
Bluetooth is currently disabled by default, as it's not particularly reliable on
anything but macOS, and can easily accidentally select nearby devices. It can be
enabled with --features bluetooth
.
Bluetooth support isn't particularly reliable, and may require pairing in advance of using this tool.
NFC support requires PC/SC Lite, and a PC/SC initiator (driver) for your NFC transceiver (reader).
If you're using a transceiver with an NXP PN53x-series chipset (eg: ACS
ACR122, Sony PaSoRi), you will need to block the pn533
and pn533_usb
kernel modules (which are incompatible all other NFC software)
from loading:
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
One of those modprobe -r
commands will fail, depending on your kernel
version.
Finally, unplug and replug the transceiver.
If issues return after you've rebooted your computer, you may also need to
rebuild your initrd to pick up the blacklist
entries above, and then reboot
again.
USB support requires libudev
and appropriate permissions.
systemd (udev) v252 and later
automatically tag USB HID FIDO tokens and set permissions
based on the 0xf1d0
usage page, which should work with any
FIDO-compliant authenticator.
Systems with older versions of systemd will need a "U2F rules" package
(eg: libu2f-udev
). But these match FIDO authenticators using a list of known
USB manufacturer and product IDs, which can be a problem for new or esoteric
authenticators.
Bluetooth support works fairly reliably, but automatic pairing could allow a nearby malicious device could open your computer up to long-term tracking over Bluetooth.
It is not possible to pair a Bluetooth authenticator using System Settings
,
and instead programs need to pair it for you (which
webauthn-authenticator-rs
will do for you). However, it will try to pair
any nearby authenticator, and some authenticators will stay online for
several minutes after use.
NFC should "just work", provided you've installed a PC/SC initiator
(driver) for your transciever (if it is not supported by libccid
).
macOS tends to "butt in" on exclusive connections by selecting the PIV applet, which can cause issues for some keys' firmware, especially if they support PIV.
USB should "just work".
Important: This tool has only been tested with the current builds of
Windows 10 and 11 on 64-bit platforms (arm64
and x86_64
). This tool
(intentionally) does not support older versions of Windows, and is untested on
32-bit systems (it's 2023, come on).
Windows 10 build 1903 and later (as well as Windows 11) block direct
communication with FIDO authenticators (or otherwise hide the USB devices), so
this tool must be run as Administrator
.
This tool has been configured with a manifest to run as Administrator, which has some caveats:
cargo run
will not be able to run this programAlways run this tool from within a terminal running as Administrator.
You can disable the elevation manifest at build time with:
$Env:RUSTFLAGS="--cfg disable_windows_manifest"
cargo build --bin fido-key-manager
But the program may not be usable anymore.
As long as you're running fido-key-manager
as Administrator:
Bluetooth support requires pairing in advance in Settings
, and is not
particularly reliable.
NFC support should "just work", provided your transceiver supports the PC/SC API.
USB support should "just work".