Retour à l'accueil

Messager ONYX : E2EE et LAN sans internet

ONYX — messager auto-hébergé multiplateforme avec E2EE sur XChaCha20-Poly1305 et mode LAN via diffusion UDP. Prend en charge le multi-appareils, instances externes pour groupes/chaînes. Client sur Flutter optimisé pour 60 FPS sur bureau et mobile.

ONYX : messager avec LAN et chiffrement E2EE complet
Advertisement 728x90

ONYX : Messagerie auto-hébergée avec chiffrement E2EE et mode LAN hors ligne

ONYX allie simplicité de déploiement et fonctionnalités puissantes : un serveur Node.js alimenté par MariaDB et Redis, ainsi qu’un client basé sur Flutter pour Android, Windows, macOS et Linux. Il prend en charge un chiffrement end-to-end complet via X25519 et XChaCha20-Poly1305, ainsi qu’un mode LAN hors ligne unique qui permet la communication sans internet grâce à une diffusion UDP.

Architecture et pile technologique

Le serveur tourne sur Express avec WebSocket (express-ws + ws), utilise MariaDB pour le stockage des données et Redis pour les sessions et le cache. Les fichiers sont stockés dans un système compatible S3 via AWS SDK v3. Les protocoles de transport incluent wss:// et HTTP/REST. Le chiffrement repose sur X25519 pour l’échange de clés, XChaCha20-Poly1305 pour les messages, et AES-256-GCM pour les médias au sein du réseau local.

Avantages clés de XChaCha20-Poly1305 par rapport à AES-GCM :

Google AdInline article slot
  • Exécution en temps constant, indépendante de la prise en charge d’AES-NI.
  • Nonce étendu (192 bits contre 96), réduisant le risque de collision dans les sessions longues.

Format des paquets chiffrés : [pubkey 32B] [nonce 12B] [ciphertext] [mac 16B].

Mode LAN : Découverte automatique et messagerie hors ligne

Les clients diffusent des paquets UDP toutes les 5 secondes vers 255.255.255.255:45678, contenant du JSON :

{
  "username": "alice",
  "timestamp": 1710000000000,
  "pubkey": "<clé publique X25519, encodée en base64>"
}

Les clients recevant ces paquets mettent à jour leurs tables internes associant username → IP et username → pubkey. Aucune découverte mDNS, aucune saisie manuelle d’IP ou échange supplémentaire nécessaire — le chiffrement démarre instantanément.

Google AdInline article slot

Les médias sont envoyés par tranches d’environ 32 Ko sur le port 45679, chaque tranche étant chiffrée indépendamment avec AES-256-GCM. Le déchiffrement et le rendu commencent dès la réception des premières tranches.

Synchronisation multi-appareil avec protection E2EE complète

Lorsqu’un nouvel appareil est ajouté, il demande une autorisation à un appareil fiable. Après validation, les clés sont échangées — le serveur n’a jamais accès aux données en clair.

Dans les conversations privées, le serveur envoie une copie chiffrée de chaque message à chaque appareil utilisateur (une par clé publique). Seuls les messages entrants sont synchronisés entre appareils ; les messages sortants restent visibles uniquement sur l’appareil d’envoi. Ce design préserve la sécurité tout en permettant une synchronisation basique.

Google AdInline article slot

Déduction des clés : HKDF-SHA256 avec étiquettes (onyx-lan-v2 pour le LAN, étiquettes distinctes pour chaque conversation).

Client multiplateforme construit avec Flutter

Code unique pour quatre plateformes. Flutter, alimenté par Skia/Impeller, garantit une performance fluide à 60 FPS sans surcharge DOM. Optimisations desktop incluent :

  • fps_booster, fps_optimizer, fps_stimulator
  • message_load_optimizer, chat_preloader

Fonctionnalités spécifiques au desktop :

  • Zone système avec minimisation
  • Application à instance unique via IPC
  • Barre de titre personnalisée avec zones de glissement
  • Notifications natives sous Windows

Sécurité au-delà du chiffrement E2EE

  • Code PIN et biométrie via Flutter Secure Storage
  • Support de proxy (proxy_manager.dart)
  • Stockage sécurisé : Keychain / Android Keystore
  • Gestion des sessions : visualisation et suppression depuis les appareils fiables

Les comptes utilisent uniquement un nom d’utilisateur et un mot de passe — pas de numéro de téléphone ni d’email requis. Les noms d’utilisateur sont permanents, plusieurs comptes sont pris en charge dans l’application, et la suppression complète des données est possible.

Groupes, canaux et instances auto-hébergées

Groupes et canaux intégrés via le serveur ONYX — aucun chiffrement E2EE pour les besoins de synchronisation.

Options d’hébergement externe :

  • Réseau local : partage de fichiers et chat sans internet
  • Communauté privée sur VPS avec accès par invitation
  • Canal public avec abonnement par invitation

Connexion : saisissez l’adresse du serveur dans l’écran external_server_join_screen. Déploiement : ONYX Server.

Groupes : bidirectionnels. Canaux : administrateur uniquement.

Stockage local des « Favoris »

Onglet dédié aux notes, catégories (mot de passe, médias, liens). Stocké uniquement localement — aucune synchronisation, aucune connexion au serveur.

Points forts :

  • Mode LAN hors ligne : diffusion UDP + transfert par tranches de médias
  • Pile E2EE : X25519, XChaCha20-Poly1305, clés de session
  • Multi-appareil : chiffrement par appareil, authentification sécurisée
  • Flutter : interface 60 FPS optimisée sur toutes les plateformes
  • Auto-hébergé : instances externes pour groupes et canaux

Le projet est actuellement en bêta, idéal pour les communications privées et les réseaux locaux hors ligne.

— Editorial Team

Advertisement 728x90

Lire ensuite