Security in plain words
How does PriChat work?
Security is not an add-on at PriChat, it is the foundation. Here you can see, calmly, how your messages are protected, what the server really stores, how you add extra locks to your account, how you spot tampering, and what happens in an emergency.
PriChat is an end-to-end encrypted messenger. That means only you and the person you talk to can read your messages, no one else, not even us as the operator. You don\'t need a phone number, just a username of your choice, and you can start right in the browser or as an installed app.
Sounds like everyone else at first. The difference is in how it is built. Let us look at it step by step.
/01Your key
Your key is born from your password
When you sign in, a strong key (AES-256) is computed from your password right on your device. This uses a deliberately slow procedure (PBKDF2, 600,000 rounds) to make password guessing expensive. This key lives only in memory and is never stored.
For logging in to the server, a second value is derived separately, with a different salt. Only this login token goes to the server, and only as an argon2id hash. Your password and your data key stay with you. That is why the server technically cannot decrypt your local data at all.
/02Messages
How a message gets encrypted
PriChat uses the same proven approach as Signal: an X3DH handshake to establish a shared secret, and then the Double Ratchet, which generates a fresh key for every single message. This is called forward secrecy: even if one key is ever exposed, past messages stay protected.
The devices exchange public keys via the server, never private keys. Only if your counterpart hasn\'t published modern keys yet does a simpler fallback kick in. Group chats, by the way, are not a separate technology: the same message is encrypted individually for each member, and the server never learns that it belongs to a group.
/03The server
What the server sees, and what it doesn't
This is the most honest part. A server needs to know a minimum to deliver messages. But content is not part of that. On the left is what actually lives on the server, on the right what provably never arrives there.
On the server
- Username
- Login hash, not the password
- Public keys
- Encrypted messages until delivered
- A little metadata (online status, contacts as ciphertext)
Never on the server
- Your messages in plaintext
- Who is friends with whom, as a readable link
- The sender of a message in plaintext
- The sender of a friend request in plaintext
- Your private key
- Your password
One point matters a lot to us here, and it is new: your social circle stays private too. Your contact list only sits on the server as an encrypted bundle, and even the sender of a friend request is encrypted anonymously against the recipient's key. So the database holds no plaintext link “X wants to be friends with Y”.
And so you can see this is not a marketing claim: this is what the data in the database actually looks like. An undelivered message sits only as a ciphertext block in the content field (recognizable by the DR: or ENC: prefix), never as readable text. Your password is stored as an argon2id hash, your contacts as an encrypted bundle.
| id | from | to | content | timestamp |
|---|---|---|---|---|
| 3f2a… | (empty) | bob | DR:eyJoIjp7… | 2026-07-10T12:00:00Z |
| username | password_hash | crypto_salt | contacts_blob |
|---|---|---|---|
| alice | $argon2id$v=19$… | 9f3c… | ENC:AAEC… |
You'll surely notice the empty from column, and that is deliberate. Who sent a message appears nowhere in plaintext: the sender travels encrypted inside the content field and can only be recovered by the recipient. The server sees only which mailbox (to) something was placed in, so it can deliver it, never who it came from.
Delivered messages are removed from this table immediately, or after 14 days at the latest if your device was offline for a long time. So the server keeps no message history. That matters for the next point.
/04Your account
Protecting your account in more than one way
Encryption protects your messages in transit. But there is a second front: your device and your account itself. For that you can add several locks on top of your password, all optional, all switchable right in the settings.
Two-factor (2FA). You set up an authenticator app (via QR code, plain standard TOTP). With 2FA on, the server additionally asks for the 6-digit code at sign-in. Even someone who knows your password cannot get in without that second device.
Passkey and biometrics. Instead of typing your password every time, you unlock the app with Face ID, fingerprint or your device PIN. There is more to it than it looks: your data key is not simply stored, it is wrapped and encrypted with a secret from your device's security chip. That secret never leaves the chip. The server only ever sees an opaque block, so again there is no spare key on our side.
App lock. With one tap you lock the app. Your key is immediately cleared from memory, and after that nothing is readable without your password, passkey or recovery phrase. If you like, the app also locks by itself, after 5, 15 or 30 minutes of inactivity.
To be clear: 2FA and passkey protect access to your account and your device. The end-to-end encryption of your messages runs independently of that, always.
/05Verifying trust
How you notice if someone tries to listen in
Encryption is only as good as your certainty that you are really talking to the right person, and not to someone who slipped in between. For exactly that there are two visible checks.
Safety numbers. For every contact there is a number derived from both your keys. It is identical on both devices as long as no one intervenes. Compare it once (read it out, send a photo, however you like) and you have certainty. Verified contacts are permanently marked with a checkmark.
Key-change warning. The app automatically remembers a contact's first key. If a different one shows up later, for instance because someone tries to interpose themselves, you get a warning instead of quietly continuing. This protects you even with contacts whose number you never explicitly compared.
New-login warning. If an unknown device signs in to your account while a trusted one is active, a warning appears there with IP, device and time. You can then refuse to approve the new device.
/06Emergency
The emergency button
Sometimes it is not about attackers on the network, but about the situation right in front of you: a phone being checked, a forced handover, a lost device. For those cases there is the emergency wipe.
One move wipes the local messages and keys of the contacts you selected in advance, right on your device, and signs you out. In the settings you decide which contacts are affected, whether their contact entries disappear too, and whether it asks once more first or happens immediately.
The emergency wipe acts locally on your device and signs you out; it does not delete your account and cannot pull messages back from the other side. You can sign in again later. If you want to dissolve the account entirely, full account deletion exists separately for that.
/07Switching devices
New device: register on A, sign in on B
Say you registered on your phone and later sign in on your laptop. What happens then? In short: you simply sign in with username and password, and your key is freshly computed on the new device.
- Sign in on the new device
You just enter your username and password, nothing else.
- The server sends your salt
Via /auth/salt it returns the public random value used to compute your key.
- Your key is recomputed
From password and salt, the same AES key as on the old device is derived locally.
- Login is verified
Via /auth/login the server checks the login token, optionally with a two-factor code.
- Same identity, same safety number
Your messaging identity is derived deterministically, so your safety number stays the same.
Your old chat history does NOT automatically come along. It only lives encrypted on your old device, and the server keeps no history. On the new device you start with an empty history and only receive new messages from login onward. Your contacts can return via an encrypted server bundle, but the old messages themselves cannot.
One more detail: for security reasons only one device is active at a time. If you sign in on the laptop while the phone is still online, you are asked to sign out there first.
/08Recovery
Forgot your password? The word phrase
When you sign up you get a phrase of 12 words. Keep it safe, because it is your emergency key. With it you can restore your messaging identity and your keys and set a new password. The words never leave your browser, the server does not know them.
Honest here too: the phrase brings back your keys and your identity, not your old message history. That history simply does not exist on the server, so no recovery can conjure it up.
/09Limits
Honest: the limits
No system is perfect, and I would rather tell you openly where the edges are:
- The simple fallback (when the other side has no modern keys) and call signaling do not have forward secrecy. For two up-to-date devices the modern Double Ratchet always runs.
- Support requests are intentionally not end-to-end encrypted, because they go to the operator, like at a normal help desk.
- Profile and group pictures live as metadata on the server, not end-to-end. If you prefer, leave them empty.