Zurück zur Startseite

ONYX Messenger: E2EE und LAN ohne Internet

ONYX — plattformübergreifender selbst gehosteter Messenger mit E2EE auf XChaCha20-Poly1305 und LAN-Modus via UDP-Broadcast. Unterstützt Multi-Device, externe Instanzen für Gruppen/Kanäle. Client auf Flutter optimiert für 60 FPS auf Desktop und Mobile.

ONYX: Messenger mit LAN und vollständiger E2EE-Verschlüsselung
Advertisement 728x90

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:

Google AdInline article slot
  • 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.

Google AdInline article slot

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.

Google AdInline article slot

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_stimulator
  • message_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

Advertisement 728x90

Weiterlesen