Security Transparency
Exactly how Lockbox protects your data. No hand-waving. No "military-grade" nonsense. Just facts.
Encryption algorithms
AES-256-GCM
All data at rest. NIST-approved. Authenticated encryption prevents tampering.
PBKDF2-SHA256
Master password to key. 600,000 iterations via native C++ (OpenSSL). OWASP standard.
HKDF-SHA512
Derives separate keys for vault, sync, and sharing from one master key.
Per-Item Encryption
Every item is encrypted separately with AES-256-GCM under your vault key, each with its own random nonce and authentication tag.
Key hierarchy
↓ PBKDF2-SHA256 (600,000 iterations, native)
Master Key
├─ HKDF → Vault Key → encrypts each item separately
├─ HKDF → Export Key → encrypts backup files
└─ HKDF → Whisper Key → derives sharing keys
Cloud sync deliberately sits outside this hierarchy. Your master key cannot derive it, because every install has its own random PBKDF2 salt, so the same master password produces a different master key on each device. The sync key is derived separately from a sync passphrase you choose, which is why you enter that passphrase once per device.
What leaves your device
| Action | Data sent | Can we read it? |
|---|---|---|
| Normal use | App version only, on launch | So we can warn you if a release needs replacing urgently. No identifier, no vault data. If it fails, the app carries on. |
| Whisper share | Encrypted ciphertext only | No. Key is in URL fragment. |
| Cloud sync (optional) | Encrypted blobs to Lockbox servers, plus routing metadata (anonymous account ID, device ID, item IDs, change times) | No. Encrypted on your device; we hold no keys. |
What is stored on your device
The two apps differ here, and the difference is worth stating plainly.
| Where | Stored unencrypted | Always encrypted |
|---|---|---|
| iPhone and Android app | Item type, dates, and whether you starred it | Everything else, including titles and web addresses. Each item is encrypted separately. |
| Chrome extension | Item title, web address and username | Passwords, secrets, note contents and 2FA seeds |
The extension keeps those three fields readable so the list appears instantly and so it can tell which saved login belongs to the page you are on, without decrypting the whole vault on every keystroke. The practical effect: somebody who can read the files in your browser profile could learn which sites you hold accounts on and the usernames you use there, but not a single password. On the phone app they could not learn even that.
This is a deliberate trade, and we would rather write it down than let you assume the two are identical. If you want the stronger guarantee today, the phone app already provides it.
What we cannot do
Even if compelled by a government, subpoena, or court order, we cannot:
- Read your passwords, notes, or files
- Reset your master password
- Decrypt your cloud sync data
- Read the contents of your Whisper shares
This is not a policy decision. It is a mathematical impossibility. We do not have the keys.
Our security features
Every feature is built with security first. Here is exactly what protects your data.
AES-256-GCM Encryption
What it does: Every item in your vault is encrypted with AES-256-GCM, the same standard used by banks and governments. GCM mode provides authenticated encryption, meaning it both encrypts and verifies that data has not been tampered with.
Why it matters: Even if someone gains access to your device storage, they see only encrypted data. Without your master password, your vault is unreadable.
PBKDF2-SHA256 Key Derivation (600,000 iterations)
What it does: Your master password is transformed into an encryption key using 600,000 rounds of PBKDF2-SHA256. This runs via native C++ (OpenSSL/CommonCrypto) for consistent performance on both iOS and Android.
Why it matters: 600,000 iterations meets the OWASP 2023 standard. Each brute-force guess costs significant computation time, making password cracking impractical.
Per-Item Encryption
What it does: Each item in your vault is encrypted individually with AES-256-GCM, using a fresh random nonce per item. Your vault key is itself derived from your master password via PBKDF2-SHA256 (600,000 iterations) and HKDF-SHA512.
Why it matters: Items are stored and decrypted independently, so the app never needs to hold your whole vault in plaintext at once. Your keys never leave your device.
Runtime protection
| Feature | Detail |
|---|---|
| Clipboard | Auto-cleared after 10 seconds |
| Auto-lock | Locks when app goes to background |
| Biometric unlock | Key stored in the OS keychain (iOS Keychain / Android Keystore) |
| Dead Man's Switch | Auto-wipe after 7/14/30 days of inactivity |
| Rate limiting | Progressive lockouts after 5/10/20 failed attempts |
The encryption layer is published
You do not have to take any of this on trust. The whole encryption layer is at github.com/erolwizard/lockbox-crypto: key derivation, AES-256-GCM, the sub-key hierarchy, the sync identity, and the tests that cover them. It is copied verbatim out of the app, not a summary of it.
It also carries the cross-platform test vectors. The phone app and the browser extension are separate implementations that have to agree exactly, because if they ever disagree two of your devices end up holding different vaults. Clone it and run npm test: 40 tests, no device needed, and they run against the real @noble packages rather than a stand-in.
No cryptography is invented here. The primitives come from @noble/ciphers and @noble/hashes, which are widely audited. What this layer decides is how they are combined, and that is where the mistakes in a password manager usually live, so that is the part worth reading. The rest of the app stays closed, so this shows how your keys and data are handled and nothing beyond that.
What about a security audit?
We have not yet completed a formal third-party security audit. We are transparent about this. We use only well-audited, open-source crypto libraries (@noble/ciphers and @noble/hashes). A formal audit will be funded from revenue and the results published here.
Contact
Found a vulnerability? Email security@lockboxnow.app