Prerequisites

May 7, 2026 ยท View on GitHub

USB Security Dongles

All USB Security dongles used with Heads must support the OpenPGP card applet. FIDO2 and U2F are not used by Heads.

HOTP verification requires a dongle with HOTP support and a compatible firmware version. Without HOTP, Heads falls back to TPMTOTP (smartphone-based).

DongleOpenPGPHOTPNotes
Nitrokey Pro 2YesYesFull support
Nitrokey Storage 2YesYesFull support
Nitrokey 3YesYesFull support; NIST P-256 ECC available
Purism Librem KeyYesYesFull support; rebranded NK Pro
YubiKey 5 SeriesYesNoOpenPGP signing only; no HOTP
Nitrokey Pro (v1, fw < 0.8)YesLimitedOlder firmware may report no HOTP support; test before use

Heads detects dongle branding at runtime via USB VID:PID.

Source of truth for IDs is initrd/etc/dongle-versions.

VID:PIDDongle
20a0:42b2Nitrokey 3
20a0:42d4Canokey (QEMU)
20a0:4108Nitrokey Pro
20a0:4109Nitrokey Storage
316d:4c4bPurism Librem Key
16d0:21dcCanokey
1050:*YubiKey

HOTP vs. TPMTOTP

HOTP (recommended when available):

  • Heads generates HOTP codes and the dongle verifies them automatically.
  • Pass = green LED, fail = red LED and boot halt.
  • Does not require accurate time.

TPMTOTP (smartphone fallback):

  • Heads generates a TOTP code on screen; the user compares it against a phone app (Google Authenticator, FreeOTP+, etc.).
  • Requires correct UTC time set in Options -> Time.
  • Less automated โ€” relies on the user noticing a mismatch.

OS Requirements

  • A dedicated /boot partition (not /boot inside an LVM or btrfs subvolume unless the board config supports it).
  • LUKS-encrypted root (for TPM Disk Unlock Key functionality).

Supported Flashing Methods

See board-specific configs under boards/. Most x86 boards support:

  • External SPI flashing (initial install) via flashprog.
  • Internal flashing (upgrades) via Options -> Flash/Update BIOS for firmware built after November 2023.

Run from Recovery Shell to verify internal flash is unlocked:

flashprog -p internal