ONYX: Mensajero Autoalojado con E2EE y Modo LAN Sin Internet
ONYX ofrece un equilibrio perfecto entre facilidad de despliegue y funciones potentes: un servidor basado en Node.js con MariaDB y Redis, y una aplicación cliente construida con Flutter para Android, Windows, macOS y Linux. Soporta cifrado end-to-end completo mediante X25519 y XChaCha20-Poly1305, además de un modo único de LAN sin conexión que permite la comunicación sin internet a través de broadcast UDP.
Arquitectura y Pila Tecnológica
El servidor funciona con Express y WebSocket (express-ws + ws), utiliza MariaDB para almacenar datos y Redis para sesiones y caché. Los archivos se almacenan en un sistema compatible con S3 usando AWS SDK v3. Los protocolos de transporte incluyen wss:// y HTTP/REST. El cifrado aprovecha X25519 para el intercambio de claves, XChaCha20-Poly1305 para los mensajes y AES-256-GCM para el contenido multimedia dentro de la red local.
Ventajas clave de XChaCha20-Poly1305 frente a AES-GCM:
- Ejecución en tiempo constante independiente del soporte AES-NI.
- Nonce extendido (192 bits frente a 96), reduciendo el riesgo de colisiones en sesiones prolongadas.
Formato de paquete cifrado: [pubkey 32B] [nonce 12B] [ciphertext] [mac 16B].
Modo LAN: Detección Automática y Mensajes Fuera de Línea
Los clientes envían paquetes UDP cada 5 segundos hacia 255.255.255.255:45678, conteniendo JSON:
{
"username": "alice",
"timestamp": 1710000000000,
"pubkey": "<clave pública X25519, base64>"
}
Los clientes receptores actualizan sus tablas internas que mapean username → IP y username → pubkey. No se requiere mDNS, entrada manual de IP ni handshake adicional—el cifrado comienza de inmediato.
Los medios se envían en fragmentos de ~32 KB por el puerto 45679, con cada fragmento cifrado de forma independiente usando AES-256-GCM. El descifrado y renderizado comienzan tan pronto como llegan los primeros fragmentos.
Sincronización Multi-Dispositivo con Protección E2EE Total
Al añadir un nuevo dispositivo, solicita autorización desde uno confiable. Tras la aprobación, se intercambian claves—el servidor nunca ve texto plano.
En chats privados, el servidor envía copias cifradas de los mensajes a cada dispositivo del usuario (una por clave pública). Solo los mensajes entrantes se sincronizan entre dispositivos; los salientes permanecen visibles solo en el dispositivo emisor. Este diseño mantiene la seguridad mientras permite una sincronización básica.
Derivación de claves: HKDF-SHA256 con etiquetas (onyx-lan-v2 para LAN, etiquetas separadas para chats individuales).
Cliente Multiplataforma Construido con Flutter
Código único para cuatro plataformas. Flutter impulsado por Skia/Impeller garantiza rendimiento suave de 60 FPS sin sobrecarga del DOM. Optimizaciones para escritorio incluyen:
fps_booster,fps_optimizer,fps_stimulatormessage_load_optimizer,chat_preloader
Funcionalidades específicas para escritorio:
- Bandeja del sistema con soporte de minimizar
- Aplicación de instancia única mediante IPC
- Barra de título personalizada con zonas arrastrables
- Notificaciones nativas en Windows
Seguridad Más Allá del E2EE
- PIN y biométricos mediante Flutter Secure Storage
- Soporte de proxy (
proxy_manager.dart) - Almacenamiento seguro: Keychain / Android Keystore
- Gestión de sesiones: ver y eliminar sesiones desde dispositivos confiables
Las cuentas usan solo nombre de usuario y contraseña—no se requiere teléfono ni correo electrónico. Los nombres de usuario son permanentes, se permiten múltiples cuentas dentro de la app, y está disponible la eliminación total de datos.
Grupos, Canales y Instancias Autoalojadas
Grupos y canales integrados mediante el servidor ONYX—sin cifrado E2EE para fines de sincronización.
Opciones externas autoalojadas:
- Red local: compartir archivos y chatear sin internet
- Comunidad privada en VPS con acceso por invitación
- Canal público con suscripción por invitación
Conexión: ingresa la dirección del servidor en external_server_join_screen. Despliegue: ONYX Server.
Grupos: bidireccionales. Canales: solo administradores.
Almacenamiento Local de 'Favoritos'
Una pestaña dedicada para notas, categorías (contraseñas, medios, enlaces). Almacenada únicamente localmente—sin sincronización, sin acceso al servidor.
Destacados principales:
- LAN sin conexión: broadcast UDP + transferencia segmentada de medios
- Pila E2EE: X25519, XChaCha20-Poly1305, claves de sesión
- Multi-dispositivo: cifrado por dispositivo, autorización segura
- Flutter: interfaz optimizada de 60 FPS en todas las plataformas
- Autoalojado: instancias externas para grupos y canales
El proyecto se encuentra actualmente en fase beta, ideal para comunicaciones privadas y redes locales sin conexión.
— Editorial Team
Aún no hay comentarios.