
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

2FAK Programmable USB and 2-Factor Authentication Key
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.
Open-source USB hardware — a FIDO2 / WebAuthn security key, and a programmable USB dongle.
by muru.global
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)
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.
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.
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.
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):
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 typeAdd 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.
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.
Wire the ST-Link to the board (see the pin summary):
| ST-Link | 2FAK pad |
|---|---|
| SWDIO | PA13 |
| SWCLK | PA14 |
| GND | GND |
| 3.3V | 3V3 |
Hold the pogo pins against the pads, or solder short male-to-male wires to them.
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).
Flash it with STM32CubeProgrammer (ST-Link):
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).
![]() Schematic (V1C) | ![]() PCB layout — X-ray view (V1C) |
| MCU | STM32L442KCU6 — Arm Cortex-M4F, 80 MHz, UFQFPN-32; 256 KB flash / 64 KB SRAM |
| Secure element | Microchip ATECC608B |
| Interface | USB 2.0 Full-Speed, USB-A male blade (no cable) |
| Protocols | FIDO2 / WebAuthn, CTAP2.0 / 2.1 / 2.3 |
| USB ID | 0x1209 / 0x2FA2 (pid.codes) |
| Controls | Tactile touch button + status LED |
| Power | USB bus-powered, ~30 mA, no battery |
| Size | ~48 × 21 mm |
Notice: SWD is closed in units sold as 2FAK Authentication Key.
| Function | Pin |
|---|---|
| Button | PA0 |
| Status LED | PB3 |
| USB D- / D+ | PA11 / PA12 |
| SWD (SWDIO/SWCLK) | PA13 / PA14 |
| I2C to ATECC (SCL/SDA) | PB6 / PB7 |
| BOOT0 | PH3 |
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.
Each firmware directory is self-contained. On Windows with the STM32CubeIDE toolchain, from Git Bash:
cd "Firmware/Resident CTAP2.3"
bash build.sh # production-style buildBuild switches (environment variables) are documented in build.sh. Artifacts land in
prebuilt/ and are not committed (see Security below).
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.
Community/self-tested results. "not tested" simply means we haven't checked it yet.
| Platform | 2FAK Non-Resident | 2FAK Resident |
|---|---|---|
| confirmed | confirmed | |
| Microsoft | not supported | confirmed |
| Apple ID | not supported* | not supported* |
| Amazon | not supported | confirmed |
| Facebook / Meta | not tested | not tested |
| X | not tested | not tested |
| GitLab | not supported | confirmed |
| AWS (IAM / root) | unknown error* | unknown error* |
| Cloudflare | confirmed | confirmed |
| Okta | not tested | not tested |
| Bitwarden | not tested | not tested |
| 1Password | not tested | not tested |
| PayPal | not tested | not tested |
| Stripe | not supported | confirmed |
| Coinbase | not tested | not tested |
| Kraken | not tested | not tested |
| Binance | not tested | not tested |
| Dropbox | confirmed | confirmed |
| Proton (Mail) | confirmed | confirmed |
| Fastmail | confirmed | confirmed |
| Nextcloud | not tested | not tested |
| Discord | confirmed | confirmed |
| Salesforce | not tested | not tested |
* Apple ID and AWS entries reflect platform-side behaviour we're still investigating.
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).
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).
Firmware/Resident CTAP2.3Created by @papathought (muru.global).
Licensed under Apache-2.0. See LICENSE-APACHE for the full license
text and NOTICE for third-party attribution.
| Qty | Value | Footprint | References |
|---|---|---|---|
| 5 | 100nF | Capacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolder | C3, C4, C5, C6, C8 |
| 5 | PinHeader_1x01_P2.00mm_Vertical | Connector_PinHeader_2.00mm:PinHeader_1x01_P2.00mm_Vertical | 3V, CLK, DI, GND, RST |
| 2 | 10K | Resistor_SMD:R_0805_2012Metric | R2, R3 |
| 2 | 1uF | Capacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolder | C2, C7 |
| 2 | 4.7K | Resistor_SMD:R_0805_2012Metric | R4, R5 |
| 1 | 330 | Resistor_SMD:R_0805_2012Metric | R1 |
| 1 | 4.7uF | Capacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolder | C1 |
| 1 | AP2112K‑3.3 | Package_TO_SOT_SMD:SOT-23-5 | U3 |
| 1 | ATECC608B-SSHDA | Package_SO:SOIC-8_3.9x4.9mm_P1.27mm | U2 |
| 1 | FerriteBead | Resistor_SMD:R_0805_2012Metric | FB1 |
| 1 | LED | LED_SMD:LED_0805_2012Metric | D1 |
| 1 | Push Button | Button_Switch_SMD:SW_Push_1P1T_XKB_TS-1187A | SW1 |
| 1 | STM32L432KCU6 | STM32L432KCU6:QFN50P500X500X60-33N | U4 |
| 1 | USBLC6-2SC6 | Package_TO_SOT_SMD:SOT-23-6 | U1 |
| 1 | USB_A_PCB_Edge_receptacle | PCB Edge Connectors:USB_A_PCB_Edge_receptacle | J1 |
It measures 45.1 × 20.8 mm and has 2 copper layers, 1.69 mm thick.
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.
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.
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).

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

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

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…

joelguittet/mender-shield
The Mender Shield illustrates the capability to run a Mender client on heterogeneous platforms


Kampi/IoT-Gateway
Open-Source Zigbee, Thread, wM-Bus, LoRa, LoRaWAN gateway for Home Assistant.


HarveyBates/Open-JIP
An open-source Arduino based chlorophyll fluorometer for quantifying photosynthesis in photosynthetic organisms.