Security — HushKeep

This page is a public summary of HushKeep’s security design. It names what the app protects against, what it does not, and which primitives it uses. The goal is to let you judge the design yourself — not to market it.

The design in one paragraph

Every vault has its own keys. Files are encrypted on your device with AES-256 before they’re saved or backed up. The keys are derived from your pattern (or your 9-word recovery phrase) combined with a random device secret that lives only on that device, and — where the device has a Secure Enclave — bound to it so the derived keys cannot be computed on any other hardware. Backups are encrypted before they reach iCloud, so Apple stores data it can’t read. We run no server that receives your files or keys. No account needed. We collect no analytics and no personal data.

Who we are trying to protect against

ThreatWhat each attacker gets
Someone holding your phone and forcing you to unlock itOnly the vault you open is revealed. The UI shows no list of vaults, and the emergency (duress) unlock looks the same on screen as a normal one.
A thief or snoop without your patternNo file contents. Pattern guessing is possible only through the app’s own UI, and it is throttled: 5 free attempts, then waits of 30 s, 1 min, 5 min, 15 min and 1 hour.
An offline copy of the app’s files without the device keychainNo file contents, and no number of vaults: the keyslot table is fixed-size and random-looking, the objects are uniform, and the occupancy data lives in the device keychain. Offline pattern guessing is not possible, because the device secret and hardware binding are missing.
A copy of the app’s files including the device keychainNo file contents. The number of vaults leaks only as a range (the keyslot table mixes real slots with chaff slots, 6 to 14 of them), and pattern guessing still requires the live Secure Enclave — on the seized device itself, at about one Argon2id evaluation per guess.
An iCloud operator, or a breach of your iCloudNo file contents. What leaks is a range of vault counts, plus a documented count of frequently modified records (planned to be mitigated in a future version). Cloud pattern slots cannot be guessed offline because the cloud secret sits in iCloud Keychain; recovery slots face Argon2id at its strongest setting against a 68-bit phrase, which is infeasible for generated phrases.
A network attackerAll traffic is inside standard TLS (your app to App Store, your device to iCloud); there is no HushKeep server to attack.

What we do not claim

We state our limits publicly, because a security product that hides its limits deserves no trust:

The primitives

PurposePrimitive
Authenticated encryptionAES-256-GCM (96-bit nonce, 128-bit tag)
Key derivation from your patternArgon2id, 64 MiB memory, 3 iterations
Key derivation from your recovery phrase, and cloud pattern slotsArgon2id, 128 MiB memory, 4 iterations
Key separation between derivationsHKDF-SHA256
Binding to the deviceECDH P-256 with a Secure Enclave private key (on devices that have one)
RandomnessThe system CSPRNG

The two Argon2id parameter sets are fixed constants of the storage format: they cannot be changed after release without a new format version and a migration. The encryption formats are covered by known-answer test vectors (an independent reference implementation and the app’s implementation must produce byte-identical output).

Your keys, your only keys

Your vaults can only be decrypted with your pattern or recovery phrase. We hold neither.

Privacy of the running app