TrustVault supports biometric authentication using WebAuthn/FIDO2 standard. This allows you to unlock your vault using:
- Touch ID (macOS)
- Face ID (iOS/iPadOS)
- Windows Hello (Windows)
- Android Biometric (Android)
- Hardware Security Keys (YubiKey, Titan Key)
CRITICAL: WebAuthn requires HTTPS or localhost to work.
npm run dev:httpsThen access: https://localhost:3000
npm run devThen access: http://localhost:3000 (NOT http://127.0.0.1:3000)
- ✅ Chrome 67+ (macOS, Windows, Android)
- ✅ Safari 13+ (macOS, iOS)
- ✅ Firefox 60+ (macOS, Windows)
- ✅ Edge 18+ (Windows)
- Sign up with email and master password
- Log in with your master password
- Click your profile/avatar → Settings
- Scroll to Biometric Authentication section
- Click "Manage Biometric Devices"
- Click "Register New Device"
- Follow your device's biometric prompt:
- Mac: Touch ID sensor or watch
- iPhone/iPad: Face ID or Touch ID
- Windows: Windows Hello (face/fingerprint/PIN)
- Android: Fingerprint or face unlock
- Device appears in "Registered Devices" list
- Shows device name, registration date, last used
- Sign out
- On login page, click Biometric Login button (fingerprint icon)
- Complete biometric prompt
- Vault unlocks without typing password
Cause: Not using HTTPS or proper localhost configuration
Solution:
- Stop dev server (
Ctrl+C) - Run
npm run dev:https - Access
https://localhost:3000(accept self-signed certificate warning) - Try registering again
Cause: Device doesn't support platform authenticator
Solution:
- Verify your device has biometric hardware (Touch ID, Face ID, fingerprint reader)
- Enable biometric unlock in system settings
- Try a hardware security key (YubiKey) instead
Cause: Dev server error or build cache issue
Solution:
- Clear browser cache
- Hard refresh (
Cmd+Shift+RorCtrl+Shift+R) - Restart dev server
- Clear
node_modules/.vitecache
Cause: Trying to register the same device twice
Solution:
- Each physical device can only be registered once
- Remove the existing credential first, then re-register
- Or use a different device
Cause: Browser blocked the WebAuthn prompt
Solution:
- Check browser console for errors
- Ensure site permissions allow biometric access
- Try different browser
- Verify HTTPS or localhost URL
- Biometric is for convenience, not primary security
- Master password still needed for:
- Initial account setup
- Changing settings
- Exporting vault
- Account recovery
- Each device creates a unique cryptographic key pair
- Private key never leaves your device
- Public key stored in TrustVault database
- Credentials are NOT synced between devices
- You can register multiple devices (laptop, phone, tablet)
- Each shows in "Registered Devices" with:
- Device name
- Registration date
- Last used timestamp
- Each authentication increments a counter
- Prevents cloned authenticators
- If counter doesn't increase, authentication fails
- Click trash icon next to device in "Registered Devices"
- Immediately revokes that device's access
- Device can be re-registered later
- YubiKey 5 Series (NFC, USB-A, USB-C)
- YubiKey Bio (fingerprint)
- Google Titan Security Key
- Feitian ePass FIDO keys
- Any FIDO2/WebAuthn compatible key
- Click "Register New Device"
- Insert key when prompted
- Touch gold disk on YubiKey (or button on other keys)
- Device name shows as "Biometric Device" (rename recommended)
- Biometric login → Insert key → Touch button
- Works across all devices (cross-platform)
- No batteries needed
- Extremely secure (FIPS 140-2 Level 2 on YubiKey 5 FIPS)
| Platform | Authenticator Type | Supported |
|---|---|---|
| macOS (Touch ID) | Platform | ✅ |
| macOS (Apple Watch) | Platform | ✅ |
| iOS (Face ID) | Platform | ✅ |
| iOS (Touch ID) | Platform | ✅ |
| iPadOS (Face ID/Touch ID) | Platform | ✅ |
| Windows (Hello Face) | Platform | ✅ |
| Windows (Hello Fingerprint) | Platform | ✅ |
| Windows (Hello PIN) | Platform | ✅ |
| Android (Fingerprint) | Platform | ✅ |
| Android (Face Unlock) | Platform | ✅ |
| YubiKey (USB/NFC) | Cross-platform | ✅ |
| Titan Key | Cross-platform | ✅ |
| Feitian ePass | Cross-platform | ✅ |
- Public key (base64 encoded)
- Credential ID (random identifier)
- Counter (for replay protection)
- Device name (user-provided or auto-detected)
- Timestamps (created, last used)
- ❌ Biometric data (fingerprints, face scans)
- ❌ Private keys (stays on device)
- ❌ Master password (only scrypt hash stored)
- ❌ Vault keys in plaintext
- WebAuthn verifies domain origin
- Prevents phishing attacks
- Credential only works on registered domain
- TrustVault checks
window.location.hostname
Edit src/data/repositories/UserRepositoryImpl.ts:
const rpId = 'yourdomain.com'; // Must match actual domainEdit src/core/auth/webauthn.ts:
timeout: 60000, // 60 seconds (adjust as needed)Current setting: 'required' (always asks for biometric)
Options: 'required', 'preferred', 'discouraged'
Last Updated: October 25, 2025
TrustVault Version: 1.0.0