Skip to content

Security Model

linggameidianza edited this page Oct 18, 2026 · 1 revision

Security Model

SecureVault layers several protections so your secrets stay safe on the device.

Vault encryption (passwords & notes)

Passwords and note contents are encrypted with AES-256-GCM using a key in the Android Keystore. The key is bound to user authentication (setUserAuthenticationRequired), so it can only be used after you verify with a strong biometric or your device screen lock. Unlocking the app is therefore a cryptographic gate, not just a UI screen. The key material never leaves the Keystore.

Database encryption (metadata)

The entire Room database is encrypted with SQLCipher, keyed from a dedicated Keystore key. This protects metadata (account titles, usernames, URLs, tasks) from being read out of a raw database file. This database key is not auth-bound, so background features (such as scheduled task reminders after a reboot) can still run, while the sensitive password/note columns remain protected by the auth-bound key above.

App lock

  • Unlock with a strong biometric (fingerprint/face) or the device screen lock (PIN/pattern/password).
  • The app locks automatically after 30 seconds in the background; you can also lock it manually from Settings.
  • There is no separate app PIN — the device authentication is what releases the vault key.

Backup encryption

Backups are encrypted with a password you choose, using PBKDF2-HMAC-SHA256 (210,000 iterations) to derive a key and AES-256-GCM to encrypt the data. See Backup and Restore.

Other hardening

  • FLAG_SECURE blocks screenshots and screen recording.
  • Android's own backup is disabled (allowBackup=false).
  • Release builds are signed and R8-optimized.
  • No analytics, ads, or trackers. The only network call is the breach check.

Threat-model notes

  • Your data is tied to the device's Keystore keys. Moving to a new phone or doing a factory reset requires Backup → Restore.
  • A lost backup password cannot be recovered; the backup file cannot be opened without it.

Clone this wiki locally