Built so that only your pattern can open your vault
SecretGrid doesn’t hide files behind a lock screen. It encrypts them, with a key that exists only while you’re drawing your pattern. Here is exactly how, and where the limits are.
What it protects against
Security only means something against a specific threat. SecretGrid is designed for these:
How your pattern becomes a key
When you draw a pattern, SecretGrid runs it through Argon2id, a deliberately slow, memory-hungry function, together with a random salt created when the app was installed and kept in Android’s keystore. The result is split with HKDF into two independent values:
- a locator, which becomes the name of a small “envelope” file, and
- a key-encryption key, which opens that envelope to reveal the vault’s master key.
A wrong pattern produces a locator for a file that doesn’t exist, which looks exactly like a pattern no vault uses yet. That’s why the app can offer to create a new vault instead of saying “wrong pattern”.
Argon2id’s cost is measured on your phone the first time SecretGrid runs: it keeps the full 64 MiB × 3 passes wherever unlocking stays under about 1.2 seconds, and steps down only as far as a slow phone needs, never below 16 MiB × 3. The recovery phrase always uses the full cost, so it opens the vault on any phone.
pattern ──Argon2id(device salt, tuned cost)──▶ pattern secret
pattern secret ──HKDF──▶ locator (names the envelope file; reveals nothing)
pattern secret ──HKDF──▶ KEK (unwraps the envelope)
phrase ──Argon2id(fixed salt, 64 MiB×3)─────▶ recovery secret ──HKDF──▶ locator, KEK
envelope (AES-256-GCM under KEK) = vault master key + storage id
master key ──HKDF──▶ index key ──▶ vault index (names, folders, per-file keys)
per-file key (random) ──▶ file chunks (AES-256-GCM)How files are encrypted
Every photo, video, document, note, card and thumbnail gets its own random 256-bit key and is sealed with AES-256-GCM, which both hides and authenticates it: a single changed byte makes decryption fail rather than return altered data.
Large files are encrypted in 1 MiB chunks as they stream in, so even long videos never need to sit unencrypted in memory or on disk. Each chunk’s position is bound into its encryption, so chunks can’t be swapped, dropped or reordered.
The per-file keys, file names, folders and dates live in the vault’s index, itself encrypted with a key derived from the master key. Notes and cards are re-encrypted with a fresh key every time you save.
Hidden vaults and deniability
Each vault leaves an envelope, a recovery file and an index on disk, so counting files would count vaults. SecretGrid prevents that by keeping decoy files alongside the real ones: random data of exactly the same size and format, which is indistinguishable from real encrypted data without the key. Indexes are padded to size buckets, so a nearly empty decoy vault and a full one look alike, and a decoy index is rewritten whenever a real one is, so modification times don’t single out the real ones.
The duress pattern (Pro) uses the same idea in reverse. When it’s drawn, SecretGrid first pauses backup, then deletes the other vaults’ envelopes, which destroys the only copies of their keys, before deleting their files. Even if storage still holds traces, nothing can decrypt them. The surviving vault is padded again so the phone still looks like it holds several.
Shake to decoy keeps the decoy vault’s key in the keystore so it can open without a pattern. That’s a deliberate trade-off for a vault meant to be shown, and the app tells you so when you turn it on.
While the vault is open
- Keys live only in memory and are overwritten with zeros when the vault locks.
- Leaving the app locks it, as does shaking the phone, turning it face down, or the Quick lock tile.
- Screenshots and screen recording are blocked, and the app switcher shows a blank screen.
- Thumbnails are decrypted into memory only. A photo or video you open is decrypted to a temporary file that’s deleted when you close it, and the whole viewing cache is cleared on every lock.
- Location is stripped on the way in from JPEG, HEIC, MP4 and MOV files, without re-encoding them.
Backup, sync and sharing
Backup uploads exactly the ciphertext that’s on your phone, under the same random names, to a hidden folder in your own Google Drive that only SecretGrid can use. Patterns, phrases and keys are never uploaded. A phone only deletes Drive files it uploaded itself, so two phones sharing a Drive can’t erase each other’s work.
Sync (Pro) merges the encrypted index between your phones; each change carries its own timestamp, so the newest edit wins per item and deletions follow. Patterns stay per phone: drawing yours on another phone won’t work until you set it there with the recovery phrase.
Sharing (Pro) creates one file containing the vault’s files, still encrypted with their own keys, plus a manifest sealed with a key from a new 9-word phrase. Nothing about your patterns or recovery phrase is included, and the recipient’s copy becomes an independent vault.
Signed updates
SecretGrid can receive fixes over the air between Play Store releases. Every update is signed with a private key that never leaves our machines, and the app checks that signature before running anything; an update without a valid signature is refused. Access to our build accounts alone isn’t enough to push code to your phone.
Limits, honestly
- Patterns have less room for randomness than long passwords; Argon2id slows guessing down, and a longer pattern with more turns helps most.
- Your Drive backup reveals how many files and vaults you back up, and roughly how big they are, though never what they contain.
- Ads on the free plan come from Google’s SDK, which runs in the app but never receives anything from your vaults.
- The code hasn’t had an independent audit yet. We’ll publish the results when it has.
Reporting a problem
If you find a security issue, please email [email protected] before disclosing it publicly. We’ll acknowledge it, keep you updated, and credit you if you’d like.
Security questions
No. The keys come from your pattern or recovery phrase, which never leave your phone, and we hold no copy of your files. There is no master key and no back door.
A pattern alone would be, which is why each guess is made expensive: Argon2id needs tens of megabytes of memory and a noticeable fraction of a second per attempt, and the per-install salt in the keystore means guesses can't be precomputed or tried on another device. Use a long pattern with a few turns; the strength meter shows how you're doing.
Folders of random-looking files with random names and similar sizes, some of them decoys. Nothing says which vault a file belongs to, how many vaults exist, or what anything is.
The same ciphertext, with random file names, in a hidden folder only SecretGrid can use. Google can see how many files there are and their sizes. Decoy files aren't uploaded, so the number of index files in Drive does match the number of vaults you back up.
Not yet. This page describes the design in enough detail to check against, and we welcome questions and independent review.