Security · Protocol v0.7.1 · not yet externally audited
How the encryption works
Everything is locked on the phone before it leaves. Our server is a mailbox for locked envelopes, and the other person only borrows the keys to your answers.
This page shows step by step what happens in the background. The short version is on the Security page, the complete one in the protocol and the threat model. The protocol is authoritative.
Robin and Kim are an invented couple. Robin is drawn in the accent colour, Kim in the text colour, the server dashed and keys in a stronger tint.
- Locked before it leavesQuestions, answers, comments and names are encrypted on the phone. Only your two phones hold keys.
- Answers open togetherA gate key waits on the server and is released only when both of you have answered.
- Keys are borrowedThe copy of your answer key on the other phone runs out after 7 days unless it is renewed.
The big picture
Readable text exists only on your phones. Everything in between is a locked envelope.
Every key grows from 12 words
On the first launch the phone draws 128 random bits and shows them as 12 English words (BIP-39). All personal keys are derived from them (HKDF-SHA256), so the words alone bring an account back on a new phone. They are never sent anywhere.
Both keep it
Pair question key
Locks shared questions, display names and "discussed" marks. It is never taken back, so shared questions survive a separation.
Yours, only lent
Answer key
One per person. It opens your answers and comments. The other person only gets a lease that expires after 7 days without renewal.
New for every item
Item key
Encrypts exactly one answer or comment and is itself locked with the answer key. A new answer key only re-locks these small keys, never the text.
Connecting two phones
Robin invites Kim with a QR code or a link. The secret part sits after the # of the link, which browsers never send to a server. With it, both phones can prove to each other that the server did not slip in someone else's keys.
Sharing a question
A question starts private. Sharing makes a copy for your shared space and leaves the private note behind.
Answers open only when both have answered
An answer gets one extra lock, the gate key. The phone uploads the answer first and then hands the gate key to the server. The server passes it on only once the other person has deposited an answer too.
Leases, withdrawing and separating
Kim's phone renews its lease on Robin's answer key at every sync. Robin's phone signs the lease anew every day, with a date. If the lease is gone, 7 days pass without renewal or Robin's signature is older than 30 days, the phone deletes the key and every answer that depends on it. Withdrawing a single answer works the same way: Robin switches to a new answer key and the old one runs out.
Notifications without content
Only four events send an immediate push: a new shared question, both answers revealed, a new comment and a separation. The sending phone seals the note itself, so neither our server nor Apple or Google learn even the type.
The building blocks
We invented none of these methods. The core of the app is written in Rust and uses maintained, widely reviewed libraries.
| Used for | Method |
|---|---|
| Encrypting content | XChaCha20-Poly1305 |
| Locking a key for another person | HPKE (RFC 9180) with X25519 |
| Signatures | Ed25519 |
| Deriving keys | HKDF-SHA256 |
| Recovery code | BIP-39 word list, 12 words, 128 bits |
| Hiding sizes | Padding to 1, 4, 16 or 64 KiB |
What encryption can't do
- A modified app or a tampered phone can keep everything it was ever able to read. Screenshots and photos can't be prevented.
- A phone that stays offline can read withdrawn or separated content for up to 7 days. If someone took over our server and kept handing out old leases, it would be at most 30 days.
- The server working together with the other person could open an answer early.
- With a modified app, the other person could give a meaningless answer to unlock yours. Answering again afterwards is shown to you.
- Losing both the phone and the 12 words means losing your own content.
- There has been no external audit yet.
What the server still learns and how to report a vulnerability is on the Security page.