Skip to the content
PCBKitNew board
2 layers45.1 × 20.8 mm2FAK Programmable, the printed circuit board in 3D

2FAK Programmable

planmarks/2FAK

2FAK Programmable USB and 2-Factor Authentication Key

Size
45.1 × 20.8 mm
Copper layers
2
Thickness
1.69 mm
Parts
26
Nets
37
Pads
95
Tracks, vias
218, 95
Pours
100
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
28 Sep 2026
Updated
26 Oct 2026

Overview

2FAK Programmable is an open-source printed circuit board by planmarks, from the planmarks/2FAK repository on GitHub, published under the Apache-2.0 licence. It is a 2-layer board of 45.1 × 20.8 mm with 26 parts on 37 nets, routed with 218 tracks and 95 vias.

It is built around the STM32L432KCU6, ATECC608B-SSHDA-T and USBLC6-2SC6. Its parts include 8 capacitors, 5 resistors, 4 ICs, 1 diode and 1 connector. It belongs with the STM32 boards of this library.

Main components

3

README

README.md

2FAK

Open-source USB hardware — a FIDO2 / WebAuthn security key, and a programmable USB dongle.

by muru.global

License FIDO2 USB USB ID Open Hardware

2FAK V1C 3D render — front branding and populated back with the USB-A blade

2FAK V1C — the board is the USB-A plug: no cable, no moving connector.


2FAK is a small, affordable, fully open-source USB-A board that comes in two flavours:

  • 2FAK (V1C) — a finished FIDO2 / WebAuthn security key, running the Resident (passkey) firmware. It is the product most people want: phishing-resistant sign-in and passkeys, with a secure element and a locked-down debug port.

  • Programmable 2FAK (V1A / V1B) — the same USB-A board as an open, reflashable dev platform. It ships with ready-made HID Injection and Mouse Jiggler firmware and can be reprogrammed into whatever you like.

  • USB VID/PID: 0x1209 / 0x2FA2 (0x1209 is the pid.codes open-source Vendor ID; PID 0x2FA2 is registered to us)

  • AAGUID: c2aa81f8-352d-56e2-c689-2bfdb5a52ccc

  • Firmware lineage: fork of Nitrokey FIDO2 / SoloKeys solo1 (see NOTICE)

2FAK (V1C) — the security key

The flagship security-key edition. It ships with the ATECC608B secure element populated by default, and all SWD / debug pins are closed (RDP-2 read-out protection), so firmware and secrets cannot be extracted or the chip reflashed over a programmer — updates are delivered as signed images over USB. Runs the Resident (passkey) firmware: FIDO2 / WebAuthn, passkeys, and hardware SSH keys.

2FAK (V1C) comes with a 3D-printed case. The 3D-printable case files are in /3D Printable.

Programmable 2FAK (V1A / V1B)

The same STM32L442 USB-A board with its SWD pins left open for programming and debugging — a blank canvas for makers. It ships with pre-made HID Injection and Mouse Jiggler firmware and can be reflashed over an ST-Link. By default it is sold as bare-bones hardware (no case); a 3D-printed case can be purchased separately, and the 3D-printable enclosure and case files are in /Programmable/3D Printable.

Programmable 2FAK (V1A) render
Programmable 2FAK (V1A).

Getting Started — 2FAK (V1C)

As a security key (websites & apps)

  1. Plug the 2FAK into a USB-A port.
  2. On a site that supports security keys / passkeys, open Settings → Security and choose add a security key or add a passkey.
  3. When prompted, touch the button on the 2FAK (and set/enter a device PIN if the site asks for user verification).
  4. Next time you sign in, select your security key / passkey and touch to confirm.

Works today with Google, Microsoft, Cloudflare, Dropbox, Proton, Fastmail, Discord and more — see Platform compatibility. Tip: register two keys (a primary and a backup) so a lost key never locks you out.

As a hardware SSH key

