Hardware keys and passkeys

What is supported

Signature scheme 2: WebAuthn / ECDSA P-256. The web wallet can create a key inside a security key (YubiKey and similar FIDO2 keys), a platform authenticator (Touch ID, Windows Hello, Android biometrics) or a phone passkey. The private key never leaves the device and every transaction requires the user's touch or biometric.

How it works on-chain (src/crypto.js verifyWebAuthn, src/tx.js):

Things to know

Ledger and Trezor

Not supported yet, and this is a hard external dependency, not a missing feature flag. A Ledger signs only through an app installed on the device, and no AUREN app exists. Building one means writing and submitting device firmware (C, Ledger SDK) and passing Ledger's review; it cannot be verified without a physical device. WebAuthn gives the same property (key never leaves hardware, user confirmation per transaction) with devices people already own. A Ledger app is on the roadmap for after the transaction format is frozen.

Testing, and what is not covered

test/webauthn.test.js verifies the chain-side logic with real P-256 cryptography and the exact byte formats a browser returns, via a software authenticator: acceptance and execution, rejection when the amount, nonce or chain ID changes, rejection of a signature transplanted from another transaction, rejection without user presence, parity of address derivation between the browser library and the node, and guardian recovery onto a hardware key (old key stops working).

Not covered by automated tests: a physical security key or biometric prompt (a test runner cannot touch a YubiKey), and browser-specific differences. Manual checklist before relying on it:

  1. Open the wallet (website or app) in current Chrome, Edge, Safari or Firefox.
  2. "Hardware key / passkey" → create; the device prompts; the wallet shows an address.
  3. Fund it from the faucet; send a transaction; the device prompts; the transaction confirms.
  4. Set a guardian, and complete a recovery to another key.
  5. Repeat with a second authenticator type (platform vs. USB key).

Edit this page on GitHub