ONYX: samodzielny messenger z szyfrowaniem E2EE i trybem LAN
Messenger ONYX oferuje idealne połączenie prostoty wdrożenia i zaawansowanej funkcjonalności: serwer na Node.js z MariaDB i Redis, klient na Flutter dla Androida, Windows, macOS i Linux. Obsługuje pełne szyfrowanie end-to-end oparte na X25519 i XChaCha20-Poly1305, a także unikalny tryb pracy w lokalnej sieci bez dostępu do internetu przez broadcast UDP.
Architektura i stos technologiczny
Serwer wybudowany jest na Express z WebSocket (express-ws + ws), baza danych to MariaDB do przechowywania danych oraz Redis do sesji i buforowania. Pliki są przechowywane w magazynie kompatybilnym z S3 poprzez AWS SDK v3. Transport: wss:// i HTTP/REST. Szyfrowanie wykorzystuje X25519 do wymiany kluczy, XChaCha20-Poly1305 do wiadomości oraz AES-256-GCM do mediów w sieci LAN.
Kluczowe zalety XChaCha20-Poly1305 w porównaniu do AES-GCM:
- Stały czas działania niezależnie od obecności rozszerzenia AES-NI.
- Rozszerzony nonce (192 bity vs 96), co minimalizuje kolizje w długich sesjach.
Format zaszyfrowanego pakietu: [pubkey 32B] [nonce 12B] [ciphertext] [mac 16B].
Tryb LAN: automatyczne wykrywanie i wymiana bez internetu
Klienci co 5 sekund wysyłają broadcast UDP na 255.255.255.255:45678 z JSON-em:
{
"username": "alice",
"timestamp": 1710000000000,
"pubkey": "<publiczny klucz X25519, base64>"
}
Odbierający klienci aktualizują tabele username → IP oraz username → pubkey. Bez mDNS, ręcznego wpisywania adresów IP ani dodatkowych handshake’ów — szyfrowanie rozpoczyna się natychmiast.
Media przesyłane są porcjami ok. 32 KB przez port 45679, każda część szyfrowana jest niezależnie przez AES-256-GCM. Deszyfrowanie i renderowanie zaczynają się już częściowo.
Wielo urządzeniowość z zachowaniem E2EE
Nowe urządzenie żąda autoryzacji od zaufanego. Po zatwierdzeniu — następuje wymiana kluczy. Serwer nie widzi tekstu jawnego.
W czatach prywatnych serwer wysyła zaszyfrowane kopie wiadomości do każdego urządzenia użytkownika (oddzielnie pod publicznym kluczem urządzenia). Synchronizowane są tylko wiadomości przychodzące: wychodzące są widoczne wyłącznie na urządzeniu nadającym. To kompromis bez naruszenia bezpieczeństwa.
Derwacja kluczy: HKDF-SHA256 z etykietami (onyx-lan-v2 dla trybu LAN, osobno dla czatów).
Klient wieloplatformowy na Flutterze
Jedna baza kodu dla 4 platform. Flutter z Skia/Impeller zapewnia płynność 60 FPS bez DOM. Optymalizacje dla stacjonarnych:
fps_booster,fps_optimizer,fps_stimulator.message_load_optimizer,chat_preloader.
Funkcje dla komputerów:
- Systemowy pasek zminimalizowany do tła.
- Tryb single-instance przez IPC.
- Niestandardowa pasek tytułu z obszarami przeciągania.
- Natywne powiadomienia na Windowsie.
Bezpieczeństwo poza E2EE
- PIN i biometria przez Flutter Secure Storage.
- Obsługa proxy (
proxy_manager.dart). - Bezpieczne przechowywanie: Keychain/Android Keystore.
- Zarządzanie sesjami: przegląd i usuwanie z zaufanego urządzenia.
Konta: tylko username + hasło, bez numeru telefonu czy e-maila. Nazwa użytkownika nie da się zmienić, możliwość wielu kont w aplikacji, pełna usunięcie danych.
Grupy, kanały i instancje samodzielne
Wbudowane grupy/kanały przez serwer ONYX — bez szyfrowania E2EE dla synchronizacji.
Zewnętrzne instancje samodzielne:
- Lokalna sieć: wymiana plików i czaty bez internetu.
- Prywatne społeczności na VPS na zaproszenie.
- Publiczny kanał z subskrypcją na zaproszenie.
Połączenie: wpisanie adresu na ekranie external_server_join_screen. Wdrożenie: ONYX Server.
Grupy: dwukierunkowe. Kanały: tylko admini.
Lokalne przechowywanie «Ulubione»
Karta do notatek/kategorii (hasła, media, linki). Przechowywane wyłącznie lokalnie, bez synchronizacji ani dostępu do serwera.
Co ważne:
- Tryb LAN bez internetu: broadcast UDP + fragmentacja mediów.
- Stos E2EE: X25519, XChaCha20-Poly1305, klucze sesyjne.
- Wielo urządzeniowość: szyfrowanie per-device, autoryzacja.
- Flutter: optymalizowany interfejs 60 FPS na wszystkich platformach.
- Samodzielne wdrożenie: zewnętrzne instancje dla grup i kanałów.
Projekt w wersji beta, idealny do prywatnej komunikacji i lokalnych sieci.
— Editorial Team
Brak komentarzy.