Files
mesh/docs/security.md
Gilles Soulier 1d177e96a6 first
2026-01-05 13:20:54 +01:00

65 lines
2.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 📄 security.md — Mesh Security Model
## 1. Principes
- **Server = control plane** : auth, ACL, signaling WebRTC, événements, notifications.
- **Clients/Agents = data plane** : média + fichiers + terminal en P2P (WebRTC).
- Le serveur ne transporte pas de flux média ni de transferts lourds (sauf fallback explicite).
## 2. Identités
- user_id : utilisateur
- peer_id : instance client web
- device_id : agent desktop
- room_id : salon (24 personnes)
## 3. Authentification
- JWT (access token court recommandé, refresh optionnel).
- WS authentifié (JWT dans query param sécurisé ou header lors du handshake).
- Rotation et révocation (à prévoir V1/V2).
## 4. Autorisations : Capability Tokens
Le serveur émet des tokens à TTL court (ex 120s) contenant:
- room_id
- peer_id (ou device_id)
- caps : ["call", "screen", "share:file", "share:folder", "terminal:view", "terminal:control"]
- contraintes optionnelles : max_size, max_rate, target_peer_id
Règles:
- aucun offer WebRTC nest accepté/relayé sans capability valide associée à laction.
- un viewer en terminal na pas le droit denvoyer `TERM_IN` sans `terminal:control`.
## 5. WebRTC sécurité
- Chiffrement natif DTLS/SRTP (média) + DTLS (DataChannel).
- Vérification fingerprint SDP côté client (V1+).
- ICE: STUN + TURN (TURN = bande passante sensible; limiter via quotas).
## 6. Terminal share (SSH preview)
- Le SSH tourne **sur la machine du partageur** (agent), via PTY.
- Aucun secret SSH (clé, mot de passe) nest transmis aux viewers.
- Mode par défaut : **preview (read-only)**.
- “Take control” : un seul contrôleur à la fois, arbitrage via serveur (capability).
- Option V2: masquage best-effort de secrets (non garanti).
## 7. Notifications (Gotify)
- Le serveur et lagent peuvent notifier Gotify.
- Ne jamais inclure de secrets dans le texte des notifications.
- Niveau de détail configurable (ex: “Nouveau message” vs contenu).
## 8. Journalisation
- Server logs: auth failures, room joins, capability issuance, signaling events (sans contenu média).
- Agent logs: démarrage/arrêt de partage, erreurs sync, diagnostics ICE.
- Politique de rétention courte (ex 714 jours) + rotation.
## 9. Menaces & mitigations (résumé)
- Usurpation peer_id → JWT + WS auth + device_id registration.
- Replay doffers → capability TTL court + nonce/session_id.
- Accès non autorisé à une room → ACL server-side + tokens scoped room_id.
- Exfiltration via terminal → preview-only par défaut + contrôle explicite.
- TURN abuse → quotas, credentials temporaires, rate limiting.
## 10. Roadmap sécurité
- Refresh tokens + révocation
- RBAC (owner/member/guest)
- E2E applicatif optionnel (au-dessus de WebRTC)
- Attestation device (optionnel)