xdeskv1.0.0
SecuritySécurité

Security modelModèle de sécurité

The layers that protect a connection, who can reach the host, and the honest limits.Les couches qui protègent une connexion, qui peut atteindre l'hôte, et les limites honnêtes.

Every connection is end to end TLS 1.3 with a post-quantum key exchange, and the person in front of the PC sees and decides everything.

Chaque connexion est en TLS 1.3 de bout en bout avec un échange de clés post-quantique, et la personne devant le PC voit et décide tout.

1. LayersCouches

LayerWhat
TransportTLS 1.3 only, X25519MLKEM768 hybrid key exchange first (OpenSSL >= 3.5); native clients refuse anything not post-quantum
Host identityself-signed ECDSA P-256 certificate, pinned by the native clients on first use; a changed identity is refused
Code proof (native)HMAC(Argon2id(code, salt), transcript), transcript = nonces + sha256(certificate): no offline brute force, no relay by a man in the middle
Mutual auththe host answers with its own proof: a fake host is detected
Trusted devices256-bit device secret, same HMAC proof, given only when the host trusts the device
Brute forcemaxAuthFailures wrong codes from one address: 1 h ban and a new code
Registrydevices.json signed with an HMAC key (registry.key, 0600)
Webstrict CSP (default-src 'self'), no-store, no inline script, frame-ancestors 'none'
UDP videoAES-256-GCM, per-session keys sent inside TLS, replay window, no answer to an unauthenticated address

How the code proof works.

CoucheQuoi
TransportTLS 1.3 seulement, échange de clés hybride X25519MLKEM768 en premier (OpenSSL >= 3.5) ; les clients natifs refusent tout ce qui n'est pas post-quantique
Identité de l'hôtecertificat ECDSA P-256 auto-signé, épinglé par les clients natifs à la première connexion ; une identité changée est refusée
Preuve du code (natif)HMAC(Argon2id(code, sel), transcript), transcript = nonces + sha256(certificat) : pas de force brute hors ligne, pas de relais par un homme du milieu
Authentification mutuellel'hôte répond avec sa propre preuve : un faux hôte est détecté
Appareils de confiancesecret d'appareil de 256 bits, même preuve HMAC, donné seulement quand l'hôte fait confiance à l'appareil
Force brutemaxAuthFailures mauvais codes depuis une adresse : ban d'1 h et nouveau code
Registredevices.json signé avec une clé HMAC (registry.key, 0600)
WebCSP stricte (default-src 'self'), no-store, aucun script inline, frame-ancestors 'none'
Vidéo UDPAES-256-GCM, clés par session envoyées dans TLS, fenêtre anti-rejeu, aucune réponse à une adresse non authentifiée

Comment marche la preuve du code.

2. Who can reach the hostQui peut atteindre l'hôte

Only the LAN and the PC itself, plus the one path the exposure mode adds; a peer coming through another path is dropped before TLS. Sharing starts off at each launch, and each start gives a new code.

Seulement le LAN et le PC lui-même, plus le chemin que le mode d'exposition ajoute ; un pair arrivant par un autre chemin est coupé avant TLS. Le partage démarre arrêté à chaque lancement, et chaque démarrage donne un nouveau code.

3. LimitsLimites

Warning. A remote terminal runs with the rights of your user. The tamper protection stops the usual ways of touching xdesk, not a determined attacker with a shell: give terminals only to people you trust (the right can be removed live).

  • The web client cannot read the certificate: it sends the code inside TLS without the Argon2id binding. Prefer the native clients on an untrusted network.
  • cloudflared terminates TLS at the relay.
  • The Tailscale certificate publishes the MagicDNS name in the public certificate logs.

Attention. Un terminal distant tourne avec les droits de ton utilisateur. La protection contre l'altération arrête les moyens habituels de toucher à xdesk, pas un attaquant déterminé avec un shell : ne donne les terminaux qu'à des personnes de confiance (le droit peut être retiré en direct).

  • Le client web ne peut pas lire le certificat : il envoie le code dans TLS sans la liaison Argon2id. Préfère les clients natifs sur un réseau non sûr.
  • cloudflared termine TLS au relais.
  • Le certificat Tailscale publie le nom MagicDNS dans les logs publics de certificats.