Trust model

This document is the answer to: "if I run sudo, what do I have to trust, and what can I check?"

It's meant to be readable. The deep protocol detail is in SECURITY.md.


The short version

You trust the device you're using. You do not trust the server. You partially trust the people you message.

Concretely:


What the server CAN see

Everything in this list is unavoidable for the server to do its job. We document it honestly rather than pretend it's not visible.


What the server CANNOT see


What linked devices mean

A linked device is a second browser (phone, tablet, another computer) where you've taken your account.

You can revoke any device from any other device. Revocation is a signed statement that says "this device is no longer authorized." The server stops accepting that device's requests immediately. Anything the revoked device already had locally remains on that device — revocation is about future access through the server, not retroactive removal.


What happens if a device is lost

The lost device still has whatever your account had stored locally. If it falls into someone's hands:

What you should do:

1. Revoke the device from another one you still have. The server will reject its future requests. 2. Change your password by exporting a backup file with a new password (the old encrypted lockbox stays encrypted under the old password; future devices won't be using the old one).

If you've lost all your devices and have no backup file: the account is gone. The server cannot recover it because the server never had the means to.


Why every request is signed

When your phone asks the server "give me my messages," your phone signs that request with a private key. The server checks the signature against the public key it has on file for your handle. If the signature is missing, expired, replayed, or made by a key that isn't yours, the server refuses.

This is how the server knows it's really you. There is no session cookie that, if stolen, lets someone else act as you. There is no password that, if intercepted, gives someone access. Every action is independently verifiable.

This was put in place during Phase 14 of development. Before that, several routes accepted "I am @you" as a claim with no proof. The fix was to require a per-request signature on every operation that mutates trust state. See SECURITY_AUDIT.md for the full audit and SECURITY.md for the wire format.


What the operator (whoever runs the server) can do

The person running the sudo node — operator-of-record for this particular install — has some powers it's worth being honest about:

If you don't trust the operator at all, run your own sudo node. The project is open source. A single small VPS will host an instance.


Federation (not yet)

Right now, an account on one sudo node only talks to other accounts on the same node. Federation — accounts on different nodes messaging each other — is on the roadmap but unimplemented.

When it lands, the trust shape will change:

Federation will not add a "super-node" or central registry. Each node is its own trust boundary.


Things that are genuinely hard

A few honest weak points in the model. These are not bugs; they're inherent to the threat model.


What you can check

Without trusting our word for any of this:

The fewer things you have to take on faith, the better. We've tried to make as many of those things as possible inspectable.