Coming soon

Security model

How Pearlin keeps your photos, videos and documents private, written so you can check it. It covers what the app does and what it can’t protect against.

Updated

The short version

  • Everything you add is encrypted on your iPhone or iPad before it’s saved, with AES-256-GCM.
  • Your pattern is never stored. Argon2id turns it into a key each time you draw it.
  • There’s no Pearlin account and no Pearlin server holding your files. Backup and sync use your own iCloud, and only ever receive encrypted data.
  • The lock screen never shows how many vaults exist.
  • We can’t open your vaults or recover them. If you lose both a vault’s pattern and its recovery phrase, nobody can open it.

Your pattern is the key

A pattern joins at least six dots on a 5×5 grid and changes direction at least once. When you draw it, Pearlin runs Argon2id with 64 MiB of memory and three passes, which takes a moment on purpose: it makes every guess slow and memory-hungry, on a phone or on a cracking rig.

The key from Argon2id is mixed with a random secret kept in the iOS Keychain, set to stay on this device only. So a copy of the app’s storage on its own, without that Keychain secret, can’t be used to try patterns offline.

The pattern itself is never written anywhere. The key it makes is held only while the vault is open.

Choose a pattern that’s hard to guess. More dots and more turns make a pattern harder to guess or to read over your shoulder. The app doesn’t limit how many times someone holding your unlocked phone can try, so a short, simple shape is the weak point.

What’s encrypted

  • Files and thumbnails: AES-256-GCM, in chunks, each with its own random key that the vault’s key protects. Files are padded to fixed size steps, so stored sizes say less about what’s inside.
  • Names, notes and folders: the vault index is an encrypted SQLCipher database.
  • Videos are decrypted in memory as they play. They aren’t written out to a plain file.
  • Pearlin’s camera saves photos and videos straight into the vault, never to the Photos app.

The encryption uses well-known libraries: Apple’s CryptoKit, libsodium for Argon2id, and SQLCipher.

Several vaults, nothing to count

Each vault has its own key, opened by its own pattern. The app stores a fixed set of key slots, all the same size. A slot in use looks the same as an empty one, which is random bytes.

When you draw a pattern, Pearlin derives one key and tries it against every slot, every time. Unlocking takes the same work whichever vault opens, or if none does, so the timing doesn’t show how many vaults exist. A pattern that opens nothing gets the same neutral message every time.

The recovery phrase

Every vault has a recovery phrase, written as a sentence that paints a picture, like “Seven quiet otters gently carry amber kites near the silver herons.” Its nine key words are picked at random, worth about 82 bits, and it opens the vault if you forget the pattern. It goes through Argon2id too.

Anyone with the phrase can open that vault, so write it down and keep it somewhere offline. When you copy it in the app, it stays on this device’s clipboard only and clears after one minute.

When you leave the app

  • Switching away from Pearlin locks the vault and drops its key.
  • The app switcher shows a cover, not your photos.
  • Pattern, phrase and name fields turn off autocorrect, so the keyboard doesn’t learn them.
  • Vault data is left out of iPhone and iPad device backups. It’s backed up only through Pearlin’s own encrypted iCloud backup, if you turn that on.

iCloud backup and sync

Backup and sync are optional. They use Apple’s CloudKit, in the private database of your own iCloud account, which we can’t reach. Everything is encrypted on your device before it’s uploaded, and records are padded so their sizes give little away.

The backup keys mix in a secret kept in iCloud Keychain, which Apple encrypts end to end. So the backup data alone isn’t enough to try patterns against. Restoring on a new phone signed in to the same Apple ID uses the same pattern.

Sharing

Sharing sends an encrypted copy of a vault to one person. The share phrase is a sentence of nine random key words. From it, Pearlin makes the key that encrypts the copy and the names of the records that hold it, so the records can only be found and opened by someone with the phrase.

  • The copy is encrypted on your phone with a key made just for the share, never your vault’s own key.
  • It’s stored in the app’s CloudKit public database. We can see that encrypted records exist and how big they are, but not what’s in them or who sent them.
  • Guessing a phrase means running Argon2id and then fetching that exact record from Apple, once per guess. The records can’t be listed or searched.
  • Once the other person saves the share, it’s deleted from the server.

The limits you set (when it expires, how many times it opens, whether files can be saved) are applied by the other person’s app. A share can also lock when a screenshot or screen recording starts. Neither stops someone photographing the screen with another device, so share only with someone you trust with the files.

Duress vault

You can make one vault a duress vault. Opening it, by pattern or recovery phrase, erases every other vault on that device and then opens as normal. The erase rewrites every key slot, empty ones included, so the slots look the same afterwards, and nothing outside the duress vault records that it is one.

Erasing works by destroying keys: without them, the files left in storage are unreadable, and they’re deleted in the background.

What Pearlin can’t protect against

  • Someone with deep access to your phone. Someone who copied both your phone’s Keychain and the app’s storage could work out roughly how many vaults exist. The screen gives nothing away, but that kind of copy can.
  • A compromised phone. Malware or a jailbreak running while a vault is open can see what you see.
  • Someone watching you draw. A pattern seen over your shoulder opens the vault as well as it opens for you.
  • Documents being viewed. iOS’s document viewer needs a file, so a decrypted copy of a document sits in the app’s protected temporary folder while it’s open, and is deleted afterwards.
  • What the other person does with a share. See Sharing above.
  • An outside audit. Pearlin hasn’t had an independent security audit yet. This page describes the design as built, so you can judge it for yourself.

For what data leaves your phone and why, see the privacy policy. For forgotten patterns and moving phones, see Support.

Report a security problem

If you find a weakness, please email support@pearlin.app with the details before making it public. We’ll reply, fix what’s real, and credit you if you’d like.