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
- The app fetches the server's X25519 public key and ML-KEM-768 encapsulation key.
- It encapsulates a shared secret with ML-KEM and runs two X25519 exchanges (static and ephemeral).
- All three secrets go through HKDF-SHA256 into two AES-256-GCM keys, one per direction.
- 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.