How the app talks to the server: X25519 plus ML-KEM-768

TLS protects the web panel. The desktop app adds its own hybrid post-quantum channel on top, with the server key pinned on first use.

Activity data and screenshots are sensitive, and they are stored for a long time. Traffic recorded today could be decrypted by a quantum computer later. That is why the app does not rely only on the TLS setup of whatever host you deploy to.

The handshake

  1. The app fetches the server's X25519 public key and ML-KEM-768 encapsulation key.
  2. It encapsulates a shared secret with ML-KEM and runs two X25519 exchanges (static and ephemeral).
  3. All three secrets go through HKDF-SHA256 into two AES-256-GCM keys, one per direction.
  4. The server proves it holds the keys with a confirmation MAC. A changed server key is refused.

Messages carry a sequence number and a timestamp, so replays are rejected. Screenshots go to a random upload path that exists only for one person and can be rotated from the panel.

Why hybrid

ML-KEM is new. X25519 is well studied. Combining them means an attacker has to break both. If either one holds, the session stays private.