kkeyroost

Learn · Settings

Security policy

Change how a key enforces verification and PINs — always-require-UV, a minimum PIN length, a forced PIN change, and enterprise attestation — over the standard CTAP 2.1 authenticatorConfig command.

What it is

CTAP 2.1 lets a platform change a key's security policy through the authenticatorConfig command. keyroost surfaces four of these operations in the Settings sub-view of the FIDO2 tab, and as keyroostctl commands. Each is authenticated with the device PIN at the moment it runs.

k

Some of these are one-way: a higher minimum PIN length can't be lowered again, and enterprise attestation can't be turned off, without a full reset of the key. keyroost confirms before applying those: the app warns that the change can't be undone without a full reset and applies it only when you press the red Apply button, and the command line asks y/N, naming the key. A script, or a command whose PIN is piped in with --pin stdin, adds --yes instead.

Where to find it

Open the FIDO2 tab and unlock with your PIN. Once unlocked, choose the Settings tab. Unlocking is a key-level action — it gates passkeys, fingerprints, and settings alike — so it lives above the tabs rather than inside any one panel. The Settings tab appears on any CTAP2 key — it also hosts the FIDO2 reset, which every CTAP2 key supports. The policy controls inside it appear only on keys that report authnrCfg, and each one only when the key lists it in getInfo: alwaysUv for Always require user verification, setMinPINLength for the minimum length and a forced PIN change, and ep for enterprise attestation. The CLI refuses a setting the key doesn't offer before it asks for the PIN.

The operations

Always require user verification (alwaysUv). When on, every assertion needs user verification (PIN or biometric), even for services that didn't ask for it. It can be turned on and off again. Whether it survives a key reset is vendor-specific. The CLI has one command for each state, fido config always-uv enable and fido config always-uv disable; each does nothing, and says so, when the key is already in that state. keyroost offers it only on keys that report the alwaysUv option.

Set minimum PIN length. Raises the shortest PIN the key will accept. It can only be increased — never lowered without a reset — and if the current PIN is now too short, the key requires a new one. An optional flag also forces a PIN change. Shown only on keys that list setMinPINLength, as is the next one.

Force PIN change on next use. Flags the key so the next platform interaction must set a new PIN, without otherwise changing the minimum length. Useful before handing a key to someone else.

Enable enterprise attestation. Lets the key provide a vendor attestation that can uniquely identify the individual key, for enterprise registration policies. This is typically one-way. keyroost only shows this control on keys that advertise support (the ep getInfo option); on keys that already have it enabled, the control shows its state instead of an action.

Command line

keyroostctl fido config always-uv enable
keyroostctl fido config always-uv disable
keyroostctl fido pin min-length set --length 6              # asks y/N first
keyroostctl fido pin min-length set --length 8 --force-change
keyroostctl fido pin force-change
keyroostctl fido config attestation enable                  # asks y/N first
keyroostctl fido pin min-length set --length 6 --yes --pin env:KR_PIN   # in a script

Each command asks for the PIN at a hidden prompt; a script passes --pin env:NAME (an environment variable name) or --pin stdin instead. With several keys connected, pick one with --device (or --path). The two one-way commands, fido pin min-length set and fido config attestation enable, ask first in a terminal; in a script they need --yes, and without it they refuse and change nothing.

Cautions

Minimum PIN length and enterprise attestation are one-way — undoing them needs a full reset, which wipes every passkey and the PIN. Test the recoverable operations first (fido config always-uv enable, which fido config always-uv disable undoes, and force PIN change, which clears once a new PIN is set) on a given key before relying on the irreversible ones. keyroost offers only the settings the key lists, and the CLI refuses any other before it asks for the PIN. If the key still rejects a command, keyroost reports the CTAP status with a readable hint.

Authoritative resources

From the command line: see Passkeys (FIDO2) on the Command line page.