Security
How SealNest protects your data
Everything in your vault is encrypted on your device, with a key that never leaves your devices. This page explains how, what we can and can't see, and what this design doesn't protect against.
The key to your vault
The first time you open SealNest, your device makes a key: 32 random bytes. It encrypts your vault file with AES-256-GCM. The key is kept in your device's keychain, set to this device only, so it isn't in iCloud Keychain or in your device's backups. Using it takes Face ID, Touch ID or your device's passcode. We never receive it.
SealNest locks when you leave the app. AutoFill opens the same vault, and asks for Face IDyour passcode before it fills.
Your encrypted backup
A backup is a file locked with a passphrase you choose, of at least 12 characters. Your passphrase is stretched with PBKDF2-HMAC-SHA256, 600,000 times, and each part of the file is encrypted with AES-256-GCM. You keep the file: we never receive it. A wrong passphrase is refused, and a forgotten one can't be recovered, by you or by us.
The breach check
To check a password against known breaches without sending it, SealNest uses a method called k-anonymity. Your device sends only the first 5 characters of the password's SHA-1 fingerprint to Have I Been Pwned's Pwned Passwords list, asking for padding, and compares the answer itself. Each 5-character start is shared by hundreds of leaked fingerprints and countless others, so it says next to nothing about your password. Have I Been Pwned sees your device's internet address. The request goes through our server, so Have I Been Pwned sees only our server's address.
With a SealNest account
Signing in
SealNest accounts have no password to steal. You sign in with a code we email you, and you can add an authenticator app as a second step. Signing in never opens your vault: only your devices can, with your key.
Sync
Each change is encrypted on your device before it is sent, with keys made from your vault key, and each request is signed by a key that never leaves the device. Our servers store what they are given, still locked, and accept a change only from one of your devices.
Adding a device
A new device asks to join. Your phone shows a 6-digit code: you type it on the new device, then approve on your phone with Face IDyour passcode. The two devices use the code to agree on a key (a password-authenticated key exchange), and your vault key travels to the new device locked with it. Our server passes the messages between them, but can't read the key, and would get at most two guesses at the code before the request ends.
Your recovery code
When you turn on sync, your device makes a 24-character recovery code for you to write down. We keep a copy of your vault key locked with it. We never see the code, so that copy is useless to us. If you choose Device-Only, our servers keep each change only until all your devices have it, and there is no copy to recover.
Sharing
Each person has their own sharing keys, carried between their devices inside their vault. A shared group has its own key, which the group's owner locks separately for each member, using HPKE, a published standard, and the owner signs the list of who is in the group. The first time you share with someone, our server tells your device which key is theirs. To check it really is theirs, compare a code with them in the app.
What we can see
Without an account: nothing. Your vault never comes to us.
We can't read anything in your vault. To run SealNest, we can see:
- your account's email address, and your devices: how many, of what kind, when they joined and when they last synced;
- how many items your vault holds, their sizes, and when each one changed, from which device;
- who you share with, invitations, and when shared things were opened or changed;
- that you have a recovery code;
- the first 5 characters of a password's fingerprint, when the breach check asks through us;
- internet addresses, in Cloudflare's systems, which carry every connection.
The full list is in our Privacy Policy.
What this doesn't protect against
- Anyone who knows your device's passcode can open SealNest on it. Keep your passcode private.
- A device that has been broken into, by malicious software or a jailbreak, can see what you see.
- If you lose your device and have no encrypted backup, or forget the backup's passphrase, nobody can get your vault back.
- If you lose every device and your recovery code, and have no encrypted backup, nobody can get your vault back.
- Someone who controls your email can sign in to your account and see your devices and your plan, but not your vault. Turn on the authenticator.
- Our servers, or anyone who took them over, can't read your vault, but could stop syncing, or interfere with what they deliver to your devices.
- You are trusting the SealNest app to do what this page says. The specification below lets anyone check how it works.
The full specification
The SealNest protocol specification describes every format, key and check, for cryptographers and for anyone building an app that works with SealNest.
The SealNest protocol specification will describe every format, key and check, for cryptographers and for anyone building an app that works with SealNest. It will be published at this address.
An outside cryptographer has reviewed SealNest's design.
Found a problem?
If you find a weakness in SealNest, please write to the address on our Support page, with "Security" in the subject. Tell us what you found and how to see it, and give us a reasonable time to fix it before you tell anyone else. Never send us a password or a code.