Recovery¶
What to do when the dongle misbehaves, and what each kind of reset actually changes.
Four different operations¶
They touch different things. Pick the smallest one that fixes the problem.
| Operation | Changes | Keeps | Reversible? |
|---|---|---|---|
OpenPGP PW1 change (passwd → 1) |
the user PIN | all keys, including decryption | yes |
| OpenPGP PW1 unblock/reset (Reset Code or Admin PIN) | the user PIN; erases the decryption key | signing and authentication keys, other PINs | no — the decryption key is gone |
OpenPGP factory reset (factory-reset) |
all OpenPGP keys, PINs, cardholder data | FIDO2 state | no |
FIDO reset (fido2-token -R) |
all FIDO credentials and the FIDO PIN | OpenPGP state | no |
| STM32 reflash (DFU) | the firmware on the STM32 | data on the TROPIC01 | yes, flash again |
| TROPIC01 firmware update | the chip's own firmware | data on the TROPIC01 | no, one-way |
Application resets are in card setup; reflashing is in flashing.
The two chips¶
flowchart LR
host["Host PC<br/>browser · gpg · ssh<br/>libfido2 · pcsc-lite"]
subgraph dongle["TS1302 dongle"]
mcu["STM32U535<br/>nixtropic firmware<br/>USB · FIDO2 · OpenPGP · libtropic"]
se["TROPIC01<br/>key slots · M&D slots<br/>data memory · TRNG<br/>chip firmware"]
mcu -- "SPI · encrypted session" --> se
end
host -- USB --> mcu
DFU writes only the STM32's flash; the keys and data on the TROPIC01 survive a reflash. A reflash is not guaranteed harmless to the chip, though: whatever firmware runs on the STM32 afterwards can send any command the chip accepts over its lower protocol layers and, with the public development pairing key, over the encrypted session too. Flash only firmware you built or trust.
Failure modes¶
| Symptom or cause | Recoverable? | How |
|---|---|---|
| STM32 firmware broken or wrong | yes, seconds | reflash |
gpg --card-status: No such device |
yes | after a replug |
| Card reads as damaged after an upgrade | yes, data lost | changelog: upgrading |
| FIDO answers only GetInfo/Reset | yes, data lost | FIDO reset |
| OpenPGP PW1 blocked | yes, decryption key lost | unblock with the Reset Code or Admin PIN |
| OpenPGP PW3 blocked or forgotten | yes, all OpenPGP data lost | factory-reset (works without any PIN) |
| FIDO PIN blocked (8 wrong) | yes, all FIDO data lost | FIDO reset |
| STM32 at RDP level 2 without a pre-set unlock key | no | nixtropic never changes RDP; don't set it |
| TROPIC01 R-config written without an erase first | no, chip in permanent alarm | nixtropic never writes chip configuration |
| TROPIC01 pairing slot SH0 invalidated with no other usable pairing key | no, once every open session has ended | nixtropic never writes or invalidates pairing keys |
A TROPIC01 in ordinary Alarm Mode (a tamper sensor fired) returns to normal after a power cycle; the permanent cases in the table are different.
Reflash in DFU mode¶
- Unplug the dongle, hold SW1, plug it in, release after a second.
lsusb | grep 0483:df11showsSTM Device in DFU Mode.-
Flash:
nix run github:jjacke13/nixtropic#flash-open # nixtropic release nix run github:jjacke13/nixtropic#flash-stock # Tropic Square stock firmware
The dongle restarts into the new firmware.
TROPIC01 firmware¶
Checking the chip's own firmware version is described in flashing; it needs the stock firmware on the dongle. Updating it is not covered by these guides (why).