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 :
- 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.
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.
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_stimulatormessage_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
Aucun commentaire pour le moment.