The Resident firmware doubles as a hardware-backed SSH key — the private key stays on the 2FAK and every connection needs a touch. Both ecdsa-sk (ES256) and ed25519-sk (Ed25519) are supported and tested (locally and against Cloudflare):

bash
ssh-keygen -t ed25519-sk -O resident -O application=ssh:prod -f ~/.ssh/id_ed25519_sk_prod
# or -t ecdsa-sk for the ES256 key type

Add the resulting .pub to your server's ~/.ssh/authorized_keys (or your Git host), then ssh as usual and touch the key. Because the key is resident, you can carry it on the token and pull it onto any machine with ssh-keygen -K. Add -O verify-required to also require the device PIN. Requires OpenSSH 8.2+. Full sysadmin workflow (portable keys, ProxyJump bastions, Ansible, SSH-CA, PIN tiering, Windows, backups) is in Guides/2FAK Resident - Hardware SSH Key Guide.md.

Getting Started — Programmable 2FAK

The programmable board exposes the SWD pads for flashing and debugging with an ST-Link. You connect the ST-Link to the board's SWD pads using pogo pins or male-to-male breadboard / jumper wires.

  1. Wire the ST-Link to the board (see the pin summary):

    ST-Link2FAK pad
    SWDIOPA13
    SWCLKPA14
    GNDGND
    3.3V3V3

    Hold the pogo pins against the pads, or solder short male-to-male wires to them.

  2. Build or grab a firmware. Ready-made HID Injection and Mouse Jiggler images live under /Programmable/Firmware (each has its own build.sh and a prebuilt/ image).

  3. Flash it with STM32CubeProgrammer (ST-Link):

    bash
    STM32_Programmer_CLI -c port=SWD -d "Programmable/Firmware/Mouse Jiggler/prebuilt/<image>.hex" -rst

    (or use st-flash / OpenOCD if you prefer). Unplug the ST-Link and plug the 2FAK into a USB port to run the firmware.

Because the programmable board has open SWD and no secure element, it is intended for maker / DIY use, not as a tamper-resistant security key. For a security key, use 2FAK (V1C).

Hardware

2FAK V1C schematic
Schematic (V1C)
2FAK PCB layout / X-ray view
PCB layout — X-ray view (V1C)

At a glance

MCUSTM32L442KCU6 — Arm Cortex-M4F, 80 MHz, UFQFPN-32; 256 KB flash / 64 KB SRAM
Secure elementMicrochip ATECC608B
InterfaceUSB 2.0 Full-Speed, USB-A male blade (no cable)
ProtocolsFIDO2 / WebAuthn, CTAP2.0 / 2.1 / 2.3
USB ID0x1209 / 0x2FA2 (pid.codes)
ControlsTactile touch button + status LED
PowerUSB bus-powered, ~30 mA, no battery
Size~48 × 21 mm
Full hardware details & pinout
Microcontroller
  • Part: STM32L442KCU6 (Arm Cortex-M4F, up to 80 MHz, UFQFPN-32). Register-compatible with the STM32L432.
  • Memory: 256 KB flash, 64 KB SRAM.
  • On-chip security: true random number generator (TRNG), AES-256 hardware accelerator, and flash read-out protection (RDP) supported in silicon.
  • Clocking: crystal-less USB using the internal HSI48 oscillator with the Clock Recovery System (CRS); no external crystal required.
Secure element
  • Part: Microchip ATECC608B, on the I2C1 bus.
  • Confirmed on hardware at 7-bit I2C address 0x60, Info revision word 0x00006003 (identifies an ATECC608B).
  • Provides tamper-resistant key storage; on fitted units it holds a device root that cannot be read back out of the chip. On boards where it is not fitted, the footprint remains unpopulated.
USB / UI / power / debug
  • USB 2.0 Full-Speed (12 Mbit/s) device; USB-A male contacts integrated into the PCB edge. Dedicated ESD / TVS protection on D+, D- and VBUS.
  • One tactile push button (user presence) and one status LED.
  • USB bus-powered from 5 V, regulated on-board to 3.3 V by an LDO. ~30 mA typical, no battery.
  • SWD debug/programming (SWDIO / SWCLK).

