Security
Encrypt locally, minimize what the relay can know.
The finance planner uses browser cryptography for its local vault. Optional device sync moves that encrypted vault between trusted devices without giving the relay the vault passphrase.
Security model publishedLocal vault
| Control | Current design |
|---|---|
| Vault encryption | AES-GCM with a 256-bit key. |
| Passphrase derivation | PBKDF2-HMAC-SHA-256 with a per-vault random salt and 600,000 iterations. |
| Persistent storage | Encrypted vault envelope in IndexedDB rather than plaintext financial JSON. |
| Unlocked state | Decrypted finance state and derived key are held in page memory while the vault is unlocked. |
| Automatic lock | The planner locks after inactivity and can be locked manually. |
Device pairing and sync
The QR carries opaque pairing capability data, not the vault passphrase or readable financial information. Pairings are short-lived and intended to be single-use.
The relay authorization token is separate from the finance vault passphrase. Possession of a sync token does not by itself decrypt the finance vault.
The relay stores the already-encrypted vault envelope plus technical metadata such as revision and opaque device identifiers.
Revision checks are used so two devices changing the vault do not silently overwrite one another with a last-writer-wins assumption.
When a trusted device is already unlocked, newer encrypted vault data can be decrypted locally with the key already held in that device’s page memory and reflected in the UI without sending the key or passphrase to the relay.