Threat model
Security
We would rather say where this fails than sell a feeling. This page is who SheWolf is built to resist, and the limits we will not paper over. The same facts, in plainer language, are on Privacy.
Someone who picks up your phone
The database file is encrypted at rest. After the app has fully closed, opening it takes the PIN. You can also turn on a lock that asks for the PIN again when you leave the app.
If that lock is off, someone who picks the phone up while the app is still open can read the screen. The file on disk stays encrypted either way. The key is only in memory while the app is unlocked.
You can have the app present an ordinary screen until it is unlocked, and you can change the home-screen icon so it does not look like this app. This page does not describe those disguises or show them. Naming them would tell someone what to look for.
You can also lock the app again in a hurry. That hides it. It does not delete your data.
A cloud breach
There is no SheWolf account and no copy of your logs on a server we run. A breach of a company database cannot leak a vault we do not have. The database is also left out of iCloud and Google backups, so a backup provider does not hold the file.
A legal demand on us
We cannot turn over logs or keys we never received, and we cannot decrypt a phone. How we would answer a request is on Privacy.
Data brokers
The app has no ads, no tracking SDK, and no account to attach a profile to. We do not sell data. This website does not run analytics or set cookies.
How the lock is built
On the phone, in order:
- A random 256-bit data key encrypts the whole database (SQLCipher, AES-256). The key is not derived from the PIN.
- Your PIN is 6 to 8 digits. Argon2id stretches it into a second key: 19 MiB of memory, 3 passes, parallelism 1. That is the production cost. It is meant to make each guess slow and memory-heavy.
- That second key seals the data key with AES-GCM. A tampered seal does not open.
- The sealed key and the salt are stored in the iOS Keychain or the Android Keystore, set so they stay on this device and are not part of a cloud backup.
- Changing the PIN seals the same data key again. It does not re-encrypt the database.
Several wrong PINs in a row make the app wait before it will try again. The wait is held in memory on the phone. It is not a record we can see, and it does not protect a copy of the database that has left the phone.
If you turn on fingerprint or face unlock, anyone who can pass that check can open the app. The PIN is still the underlying secret.
What this does not stop
- Malware or a compromised phone. A modified operating system, a jailbreak, or spyware can read the screen, record the PIN as you enter it, or read memory after you unlock. Encryption does not help once the PIN is captured or the phone is already unlocked for the attacker.
- Being forced to reveal your PIN. The app opens for anyone who knows it. We cannot tell you apart from someone coercing you. There is no second PIN that secretly wipes the data.
- A short PIN and an offline copy. Six to eight digits is not a long passphrase. Argon2id slows guessing. It does not make the space of PINs large. Someone who can copy the database and the sealed key off a modified phone can try PINs without the on-screen wait.
- A file you export. Settings → Export all data shares a plain JSON file. It is not encrypted, and the app cannot import it. A copy you save elsewhere is outside this lock. Wipe does not delete that copy.
- A camera pointed at the screen. Blocking a screenshot, when you have turned that kind of protection on, does not stop a photo of the glass.
- Losing the phone or the PIN. There is no recovery copy. Forgot PIN wipes the data. We cannot restore it.
What we have not done
An independent security review of this design has not been done yet. If you find a problem, write to security@shewolf.app. Please do not include a PIN, health details, or an export. The contact file for this site is at /.well-known/security.txt.