Security
What you write can only be read by the two of you. This page explains how that works, and where it reaches its limits.
This page explains the technology in plain language, with technical terms in brackets. The full description is public: the protocol and the threat model.
Who can read what?
| Content | You | Us, the team behind the app | Apple and Google |
|---|---|---|---|
| Private question and note | Only you | No | No |
| Shared question | Both of you | No | No |
| Answer | Both of you, once both have answered | No | No |
| Comment | Both of you | No | No |
| Push notification | Only a general notice, never the text of a question | No | No |
How the encryption works
Everything you write is encrypted on your phone before it leaves the phone (end-to-end encryption). Our server only holds encrypted packages. The keys exist only on your phones.
- Your key: When you set up the app, it creates a secret root key and derives all other keys from it. You can write it down as a recovery code of twelve words (BIP-39).
- Your shared key: When you connect, you exchange public keys. It is safest side by side, with a code to scan. If you connect via a link, you also compare a short safety code of ten symbols, so you notice if someone has got in between.
- Every answer has its own key. The other person only receives a time-limited loan of that key. This matters for separating (see below).
We rely on proven methods and maintained, widely reviewed libraries. We invented none of them ourselves: XChaCha20-Poly1305 for content, X25519 and HPKE (RFC 9180) for key exchange, Ed25519 for signatures, HKDF-SHA256 to derive keys and Argon2id for the app lock PIN. The core is written in Rust.
Answers only once both have answered
Your answer is locked twice. Your app deposits the outer key on the server. The server only hands it to the other person once they have deposited an answer of their own. The server never has the inner key. So the server alone cannot read your answer, and the other person cannot read it early, not even with a modified app.
To be honest: if the server and the other person worked together, they could open an answer early. The mechanism does not protect against that case.
How separating works
When one person separates, the server immediately deletes all key loans between you. Both apps delete the other person’s answers and comments and their keys. The questions stay with both of you.
If the other phone is offline at that moment, it can still read the content until its loan expires, at most 7 days after its last connection. The app shows you the latest date from which the content is unreadable.
For one year you can undo the separation together. After that, the server deletes everything still belonging to your connection.
What the server still learns
| The server knows | The server does not know |
|---|---|
| Account IDs, public keys, push tokens, device IDs | Names, email addresses, phone numbers |
| Which two accounts are connected, whether and when they separated | Why |
| When someone uploaded an encrypted package and roughly how large it is | Whether it is a question, answer or note, and what it says |
| Whether 0, 1 or 2 answers have been deposited for a shared question | The question and the answers |
| That and when a push notification is sent to the other person | What kind of notification |
| The IP address during a request | It is not stored |
We cannot hand over more than this, not even at the request of an authority.
Which services are involved
- Our server is hosted by Hetzner Online GmbH in Germany. It only stores encrypted content.
- Apple and Google deliver push notifications. They are encrypted and never contain the text of a question or answer.
- Prompts come from the conversation game “… einfach reden!”. Our server fetches the list and passes it on signed. Your phones never contact that service directly.
More in the privacy policy.
Where protection ends
- Screenshots, photos and copying by hand cannot be prevented.
- Anyone holding your unlocked phone sees what you see. That is why the app lock is on from the start.
- A modified app or a tampered phone can keep everything it was ever allowed to read.
- If you lose your phone and your recovery code, your own content is gone. We cannot get it back.
- The server knows who is connected with whom and when you are active (see above).
Check it yourself
All of the code is public (AGPL-3.0). Before launch we review the app ourselves against OWASP MASVS. There has been no external review yet. Once there is an audit report, we will link it here.
Found a vulnerability?
Please write to hello@ourquestiondiary.app before publishing it. We will reply as soon as we can and, if you like, credit you once it is fixed. The contact details are also available in machine-readable form in our security.txt.
Later, we will publish here once a year whether and how often authorities have requested data.