Notice: SWD is closed in units sold as 2FAK Authentication Key.

Pin summary
FunctionPin
ButtonPA0
Status LEDPB3
USB D- / D+PA11 / PA12
SWD (SWDIO/SWCLK)PA13 / PA14
I2C to ATECC (SCL/SDA)PB6 / PB7
BOOT0PH3

Note: PB6 / PB7 are shared between the ATECC I2C bus and an optional debug UART. On the populated (secure-element) boards these pins are used for the I2C bus.

Building

Each firmware directory is self-contained. On Windows with the STM32CubeIDE toolchain, from Git Bash:

bash
cd "Firmware/Resident CTAP2.3"
bash build.sh                    # production-style build

Build switches (environment variables) are documented in build.sh. Artifacts land in prebuilt/ and are not committed (see Security below).

Security

On provisioned units the device root secret lives in the ATECC608B secure element and never leaves it; per-credential keys (ES256, and Ed25519 on the Resident build) are derived on demand from that root and are never stored in MCU flash (derive-and-wrap). The secure-element path is proven on hardware and fails safe — an absent or un-provisioned chip falls back to a software root with no behaviour change. Production units also enable flash read-out protection level 2 (RDP-2), permanently disabling the debug port, plus a verifying bootloader so firmware cannot be extracted or replaced off a locked device (signed USB updates still work).

This is a public repository. It never contains private keys. The following are git-ignored and must exist only on the build/flashing machines:

  • muru attestation private keys (keys/2fak/ca_key.pem, att_key.pem, priv.bin/.hex)
  • the production verifying-bootloader signing key
  • any provisioned *.hex (a provisioned image embeds the attestation private key)

Public certificates (root CA + leaf), the AAGUID, and the metadata statements are published on purpose. Release firmware images are distributed via signed GitHub Releases, not committed to the tree.

Platform compatibility

Community/self-tested results. "not tested" simply means we haven't checked it yet.

Show compatibility matrix
Platform2FAK Non-Resident2FAK Resident
Googleconfirmedconfirmed
Microsoftnot supportedconfirmed
Apple IDnot supported*not supported*
Amazonnot supportedconfirmed
Facebook / Metanot testednot tested
Xnot testednot tested
GitLabnot supportedconfirmed
AWS (IAM / root)unknown error*unknown error*
Cloudflareconfirmedconfirmed
Oktanot testednot tested
Bitwardennot testednot tested
1Passwordnot testednot tested
PayPalnot testednot tested
Stripenot supportedconfirmed
Coinbasenot testednot tested
Krakennot testednot tested
Binancenot testednot tested
Dropboxconfirmedconfirmed
Proton (Mail)confirmedconfirmed
Fastmailconfirmedconfirmed
Nextcloudnot testednot tested
Discordconfirmedconfirmed
Salesforcenot testednot tested

* Apple ID and AWS entries reflect platform-side behaviour we're still investigating.

Other firmware options

The programmable (no-secure-element) board can also run other roles. Ready-made firmware templates — HID Injection and Mouse Jiggler — and project sources are in /Programmable/Firmware; each template has its own build.sh and a prebuilt/ image, and can be reflashed over an ST-Link (see Getting Started — Programmable 2FAK).

Compliance

2FAK is built to the FIDO Alliance Conformance requirements (CTAP2.0 / 2.1 / 2.3, self-test) and is RoHS compliant. The conformance readiness write-ups, the RoHS declaration, and the supporting component test data are in /Compliance (Compliance/FIDO and Compliance/RoHS).

Resources

Credits

Created by @papathought (muru.global).

License

Licensed under Apache-2.0. See LICENSE-APACHE for the full license text and NOTICE for third-party attribution.

Parts

