Privacy & security
This statement covers this CipherChat server: CipherChat. "The operator" means the people who run it. CipherChat is open-source software by DarkCipher Systems; DarkCipher Systems doesn't run this server unless it says so above, and never sees its data.
In short
- Messages, pictures, videos, files, reactions and edits are end-to-end encrypted on your own device. The server stores only ciphertext it cannot read.
- The encryption is post-quantum: every step pairs a NIST post-quantum algorithm with a proven classical one, so it stays safe if either is ever broken.
- The service is provided as it is, and used entirely at your own risk. Read "Your risk, your responsibility" below before you use it.
Your risk, your responsibility
- This server is offered without any warranty or guarantee of security, availability, accuracy or fitness for any purpose. No security is perfect.
- You use it, and anything you send, store or receive through it, at your own risk. To the fullest extent the law allows, neither the operator nor the authors of CipherChat are liable for any loss, damage, disclosure, interception, deletion or unavailability of data, or any consequence of using or being unable to use the service.
- Don't rely on it for emergencies, or for anything where a failure, a delay or a leak would cause serious harm (for example legal, medical or financial obligations). Keep your own copies of anything important.
- You are responsible for what you send, for keeping your password, authenticator, chat passphrase and devices safe, and for following the law. Don't share anything illegal, or anything you don't have the right to share.
- Access is by invitation and can be changed or withdrawn at any time, for example to protect the service or other people.
How your messages are protected
- Keys made on your device. Your personal keys are created on your own device and never leave it unencrypted.
- Post-quantum hybrid encryption. Room keys are handed to each member with ML-KEM-1024 together with X25519. Every message is signed with ML-DSA-87 together with Ed25519, and only accepted if both signatures check. Content is encrypted with AES-256-GCM, with a fresh key for every message and every file.
- Your chat passphrase stays with you. A copy of your keys is kept on the server so you can use more than one device, but only sealed with your passphrase (Argon2id) and a per-person key share derived from a server key held outside the database. The passphrase is never sent to the server, and nobody can reset it for you.
- Verified people. Each member's identity is checked by comparing a 60-digit safety number with the server's owner, out of band. Every client refuses keys and messages from anyone unverified, and any server attempt to swap keys, change, forge or replay messages is detected and refused.
- New keys when people leave. Rooms get a new key whenever members change, and every week, so people who leave can't read what's sent afterwards.
- Attachments. Files, pictures and videos are encrypted on your device before upload, padded so even their exact size is hidden, and deleted with their message.
- Burn messages. A burn message stays hidden until opened, disappears from the screen after its countdown, and is destroyed on the server as soon as everyone it was sent to has opened it, or after 7 days unopened.
- The connection. The recommended setup uses TLS 1.3 with post-quantum hybrid key exchange (X25519MLKEM768), which current Chrome, Edge and Firefox use. The CipherChat apps for Android and Windows refuse to connect without it.
- Sign-in. A password and an authenticator code, rate limits and lockout after repeated failures. Paired apps get a revocable device credential, kept in the device's secure key storage.
- Self-checking. Every client checks its cryptography against an independent implementation (OpenSSL known answers) every time it starts, and refuses to run if anything is off.
What the server can see
End-to-end encryption hides what you say, not that you're talking. The server necessarily knows:
- your account name, display name and, if you were invited by email, your email address;
- room names and topics, who is in which room, and who has which public key;
- when messages are sent and by whom, roughly how large they are (in fixed size steps), and which messages carry attachments;
- for security, sign-ins and account changes are recorded in an audit log. Network addresses are never stored or logged: the log keeps only a tag that changes every day and can't be turned back into an address, so repeated attempts can be spotted without recording who you are.
The server cannot see the content of messages, attachments, reactions or edits, your private keys, or your chat passphrase.
What encryption can't protect against
- A device that is itself compromised, or someone with access to your unlocked device.
- The people you chat with: they can copy, forward or photograph anything you send them, burn messages included.
- In a browser, the chat's code is loaded from the server each time; if the server itself were taken over, the code could be altered. The signed, installed CipherChat apps don't share this weakness.
- Losing your chat passphrase: there is no recovery. You can start a new identity, but older messages can't be read with it.
- Server backups made before a message was deleted may still contain its ciphertext, which stays unreadable without the room key.
Keeping and deleting data
- Messages are kept until they are deleted, or for the retention period a room is set to (1 to 365 days). Deleting a message deletes it for everyone, attachments included.
- You can leave rooms and ask the operator to delete your account at any time.
- Access requests (your name, email address and message) are used only to decide on and answer the request, are stored without your network address, and are deleted 90 days after a decision (180 days if never answered).
Your rights and contact
Questions about your data, or requests to see or delete it, go to the operator of this server. If the operator publishes its own privacy policy, it applies alongside this statement.