Technical

Storage, history & app lock

Your key

The private key is stored in the platform keystore: Keychain on Apple platforms, Android Keystore, libsecret on Linux and DPAPI on Windows. On Android, backup and device transfer are disabled because secure storage is bound to a Keystore key that never leaves the device; moving to a new phone means Export backup and importing it.

Whisper for web keeps its key in the browser’s storage for that site. It works, but browser storage is weaker than a native keystore and the web version has no app lock.

Message history at rest

Received messages from people in your address book are saved with the contact, serialised and encrypted with ChaCha20-Poly1305 under a random 256-bit vault key kept in the keystore:

messages.vault := "WVLT" ‖ 0x01 ‖ nonce[12] ‖ ciphertext ‖ tag[16]

The vault key is separate from your identity, so history survives importing or regenerating your key. Only messages from contacts are saved; deleting a contact deletes their history (with undo). History can be deleted per message, per contact or all at once, or turned off.

App lock

Optionally require Face ID, Touch ID, a fingerprint or the device passcode. It locks at launch and after 30 seconds in the background, and hides the app’s content in the app switcher. Turning it on requires one successful authentication, so you can’t lock yourself out; if the device’s screen lock is removed later, the app lock turns itself off since it can no longer be enforced. The lock guards the UI — the keys themselves are protected by the keystore and the device’s own lock.