Security

TaperØff is end-to-end encrypted. Here's what that means in practice, without the jargon, and what our server does and doesn't hold.

The short version

Your plan and everything you log are encrypted on your phone before they're sent anywhere. The key that unlocks them lives on your devices, not with us. Our server passes scrambled data between your devices and stores it, but it has no way to read it. If someone broke into our server, or if we were asked to hand your data over, there would be nothing readable to give.

Your devices come first

TaperØff is built to work on your phone on its own. Your plan, your windows and your log are stored on the device and protected by your phone's own data protection, so the app works in full with no signal and no account. Widgets, your watch and Siri or Assistant shortcuts read that same on-device store.

What happens when you sync

Sync isn't in the first release of the app. It arrives in an update, and until then nothing you log leaves your phone, except to your own watch. What follows is how it works once it's here.

Syncing is optional. It's there so your phone, watch and any other device stay in step. When you turn it on:

  1. Your device creates a random data key. It never leaves your devices in readable form.
  2. Each entry you log is sealed on your device with that key, using XChaCha20-Poly1305, a modern authenticated cipher. Every entry gets its own random value, so no two sealed entries look alike, and any tampering is detected when your device opens it.
  3. The sealed entries go to our server, which gives each one a place in the queue and passes it on to your other devices. That's all it can do with them.

Passkeys, not passwords

Your account uses a passkey: the same technology that lets you sign in with Face ID, a fingerprint or your screen lock. There's no password for anyone to steal or guess, and nothing that can be reused on another site.

Your passkey also protects your data key. Your device derives a separate wrapping key from the passkey and uses it to lock the data key, so only someone holding your passkey can unlock your data. Adding a second passkey, or replacing one, re-wraps that one key; your data itself never needs re-encrypting.

What our server stores

For each account, the sync server keeps:

  • your sealed entries, which it can't read;
  • a sequence number for each, so devices know what they've already seen;
  • your data key, locked by your passkeys, which it can't unlock;
  • the public half of your passkeys, which is what lets you sign in.

It doesn't know how much you vape, when your windows are, how your plan is going or how your cravings have been. None of that ever reaches it in readable form.

What we can't do

Because we don't hold your keys, we can't reset your data for you. If you lose every device and every passkey, your synced data can't be recovered, by you or by us. Passkeys usually sync through your phone's own keychain, which makes this unlikely, but it's the honest trade-off of real end-to-end encryption.

Analytics

The app has no analytics and no advertising code. Puff, craving and plan data never go to an analytics tool, now or in a future update. See the privacy notice for the details.

Found a problem?

If you think you've found a security issue, please tell us at quit@taperoff.io before sharing it publicly. We'll acknowledge it quickly and keep you updated while we fix it.