Security and privacy
What Bifrost does today. When something is planned, we say so.
Who can find you
Your account is private by default. In search, people find you only by:
- your exact username, typed in full; or
- sharing a space with you (the Welcome space everyone joins doesn't count).
Searching a part of your name or username finds you only if you turn on Let people find me by name in Settings › Privacy & Safety. You can turn it off again at any time.
People in a space you're in can see you in its member list.
Disabled accounts never appear in search.
Your messages
Messages travel over HTTPS and are stored on Bifrost's servers. They are not end-to-end encrypted yet, so the servers can read them.
A message can carry a timer (1 hour, 24 hours or 7 days), or a chat can set a default one. When the timer runs out, the server deletes the message and its attachments from the live database. A copy may still exist in database backups; we do not guarantee it is erased from backups, and we do not state a number of days for that.
End-to-end encrypted secret spaces are described below. They are not available in the apps yet.
Secret spaces (not available yet)
Secret spaces are end-to-end encrypted spaces, built on the MLS protocol (RFC 9420). They are not available in the apps yet. This is how they are built on our servers today and what the servers can and cannot see, so you can judge it before they arrive. This page will say when the apps can use them.
What the server does not see
- The server does not see the words of a message. For each message it stores only the ciphertext, the scrambled form the sender's app makes. Its message table has no column for readable content.
- The server stores and passes on the ciphertext without opening it.
- When a message arrives, the server tells the other devices only that it exists: an id, the group and who sent it. Never what it says.
- Bifrost's ordinary message routes refuse a secret space's channel, so an app that does not know about secret spaces cannot read or write it in the clear.
What the server does see
The server needs the following to run a secret space, so it does see it:
- who is in a secret space: the accounts, and each person's devices with the name and kind they gave them (such as "Pixel 9", Android);
- that a message was sent, when, by which account, how large its ciphertext is, and a label the app puts on it (such as text or image);
- when people and devices join or leave, and a counter (the epoch) that goes up with each change;
- the names of the space and of its channel.
What the server cannot promise
The server cannot check that what an app sends is really encrypted. It accepts any non-empty bytes as ciphertext and never reads them. The protection comes from the apps doing the encryption: an app that was changed to send readable text would put that text on our server.
Logging in is not enough to add a device to a secret space. A new device is added only when one of the space's existing devices approves it.
History export is off unless a member turns it on. When it is on, the server stores the encrypted export and a fingerprint of its key, and cannot read the export.