kkeyroost

Learn · resetting

Resetting a key, safely

A reset gives you a clean slate — and is irreversible. Here's what each applet's reset actually erases, and the checklist to run first.

What a reset does

Each applet resets independently — wiping the FIDO function doesn't touch OATH, and so on. In every case the point is the same: keys and credentials are destroyed, not recoverable. Because the secrets only ever lived on the device, there is no backup to restore from unless you made one.

A whole-key reset is a sweep of independent steps, not a single atomic act. Each applet that completes comes back in factory condition, and every step reports its own outcome — so a run can legitimately end with some applets wiped, one failed, and the key still needing attention. Read the report; don't assume a clean slate because the command finished.

Before you reset — the checklist

  1. Have another way in. A second registered key, or current recovery codes, for every account this key unlocks. Verify it works before wiping.
  2. Re-derive what you'll re-add. Make sure you can re-enroll OATH seeds and regenerate or re-import OpenPGP/PIV keys.
  3. Decryption keys are special. Data encrypted to an OpenPGP encryption key or PIV key-management slot can't be read after the key is gone — decrypt or re-key it first.
  4. Then reset, set a fresh PIN, and re-register before relying on it.
There is no undo

A reset can't be reversed and the destroyed keys can't be regenerated from the device. When in doubt, stop and confirm your recovery path first.

How keyroost treats resets

k

A reset never guesses which key it is aimed at. With one key connected it uses that key. With several, a terminal shows a numbered list to pick from; a script is refused with the --device value for each key. --reader or --path together with --device is rejected, since they can name different keys. Before wiping, keyroost names the key and asks y/N (factory-reset asks you to type reset); a script must add --yes instead. Reset support spans the FIDO2, OATH, OpenPGP, PIV, Token2 on-device OTP, and Molto2 applets; read-only inspection (list, fido info, piv info) never changes anything and never needs a PIN.

Resetting a whole key at once

One command wipes every resettable applet the key exposes, in order — OATH, OpenPGP, Token2 on-device OTP, PIV, then FIDO2 last, because it ends with a ceremony:

keyroostctl factory-reset                       # asks you to type "reset"
keyroostctl factory-reset --device my-key --yes  # in a script

The card applets need nothing from you, except that some keys (a Nitrokey 3) ask for a touch to reset OATH and the Token2 OTP step waits for a confirming button press; keyroost says to touch the key during those steps, in the CLI and on the app's Factory reset card. What the FIDO2 step asks for depends on the device's shape. A USB key is asked to be unplugged and plugged back in within 60 seconds — keyroost notices the replug on its own, no Enter needed — and then touched. keyroost records the key's identity before the sweep starts and verifies the key that comes back after the replug is the one you confirmed. A key that exposes no serial can only be reset while it is the only device connected; otherwise the reset is refused before anything is wiped, naming the devices to unplug. If no replug is seen, nothing is sent and the step is reported as skipped. A card in a smart-card reader has nothing to unplug and no touch surface, so it is reset in place: keyroost resets the card in the reader (which opens the same brief after-power-up window a replug does) and sends the wipe immediately. The same in-place path is available on its own as keyroostctl fido reset --reader <name>. Each step prints its own result, the command ends with a line like factory reset: 5 wiped, 0 skipped, 0 failed, and it exits nonzero if any step failed or was skipped.

The desktop app offers the same sweep as a Factory reset card on a key's Overview tab, with a live per-step report — including a FIDO2 row — so you can see exactly which applets came back clean and which need another pass.

The Token2 Molto2 is not part of this sweep; it has its own keyroostctl molto reset, which also needs a physical button confirmation on the token. Molto2 →

Authoritative resources

From the command line: see Resetting on the Command line page.