How It Works
KeyForge uses a 32-byte master seed stored in NVS flash. All credential private keys are derived deterministically:
private_key = HKDF-SHA256(master_seed, credential_id, "keyforge-ec-p256")
This means the same seed + same credential IDs will produce the same keys on any ESP32-S3. Back up your seed once, and you can restore your credentials to any device.
Security Model
| Layer | Protection |
|---|---|
| Secure Boot v2 | Only firmware signed with your RSA-3072 key can run |
| NVS Encryption | Seed and credentials encrypted with eFuse HMAC key |
| eFuse Protection | JTAG disabled, USB-Serial-JTAG disabled, secure download mode |
| Client PIN | ECDH key agreement with AES-256-CBC encrypted PIN exchange |
Getting Started
- Get a Seeed XIAO ESP32-S3
- Clone the repository and build with PlatformIO
- Flash with
keyforge-flash --setup - Set a PIN via your browser and start registering credentials
The device works with any WebAuthn-enabled service: Google, Microsoft, GitHub, GitLab, AWS, Cloudflare, and thousands more.