Secure by default
Strong encryption is active from the first launch. There is no insecure mode to forget to turn off.
At Cryptiqo, security is a design principle applied from the first line of code — not a layer added later. We favour secure-by-default behaviour, least privilege and a small, transparent attack surface, and we only make claims our documentation supports.
Strong encryption is active from the first launch. There is no insecure mode to forget to turn off.
The app requests only what it genuinely needs: the camera while scanning, and the network only for an optional backup.
No backend servers, no user accounts and no always-on connectivity means far fewer places for things to go wrong.
A deliberately small, reviewed dependency set keeps the supply chain and attack surface manageable.
The building blocks used to keep CardVault data confidential and tamper-evident.
| Purpose | Primitive | Notes |
|---|---|---|
| Symmetric encryption (images, backups, key wrapping) | AES-256-GCM | Authenticated encryption; 96-bit random IV per message; tag verified on decrypt. |
| Passphrase key derivation | Argon2id | Memory-hard, resistant to GPU/ASIC brute force; parameters tunable. |
| KDF fallback | PBKDF2-HMAC-SHA256 | Always available via JCE; high iteration count. |
| Database encryption | SQLCipher (AES-256) | Transparent, page-level encrypted SQLite that enables encrypted querying. |
| Key wrapping | Android Keystore | Hardware-backed where available (StrongBox / TEE); wraps the database key. |
Your passphrase derives a key-encryption key that exists only in memory. A random 256-bit database key is wrapped by an Android Keystore key and stored as ciphertext, and the database itself is encrypted with SQLCipher.
CardVault’s threat model uses the STRIDE methodology. A summary of key threats and mitigations:
Data encrypted at rest; Keystore key bound to device; biometric / passphrase gate.
Database and images are ciphertext; keys live in the Keystore.
Backups are ciphertext; an attacker cannot decrypt without the passphrase.
Zero-knowledge: no keys or plaintext leave the device; there is no server component.
Argon2id memory-hard KDF; the passphrase policy enforces entropy.
GCM authentication tag plus checksum validation reject modified packages.
Honest about limits: a compromised or rooted device with an unlocked session can observe in-memory secrets, and protecting the one-time recovery passphrase is the user’s responsibility. Key escrow beyond the recovery passphrase is intentionally not provided.
AES-256-GCM authenticated encryption for images, backups and key-wrapping payloads; SQLCipher (AES-256) for the database; Argon2id for passphrase key derivation, with PBKDF2-HMAC-SHA256 as a fallback.
The random 256-bit database key is wrapped by an Android Keystore key — hardware-backed via StrongBox or a TEE where available — and stored as ciphertext. The passphrase-derived key exists only in memory for the duration of a session.
No. Keys derive from your passphrase, which never leaves the device and is never stored in plaintext. There is no server component, so there is nothing for a provider to read.
AES-256-GCM provides authenticated encryption, so any modification fails tag verification on decrypt. Backups additionally carry a checksum that is validated before decryption.
A compromised or rooted device with an unlocked session can observe in-memory secrets, and shoulder-surfing of the one-time recovery passphrase is the user’s responsibility. Key escrow beyond the recovery passphrase is intentionally not provided.
CardVault is the first Cryptiqo product — a practical demonstration of privacy-first, security-focused, offline-first software.