26
QtyValueFootprintReferences
5100nFCapacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolderC3, C4, C5, C6, C8
5PinHeader_1x01_P2.00mm_VerticalConnector_PinHeader_2.00mm:PinHeader_1x01_P2.00mm_Vertical3V, CLK, DI, GND, RST
210KResistor_SMD:R_0805_2012MetricR2, R3
21uFCapacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolderC2, C7
24.7KResistor_SMD:R_0805_2012MetricR4, R5
1330Resistor_SMD:R_0805_2012MetricR1
14.7uFCapacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolderC1
1AP2112K‑3.3Package_TO_SOT_SMD:SOT-23-5U3
1ATECC608B-SSHDAPackage_SO:SOIC-8_3.9x4.9mm_P1.27mmU2
1FerriteBeadResistor_SMD:R_0805_2012MetricFB1
1LEDLED_SMD:LED_0805_2012MetricD1
1Push ButtonButton_Switch_SMD:SW_Push_1P1T_XKB_TS-1187ASW1
1STM32L432KCU6STM32L432KCU6:QFN50P500X500X60-33NU4
1USBLC6-2SC6Package_TO_SOT_SMD:SOT-23-6U1
1USB_A_PCB_Edge_receptaclePCB Edge Connectors:USB_A_PCB_Edge_receptacleJ1

Questions

How big is the 2FAK Programmable PCB?

It measures 45.1 × 20.8 mm and has 2 copper layers, 1.69 mm thick.

What parts does the 2FAK Programmable use?

26 parts, built around the STM32L432KCU6, ATECC608B-SSHDA-T and USBLC6-2SC6. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the 2FAK Programmable KiCad files?

From the planmarks/2FAK repository on GitHub, at the commit this page was made from: the board is Programmable/Hardware/2FAK-Programmable.kicad_pcb and its schematic Hardware/2FA Key.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the 2FAK Programmable design in my own project?

Its repository publishes it under the Apache-2.0 licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).

Similar boards

  • 4 layers92 × 56 mmREIN R1, the printed circuit board in 3D

    REIN R1

    rein-baremetal/REIN_R1_KiCad

    Dual-MCU baremetal embedded development board featuring high-speed QSPI storage, hardware USB hub, and flexible power management. Open for PCB trace routing collaboration

    177 parts2
  • 2 layers21 × 35 mmTinycrypt key, the printed circuit board in 3D

    Tinycrypt key

    nakomis/tinycrypt

    ATtiny85 + ATECC608A crypto experimentation platform — embedded crypto, U2F hardware key, ESP32 integration

    25 partsCC0-1.0
  • 2 layers76.6 × 141.1 mmOniondao badge, the printed circuit board in 3D

    Oniondao badge

    OnionDAO-git/oniondao-badge

    An open-source, hacker-conference-style electronic badge built around the ESP32-S3-WROOM-1-N8R8 (8 MB flash + 8 MB Octal PSRAM), with swappable RF / audio / storage modules, an e-paper (or TFT) display socket, a secure…

    190 parts17
  • 2 layers65 × 59 mmMender shield, the printed circuit board in 3D

    Mender shield

    joelguittet/mender-shield

    The Mender Shield illustrates the capability to run a Mender client on heterogeneous platforms

    54 parts5Apache-2.0
  • 2 layers56.8 × 90 mmAdapter1, the printed circuit board in 3D

    Adapter1

    BBBSnowball/fw16

    E-Paper module for Framework 16

    40 parts3
  • 4 layers204 × 150 mmGateway, the printed circuit board in 3D

    Gateway

    Kampi/IoT-Gateway

    Open-Source Zigbee, Thread, wM-Bus, LoRa, LoRaWAN gateway for Home Assistant.

    319 parts1
  • 4 layers76.2 × 101.6 mmThe badge, the printed circuit board in 3D

    The badge

    MicrochipSecurityFG/Class_HackingTheBadge_2025

    75 parts
  • 2 layers29.1 × 45.1 mmDetect, the printed circuit board in 3D

    Detect

    HarveyBates/Open-JIP

    An open-source Arduino based chlorophyll fluorometer for quantifying photosynthesis in photosynthetic organisms.

    30 parts47