Hejje / End-to-end encrypted fitness tracker
Hejje records running, walking, hiking, cycling and gym workouts, and logs food, water and weight. Everything you record is encrypted on your phone with keys that are made there and never sent to us, so the copy on our server is one we cannot open. Here is how that works, where it stops, and how to test the same claim on any other app.
Free · iOS 17 or later · Android 8.0 or later
End-to-end encryption means your data is locked on your own device, with a key only your devices hold, before it goes anywhere. The company in the middle stores it and moves it, and cannot read it.
Most fitness services describe something else: encryption in transit and at rest. That protects your routes from someone on the same Wi-Fi and from a thief who walks off with a disk. The company still holds the keys, so it can read your training, analyse it, hand it over, or lose it in readable form. Both get called encryption. Only one of them keeps the operator out.
The quick test
If a service can give you back your full history after you have lost every device and reset your password with nothing but an email, it holds a key to your data. Whatever the marketing says, that is not end-to-end encryption.
Hejje uses envelope encryption, which is keys inside keys. Each layer is locked by the one above it, and our server only ever holds the locked versions.
| Key | What it is | Where it lives |
|---|---|---|
| Record key | A fresh random key for each thing you save: an activity with its route, a meal, a weigh-in. | Locked by your vault key and stored beside the record it opens. |
| Vault key | One random key that locks all of your record keys. | On your devices, in Android Keystore or the iOS Keychain, plus a copy locked by your recovery key so a new phone can get back in. |
| Recovery key | 28 characters carrying 128 bits of randomness, shown once when you create your account. | Wherever you wrote it down. Never on our server. |
The building blocks are standard, published ones, not anything home-made. AES-256-GCM seals the records. Ed25519 signs every request your phone sends, which is how you log in, because there is no password. X25519 is used to hand a key to someone you choose to share with.
The record key layer is what makes sharing one session possible without exposing the rest: one key can be passed on while every other record stays shut. And because the recovery key is 128 random bits rather than a password you picked, there is no weak secret for anyone to guess. That is why it is long, and why the app shows it to you instead of asking you to choose one.
A server that routes accounts and follow requests has to be able to read a little. The useful question is exactly how little, so here is the whole answer in three groups.
That last group is the honest limit. We could tell that a run was saved on Thursday evening and a longer one on Sunday morning, without seeing either. Hiding it would mean padding every record to one size and delaying uploads away from when you train, which costs battery and data, and we decided against it. Every row of the server's database is listed in what our server can actually see.
A follow request is sealed to the other person's public key and signed with yours, so our server can deliver it but can neither read it nor forge one. When they accept, their phone makes a key for that one direction of that one relationship and sends it back, sealed the same way.
From then on, each session you choose to share is sealed with that key and left in a mailbox our server holds and cannot open. Unshare it or delete it and the withdrawal travels the same way. If two people follow each other, that is two unrelated keys, one in each direction.
The recovery key is the only way back into your vault on a new phone. We never receive it, so we cannot reset it, and if the key and your phone are both gone, the synced history is gone with them. Every service that can reset an account for you can also be pressured, tricked or breached into opening it for someone else. We took the other side of that trade.
Some features need a server that can read everybody's training, so Hejje cannot have them: segment leaderboards, a global heatmap of routes, and cloud-to-cloud links with watch makers, which deliver your workouts to the app's server unencrypted.
These questions work on any fitness app, including this one. The answers are usually in the privacy policy, or conspicuously missing from it.
Free on iPhone and Android. A first name to begin, no email, and everything sealed before it leaves your phone.
iOS 17 or later · Android 8.0 or later