Security
Encryption
Local file exports can be sealed on your device with AES-256-GCM before you save them. Cloud sync uses compression only — not encryption.
Overview
- Local export (with password): AES-256-GCM authenticated encryption
- Key derivation: PBKDF2-HMAC-SHA256, 120,000 iterations
- Salt: 128-bit random, per backup
- Nonce (IV): 96-bit random, per backup
- Compression: gzip of JSON before encryption
- Cloud sync: gzip only (
enc=none) — not encrypted
AES-256-GCM
AES-256 is the symmetric cipher used for local backup files when you set a password. GCM adds integrity: if ciphertext is tampered with, decryption fails instead of returning corrupted data.
Key derivation
Your backup password is never stored in the export file. PBKDF2-HMAC-SHA256 stretches the password with the per-backup salt to derive a 256-bit AES key. 120,000 iterations slow brute-force attempts on stolen backup files.
Cloud sync vs local export
Cloud sync uploads gzip-compressed room JSON for multi-device convenience. That payload is readable by anyone with your Room ID and access to the sync service. Use a password-protected local export when you need an encrypted offline backup.
Backup password on device
When you set a backup password in the app, it is stored sealed in Android Keystore (AES-GCM) so exports can be re-encrypted without prompting every time. Forgetting the password means encrypted backups cannot be opened — there is no recovery.