Encryption model
- envelope_v1 — AES-GCM with per-note keys wrapped via vault_keys, which in turn are derived from Argon2id master keys generated from your password.
- BIP39 recovery phrase — 24 words generated once when the account is created. Without this phrase, recovery is not possible if the password is lost.
- AAD binding — each ciphertext is bound to (tenantId, noteId, vaultId) via Additional Authenticated Data. Substitution attacks (for example, reassigning a note) fail because of an AEAD tag mismatch.
- RLS — PostgreSQL Row-Level Security policies are active (migration 0068). Every query runs within the correct tenant scope. Cross-tenant access is prevented by the database itself; isolation does not depend on the application layer.
Responsible disclosure
Found a security vulnerability? Notify us first, then publish. We will respond within 7 days and coordinate a reasonable disclosure timeline.
Email: mail@tiamat-labs.com
Out of scope
- Social engineering of employees
- Physical security of hosting locations
- DoS / DDoS against staging or production
- Automated scanner reports without reproducible exploits