Security

What is protected, how, and what you should do yourself.

In short

How a session is protected

  1. The two computers exchange a short greeting that says which version and sign-in methods they support.
  2. With a password: they run SPAKE2, a password-authenticated key exchange. Both sides prove they know the password without revealing it. Someone listening, or a server in the middle, gets one guess per connection attempt and nothing to test guesses against later.
  3. With server access: the server issues a signed ticket naming the user, the device, the access level and the controller's key, valid for two minutes. The device checks the signature against the server key it stored when it enrolled, and checks that the ticket belongs to the computer presenting it.
  4. They then run the Noise protocol (Noise_XX, or Noise_XXpsk3 when a password is used, with X25519, ChaCha20-Poly1305 and BLAKE2s) to agree on session keys. The greeting from step 1 is bound into this step, so it cannot be altered in transit.

Hover over the lock in the session toolbar to see the remote computer's key fingerprint. The same fingerprint is shown on that computer under Settings → This device.

Passwords and guessing

ItemProtection
One-time password8 random characters, replaced after each session that used it, and on demand with the refresh button.
Permanent passwordStored only as an Argon2 key derived from it.
Direct connectionsAfter 5 wrong passwords from one address within a minute, that address is refused for a while.
Dashboard sign-inPasswords are stored as Argon2id hashes. After 5 failed attempts for a user from one address, sign-in is blocked for 5 minutes. Optional two-factor codes.
Sign-in sessionsLast 7 days. The server stores only a hash of each session token.

What the server can and cannot do

Because the server authorises access, whoever controls an administrator account or the server's data folder can grant themselves access to enrolled devices. Protect the server accordingly.

What you should do

On the computer itself

Reporting a problem

If you find a security problem, report it privately to the maintainers of the repository rather than in a public issue.