Skip to content
SecretGrid
Security design

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.

ComponentHow
File encryptionAES-256-GCM, a random 256-bit key per file and per thumbnail
Large filesSealed in 1 MiB chunks, each authenticated, so a video can't be cut or reordered undetected
Pattern keyArgon2id, 64 MiB × 3 passes by default, tuned per phone (never below 16 MiB × 3)
Pattern salt32 random bytes per install, kept in Android's hardware-backed keystore
Recovery phrase9 words from the BIP-39 list (about 99 bits), Argon2id at 64 MiB × 3
Key derivationHKDF-SHA-256 separates the file-name locator, the key-encryption key and the index key
Vault indexAES-256-GCM, padded to at least 16 KiB and then to a power of two
DecoysAt least 8 envelopes, recovery files and indexes on disk, real or not
BackupCiphertext only, to Google Drive's hidden app folder (drive.appdata scope)
Shared vaultsOne file sealed with a key from a fresh 9-word phrase (Argon2id + HKDF)
App updatesCode-signed with RSA (SHA-256); unsigned updates are refused

What it protects against

Security only means something against a specific threat. SecretGrid is designed for these:

Protects you from

  • Someone who copies your phone's storage, or a backup of it
  • Someone who picks up your phone after the app has locked
  • Someone demanding you open the app (decoy vaults, duress pattern)
  • Google, which stores your backup but only ever sees ciphertext
  • Us: we never receive your files, pattern or recovery phrase

Can’t protect you from

  • Someone who watches you draw your pattern (hide the trace helps)
  • Malware or a rooted phone that can read the app's memory while a vault is open
  • Losing both your pattern and your recovery phrase: nobody can open that vault
  • A screen photographed by another camera while a vault is open

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.

Key hierarchy
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

Try it on your own phone

Free on Google Play. No account, nothing to set up first.
Get it on Google Play