Skip to content

Status

Current release: v0.3.2 (October 2026), a development release: v0.3.0 plus the Windows FIDO2 fix (CTAPHID KEEPALIVE, v0.3.1) and the gpg touch-policy fix (v0.3.2).

What v0.3 is

  • A working FIDO2 / WebAuthn authenticator and OpenPGP card on the TS1302 devkit, in daily use by its author.
  • Hardened against attacks from the host it is plugged into, and against reading secrets out of chip storage (Phase 9, see changelog).
  • Built reproducibly from pinned sources, with host tests, mutation testing and hardware-in-the-loop validation on every milestone (testing).

What v0.3 is not

  • Not a production security key. It uses Tropic Square's public development pairing key; someone holding the dongle can make it sign. See the security model.
  • Not certified (FIDO Alliance, OpenPGP), not independently audited.
  • Not protected against physical attacks on the STM32 (no read-out protection, no secure boot) or on the chip (see the laser fault-injection advisory).
  • Not a finished FIDO 2.1 authenticator: it reports FIDO_2_0.

Compatibility

Area Tested Notes
Board TS1302 with TROPIC01 TR01-C2P-T101 (ACAB); TS1303 with TR01-C2P-T103 (ACAB). Chip application FW 2.0.0 / SPECT 1.0.0 full list in Tested hardware; other boards unsupported; older chip FW must be updated
Host OS NixOS (nixos-26.05) Debian/Ubuntu steps documented, not CI-tested
Host stack GnuPG 2.4, pcsc-lite + patched libccid, OpenSSH via gpg-agent, libfido2 scdaemon with disable-ccid + pcsc-shared
Browsers Firefox, Brave (Linux); a Chromium browser (Chrome or Brave) on Windows 10 and macOS (v0.3.2) Safari untested
Windows 11 OpenPGP card with Gpg4win/Kleopatra; FIDO2 with a PIN in Brave and Settings (v0.3.1) FIDO2 with a PIN fails in v0.3.0 (no KEEPALIVE); see Windows
Windows 10 FIDO2 registration and login with a PIN and touch (v0.3.2, physical laptop) OpenPGP card not tested on Windows 10
macOS FIDO2 registration and login with a PIN and touch (v0.3.2, MacBook) OpenPGP card untested on macOS
Sites webauthn.io, webauthn.me (v0.3); Proton account 2FA (v0.2) attestation none
FIDO2 CTAP 2.0 + CTAP 2.1 credential management, authenticatorConfig, permission tokens EdDSA and ES256; no hmac-secret, credProtect, PIN protocol 2
OpenPGP card 3.4.1 subset: Ed25519 sign/auth, Cv25519 decrypt, PINs, UIF, forcesig no RSA, no key import, no KDF-DO
Capacity 29 FIDO credentials, 3 OpenPGP keys every FIDO credential uses a chip slot

Validation of v0.3.2

Hardware runs on 20 October 2026, on the project's dongle: release firmware.bin sha256 bf3f7feb… and debug 7886f981…, the binaries tagged v0.3.2. The author's runs, not independent ones.

Suite Release Debug
Host tests (17 programs and 2 script tests, sanitizers on), nix flake check pass —
FIDO2 suite validate_fido_m3.py 60/60 60/60
OpenPGP APDU suite validate-openpgp-m4.sh 42/42 42/42
OpenPGP suite validate-openpgp 16/16 16/16
gpg end to end 7/7 7/7
gpg touch and PIN policy by hand: uif 3 off / on, forcesig, touch timeout, PIN again after a replug pass —

Second board, 23 October 2026: TS1303 with TR01-C2P-T103 (chip firmware updated to 2.0.0 / 1.0.0 the same day), the same release binary bf3f7feb…. Release only: FIDO2 60/60, OpenPGP APDU 42/42, OpenPGP 16/16, FIDO2 basic 5/5, gpg end to end 7/7, the gpg checks by hand pass. See Tested hardware.

Other hosts, October 2026, the owner's tests with v0.3.2: on a Windows 10 laptop and on a MacBook, FIDO2 registration and login with a PIN and touch in a Chromium browser (Chrome or Brave). Both recognised the dongle with no driver install and showed it as "nixtropic".

Validation of v0.3.1

Hardware runs on 19 October 2026, on the project's dongle: release firmware.bin sha256 8bea9a51… and debug 1fe4eb65…, the binaries tagged v0.3.1. The author's runs, not independent ones.

Suite Release Debug
Host tests (17 programs and 2 script tests, sanitizers on), nix flake check pass —
FIDO2 suite validate_fido_m3.py 60/60 60/60
OpenPGP APDU suite validate-openpgp-m4.sh 42/42 42/42 ¹
OpenPGP suite validate-openpgp 16/16 16/16 ¹
gpg end to end 7/7 7/7 ¹
Windows 11: FIDO2 registration, login, slow touch, Cancel, PIN change in Settings, with USB captures pass —

¹ Debug build of commit b674924. Commit 25c17fc then added two KEEPALIVE points in FIDO2 PIN code; the FIDO2 suite ran on 25c17fc in both builds. The docs commits after it do not change the binaries.

Validation of v0.3.0

Final acceptance on 18 October 2026, on the project’s dongle, both builds: release firmware.bin sha256 467a2b87… and debug 1a8b7997…, the binaries tagged v0.3.0. These are the author’s hardware-in-the-loop runs, not independent test runs.

Suite Release Debug
Host tests against the simulated chip (15 programs, sanitizers on), nix flake check pass —
FIDO2 suite validate_fido_m3.py 60/60 60/60
OpenPGP APDU suite validate-openpgp-m4.sh (PIN separation, C4, change, Reset Code, decryption-key lifecycle) 42/42 42/42
OpenPGP suite validate-openpgp 16/16 16/16
gpg end to end: generate on a fresh card, sign and verify, wrong PIN refused, decrypt, SSH key via gpg-agent 7/7 7/7
Release surface (no debug symbols in the release image) pass —

Gap: a raw dump of chip data memory on hardware was not done (the release build has no interface for it); the host tests scan every simulated data slot for keys and PINs instead.

Phase history

Phase Result
1–3 TROPIC01 from the STM32; USB stack; composite device
4–6 FIDO2 / WebAuthn on the chip; ClientPIN with MAC-and-Destroy; SW1, Force-UV, credential management
7–8 OpenPGP card over CCID; gpg signing, decryption, SSH; RP compatibility fixes (v0.2)
9 Hardening for v0.3.0: release/debug split, chip-call error handling, FIDO2 fixes, fault-tolerant state and chip-enforced PINs, sealed decryption key
10 Roadmap: PIN-bound signing, own pairing key, STM32 protection

The day-by-day record is the milestone log.