Keys never leave the phone
Created on the device and staying there. The server does not have them - so it cannot hand them to anyone.
How it works
So the words above can be checked instead of believed. Below - the same thing as one picture.
Created on the device and staying there. The server does not have them - so it cannot hand them to anyone.
Bytes, size, time and a queue address. The sender's name sits inside the ciphertext, but the server still knows who is sending: you send with your account's token. Hiding that too (Sealed Sender) is planned.
PQXDH: X25519 together with ML-KEM-1024. What is recorded today will not be opened by a computer that does not exist yet.
Double Ratchet: one stolen key opens neither the messages before it nor the ones after.
The only way back in. The backup on the server is encrypted with them - we cannot open it.
A delivered one is erased at once, an undelivered one after 30 days, attachments after 14.
Encryption
Cryptography is not something a startup should invent. Tysha runs on libsignal - the same library Signal uses, reviewed by independent cryptographers for years.
Pinned by version and checksum. We did not write it and did not rewrite it - we only built it in.
PQXDH: X25519 together with ML-KEM-1024 in every handshake. A test in the build measures the real key size.
Double Ratchet: one stolen key opens neither earlier messages nor later ones.
SPQR (Triple Ratchet) on iPhone and iPad: post-quantum key updates after the handshake too. Not yet verified on other platforms.
60 digits or a QR code, compared in person. If a contact's key changes, sending stops until you verify again.
Attachments are encrypted with AES-256-GCM and a random key that travels inside the encrypted message.
Server
The server carries envelopes and keeps the minimum delivery needs. Here is everything worth knowing, in the same words as on the Privacy page.
The server and the call relay are in the EU.
Username, notification token, queue address, public keys for introductions, the encrypted account backup. No message text, no encryption keys.
The sender's name is not on the envelope, but the server sees which account sent it to which queue. That is how delivery works.
A delivered envelope is erased at once, an undelivered one after 30 days, files after 14, an invite code after 15 minutes.
No IP addresses, names or request bodies. The exception is the relay log with IPs: three 10 MB files that overwrite themselves.
What is erased does not come back from a backup - there is none. Your account backup is encrypted with your 12 words, which we do not have.
The app proves to the server it is genuine (App Attest) and checks the server's certificate - neither side can be swapped.
Whether everything works is shown on a separate status page outside our infrastructure: status.202ok.online/status/tysha.
App code on request (AGPL), server code - no. So the server's limits are described in words and checked by the audit.
Threat model
Next
An honest limit today is not a limit forever. Here is the plan, in order.
Padding to multiples of 256 bytes, so size reveals neither the kind of envelope nor the length of the text.
The scope is written, the auditor is being chosen. After that, a reward for anyone who finds a vulnerability.
So anyone can check that the store build was made from exactly the code we hand out.