Skip to content

Duress PIN / self-destruct

The badge supports an optional duress PIN. When armed, entering it at the unlock screen does not unlock the device: it triggers a full wipe and reboots. To an observer (or a coercer) the entry looks exactly like any other unlock attempt; there is no on-screen, log, or timing tell.

The duress PIN is off by default. Nothing happens until you deliberately set one.

On every unlock attempt the firmware checks the entered PIN against the duress PIN before checking it against the real badge PIN. Because the two are forced to be different (see below), there is no ambiguity:

  • Entered value matches the duress PIN -> self-destruct, then reboot.
  • Entered value matches the badge PIN -> normal unlock.
  • Anything else -> failed attempt (counts against the badge-PIN rate limit).

The self-destruct call does not return; from the user’s point of view the badge simply reboots as if it had been reset.

The duress PIN is configured from the Expert menu:

Tools -> Expert -> Set duress PIN

The setup reuses the PIN-change wizard:

  1. Re-authenticate with your current badge PIN.
  2. Enter the new duress PIN.
  3. Confirm it.

Rules enforced by the firmware:

RuleDetail
Length4-8 digits, digits only (same as the badge PIN)
Must differThe duress PIN must not equal the current badge PIN
Symmetric checkYou also cannot later set a badge PIN equal to the duress PIN
Tamper-boundThe duress state is covered by the slot-0 attestation signature on the PIN record

To disarm it, clear the duress PIN through the same PIN machinery (clearDuressPin), which removes the stored duress hash and salt.

The wipe is complete, but it happens in two stages, so be precise about the mechanism:

  1. Trigger (immediate). selfDestruct() erases the NVS build-profile marker and reboots. It does not itself delete keys or secrets; it removes the marker that tells the boot path the device is provisioned.
  2. Wipe (on next boot). Finding the marker absent, the boot path runs a full factory wipe before the device comes up:
    • NVS partition is erased and re-initialised (wipeNvs).
    • Every TROPIC01 ECC slot (0-31) is deleted.
    • Every TROPIC01 R-Memory slot (0-511) is erased (wipeTropic).

After the wipe completes, the build-profile marker is re-seeded so the device boots fresh with defaults.

In scope of the wipe (everything that lives in NVS or the secure element):

WipedWhere it lives
FIDO2 / U2F credential keysTROPIC01 ECC + R-Memory
GPG / OpenPGP keysTROPIC01 ECC + R-Memory
TOTP seedsTROPIC01 R-Memory
Password-vault entriesTROPIC01 R-Memory
Badge PIN, OpenPGP PINs, duress PINTROPIC01 R-Memory slot 0
Attestation key (ECC slot 0)TROPIC01 ECC
OS settings and module state in NVSNVS partition
PropertyStatus
Duress PIN defaultOff (opt-in)
Length4-8 digits
Must differ from badge PINEnforced both directions
Check orderDuress checked before badge verify
On matchselfDestruct(), no return, reboot
Wipe scopeFull NVS + all TROPIC01 ECC (0-31) and R-Memory (0-511)
Wipe timingTrigger clears marker; wipe runs on next boot
Crash-safetyMarker re-seeded only after wipe completes