Hejje Get the app

Hejje / End-to-end encrypted fitness tracker

An end-to-end encrypted fitness tracker, and what that actually covers

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

What end-to-end encrypted means for a fitness app

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.

How Hejje does it: three keys, all made on your phone

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.

The three layers of keys in Hejje, and where each one lives.
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.

What is sealed, what is readable, and what is neither

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.

Sharing a session without opening the vault

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.

What end-to-end encryption does not protect

What it costs, and what it rules out

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.

How to check any app that says it is end-to-end encrypted

These questions work on any fitness app, including this one. The answers are usually in the privacy policy, or conspicuously missing from it.

Questions

Is Hejje end-to-end encrypted?
Yes. Everything you record is sealed on your phone with keys made there, and our server holds ciphertext it has no key for. A short list stays readable so accounts and following work, and the server still sees metadata, both set out above in full.
Does encryption stop it working offline?
No. Encryption happens on the phone when you save, and the whole app runs from a database on the device. Sync catches up, sealed, whenever you are next online. The offline side is its own page.
Do I need an email address?
No. An account is required and it is the first screen, but it asks for a first name only. No email, no password and no phone number, because the account is a key pair made on your phone.
Is it free?
Free on both stores, with no ads. Recording, your whole history, sync, backup, export and sharing all stay free. Hejje Premium, an optional monthly subscription on Android, lifts a few limits and adds deeper analysis.

Related

Start today's first one

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