ONYX: samostatný messenger s E2EE a offline LAN režimem
Messenger ONYX nabízí vyvážený přístup mezi jednoduchostí nasazení a funkcionalitou: server na Node.js s MariaDB a Redis, klient na Flutter pro Android, Windows, macOS a Linux. Podporuje plné end-to-end šifrování založené na X25519 a XChaCha20-Poly1305, plus unikátní režim práce v lokální síti bez internetu prostřednictvím UDP broadcastu.
Architektura a technologický stack
Server je postaven na Express s WebSocket (express-ws + ws), databáze je MariaDB pro data a Redis pro relace/kachování. Soubory jsou uloženy ve S3 kompatibilním úložišti přes AWS SDK v3. Přenos: wss:// a HTTP/REST. Šifrování používá X25519 pro výměnu klíčů, XChaCha20-Poly1305 pro zprávy a AES-256-GCM pro média v LAN.
Klíčové výhody XChaCha20-Poly1305 oproti AES-GCM:
- Konstantní čas provádění bez závislosti na AES-NI.
- Rozšířený nonce (192 bitů vs 96), minimalizuje kolize v dlouhých relacích.
Formát zašifrovaného balíčku: [pubkey 32B] [nonce 12B] [ciphertext] [mac 16B].
LAN režim: automatické zjištění a výměna bez internetu
Klienti každých 5 sekund posílají UDP broadcast na 255.255.255.255:45678 s JSON:
{
"username": "alice",
"timestamp": 1710000000000,
"pubkey": "<X25519 public key, base64>"
}
Přijímající klienti aktualizují tabulky username → IP a username → pubkey. Bez mDNS, ručního zadání IP nebo dalšího handshake – šifrování se spustí okamžitě.
Média se přenáší částmi po ~32 KB na portu 45679, každá část je zašifrovaná nezávisle AES-256-GCM. Dekódování a zobrazení začíná již části.
Multidevice s zachováním E2EE
Nové zařízení požaduje autorizaci od důvěryhodného. Po schválení probíhá výměna klíčů. Server nevidí plaintext.
V soukromých chatu server posílá zašifrované kopie zpráv na každé zařízení uživatele (odděleně podle pubkey zařízení). Synchronizují se pouze příchozí: odchozí jsou viditelné pouze na odesílacím zařízení. Toto je kompromis bez ohrožení bezpečnosti.
Derivace klíčů: HKDF-SHA256 s etiketami (onyx-lan-v2 pro LAN, odděleně pro chaty).
Křížovoplatforemní klient na Flutter
Jednotný kódový základ pro 4 platformy. Flutter s Skia/Impeller zajišťuje 60 FPS bez DOM. Optimalizace pro desktop:
fps_booster,fps_optimizer,fps_stimulator.message_load_optimizer,chat_preloader.
Desktopové funkce:
- Soustavný systémový panel s minimalizací.
- Single-instance prostřednictvím IPC.
- Vlastní titlebar s drag-zónou.
- Nativní upozornění na Windows.
Bezpečnost mimo E2EE
- PIN/ biometrie přes Flutter Secure Storage.
- Podpora proxy (
proxy_manager.dart). - Zabezpečené úložiště: Keychain/Android Keystore.
- Správa relací: prohlížení a odstranění z důvěryhodného zařízení.
Účty: pouze username + heslo, bez telefonního čísla nebo e-mailu. Username nelze změnit, více účtů v aplikaci, kompletní odstranění dat.
Skupiny, kanály a samostatné instance
Vnitřní skupiny/kanály přes ONYX-server – bez E2EE pro synchronizaci.
Externí samostatné instance:
- Lokální síť: sdílení souborů a chat bez internetu.
- Soukromá komunita na VPS na pozvánku.
- Veřejný kanál s přihlášením na pozvánku.
Připojení: zadání adresy na external_server_join_screen. Nasazení: ONYX Server.
Skupiny: dvousměrné. Kanály: pouze správci.
Místní úložiště «Oblíbené»
Karta pro poznámky/kategorie (hesla, média, odkazy). Uloženo pouze místně, bez synchronizace ani serverového přístupu.
Důležité:
- LAN bez internetu: UDP broadcast + částové média.
- E2EE stack: X25519, XChaCha20-Poly1305, relační klíče.
- Multidevice: šifrování podle zařízení, autorizace.
- Flutter: optimalizované UI 60 FPS na všech platformách.
- Samostatné nasazení: externí instance pro skupiny/kanály.
Projekt je ve verzi beta, vhodný pro soukromé komunikace a lokální sítě.
— Editorial Team
Zatím žádné komentáře.