ONYX: Selbst gehosteter Messenger mit E2EE und Offline-LAN-Modus
ONYX bietet das perfekte Gleichgewicht zwischen einfacher Bereitstellung und leistungsstarken Funktionen: Ein Node.js-Server mit MariaDB und Redis, sowie ein Flutter-basierter Client für Android, Windows, macOS und Linux. Es unterstützt vollständige Ende-zu-Ende-Verschlüsselung mit X25519 und XChaCha20-Poly1305 sowie einen einzigartigen Offline-LAN-Modus, der Kommunikation ohne Internet über UDP-Broadcast ermöglicht.
Architektur und Technologie-Stack
Der Server läuft mit Express und WebSocket (express-ws + ws), verwendet MariaDB für die Datenspeicherung und Redis für Sitzungen und Caching. Dateien werden in einem S3-kompatiblen Speichersystem mit AWS SDK v3 gespeichert. Die Transportprotokolle umfassen wss:// und HTTP/REST. Die Verschlüsselung nutzt X25519 für den Schlüsselaustausch, XChaCha20-Poly1305 für Nachrichten und AES-256-GCM für Medien innerhalb des LANs.
Wesentliche Vorteile von XChaCha20-Poly1305 gegenüber AES-GCM:
- Konstante Ausführungszeit unabhängig von AES-NI-Unterstützung.
- Verlängertes Nonce (192 Bit vs. 96 Bit), was die Kollisionswahrscheinlichkeit bei lang laufenden Sitzungen reduziert.
Verschlüsseltes Paketformat: [pubkey 32B] [nonce 12B] [ciphertext] [mac 16B].
LAN-Modus: Automatische Erkennung und Offline-Nachrichten
Clients senden alle 5 Sekunden UDP-Pakete an 255.255.255.255:45678, die folgenden JSON-Daten enthalten:
{
"username": "alice",
"timestamp": 1710000000000,
"pubkey": "<X25519-Öffentlicher Schlüssel, base64>"
}
Empfangende Clients aktualisieren interne Tabellen, die Benutzername → IP und Benutzername → Öffentlicher Schlüssel abbilden. Kein mDNS, keine manuelle IP-Eingabe und kein zusätzlicher Handshake erforderlich – die Verschlüsselung beginnt sofort.
Medien werden in etwa 32 KB großen Blöcken über Port 45679 übertragen, wobei jeder Block unabhängig mit AES-256-GCM verschlüsselt wird. Entschlüsselung und Wiedergabe starten bereits beim Eintreffen der ersten Blöcke.
Mehrgeräte-Synchronisation mit voller E2EE-Sicherheit
Beim Hinzufügen eines neuen Geräts fordert es die Autorisierung eines vertrauenswürdigen Geräts an. Nach Genehmigung werden die Schlüssel ausgetauscht – der Server sieht niemals Klartext.
In privaten Chats sendet der Server verschlüsselte Kopien der Nachrichten an jedes Benutzergerät (eine pro öffentlichem Schlüssel). Nur eingehende Nachrichten werden synchronisiert; ausgehende Nachrichten bleiben nur auf dem Sendegerät sichtbar. Diese Architektur gewährleistet Sicherheit und ermöglicht gleichzeitig eine grundlegende Synchronisation.
Schlüsselableitung: HKDF-SHA256 mit Labels (onyx-lan-v2 für LAN, separate Labels für einzelne Chats).
Cross-Plattform-Clients mit Flutter
Einheitlicher Codebase für vier Plattformen. Flutter mit Skia/Impeller sorgt für flüssige 60 FPS ohne DOM-Aufwand. Desktop-Optimierungen beinhalten:
fps_booster,fps_optimizer,fps_stimulatormessage_load_optimizer,chat_preloader
Desktop-spezifische Funktionen:
- System-Tray mit Minimierungsfunktion
- Einzelinstanz-App via IPC
- Benutzerdefinierte Titelleiste mit Ziehpunkten
- Native Benachrichtigungen unter Windows
Sicherheit jenseits von E2EE
- PIN und Biometrie über Flutter Secure Storage
- Proxy-Unterstützung (
proxy_manager.dart) - Sichere Speicherung: Keychain / Android Keystore
- Sitzungsverwaltung: Sitzungen von vertrauenswürdigen Geräten anzeigen und löschen
Konten verwenden nur Benutzernamen und Passwort – keine Telefonnummer oder E-Mail erforderlich. Benutzernamen sind dauerhaft, mehrere Konten innerhalb der App möglich, und vollständige Löschung aller Daten ist möglich.
Gruppen, Kanäle und selbst gehostete Instanzen
Integrierte Gruppen und Kanäle über den ONYX-Server – keine E2EE für Synchronisationszwecke.
Externe selbst gehostete Optionen:
- Lokales Netzwerk: Dateifreigabe und Chat ohne Internet
- Private Community auf einem VPS mit Einladungs-Zugang
- Öffentlicher Kanal mit Einladungs-basierter Abonnement
Verbindung: Server-Adresse im external_server_join_screen eingeben. Bereitstellung: ONYX Server.
Gruppen: bidirektional. Kanäle: Admin-only.
Lokale 'Favoriten'-Speicherung
Tab für Notizen, Kategorien (Passwörter, Medien, Links). Nur lokal gespeichert – keine Synchronisation, kein Serverzugriff.
Hauptvorteile:
- Offline-LAN: UDP-Broadcast + chunkweise Medienübertragung
- E2EE-Stack: X25519, XChaCha20-Poly1305, Sitzungsschlüssel
- Mehrgeräte: Gerätespezifische Verschlüsselung, sichere Autorisierung
- Flutter: Optimierte 60 FPS-Oberfläche auf allen Plattformen
- Selbst gehostet: Externe Instanzen für Gruppen und Kanäle
Das Projekt befindet sich aktuell in der Beta-Phase und eignet sich ideal für private Kommunikation und offline lokale Netzwerke.
— Editorial Team
Noch keine Kommentare.