返回首页

ONYX 消息应用:E2EE 和无需互联网的 LAN

ONYX — 跨平台自托管消息应用,配备 XChaCha20-Poly1305 的 E2EE 和通过 UDP 广播的 LAN 模式。支持多设备、外部实例用于群组/频道。Flutter 客户端针对桌面和移动端优化至 60 FPS。

ONYX:支持 LAN 和完整 E2EE 加密的消息应用
Advertisement 728x90

ONYX:自托管端到端加密即时通讯,支持离线局域网模式

ONYX 在部署便捷性与强大功能之间实现了完美平衡:基于 Node.js 的服务器,搭配 MariaDB 和 Redis,客户端采用 Flutter 开发,支持 Android、Windows、macOS 和 Linux。它全面支持端到端加密(使用 X25519 和 XChaCha20-Poly1305),并独创离线局域网通信模式,通过 UDP 广播实现无互联网环境下的即时消息传递。

架构与技术栈

服务器基于 Express 搭建,集成 WebSocket(express-ws + ws),数据存储使用 MariaDB,会话与缓存由 Redis 管理。文件存储于兼容 S3 的系统中,采用 AWS SDK v3。传输协议包括 wss:// 和 HTTP/REST。加密方案使用 X25519 进行密钥交换,XChaCha20-Poly1305 加密消息,局域网内媒体传输则采用 AES-256-GCM。

XChaCha20-Poly1305 相较于 AES-GCM 的核心优势:

Google AdInline article slot
  • 执行时间恒定,不依赖 AES-NI 指令集支持。
  • 非常长的随机数(192 位对比 96 位),显著降低长时间运行会话中的碰撞风险。

加密数据包格式:[公钥 32B] [随机数 12B] [密文] [MAC 16B]

局域网模式:自动发现与离线通信

客户端每 5 秒向 255.255.255.255:45678 发送一次 UDP 广播包,内容为 JSON 格式:

{
  "username": "alice",
  "timestamp": 1710000000000,
  "pubkey": "<X25519 公钥,base64 编码>"
}

接收方客户端自动更新内部映射表,记录 用户名 → IP用户名 → 公钥。无需 mDNS、手动输入 IP 或额外握手流程,加密通信即刻启动。

Google AdInline article slot

媒体文件以约 32 KB 的分块形式通过端口 45679 传输,每一块均独立使用 AES-256-GCM 加密。一旦接收到首块数据,即可立即开始解密和渲染,实现低延迟体验。

多设备同步,全程端到端加密保护

添加新设备时,需从已信任设备获取授权。授权通过后,密钥完成交换——服务器始终无法接触明文数据。

在私聊中,服务器将加密后的消息副本分别发送至每个用户设备(按设备公钥加密)。仅接收消息在设备间同步;发送的消息仅在原设备可见。此设计兼顾安全性与基础同步需求。

Google AdInline article slot

密钥派生机制:使用 HKDF-SHA256,标签分别为 onyx-lan-v2(用于局域网)及各私聊专用标签。

跨平台客户端:基于 Flutter 的统一开发框架

一套代码适配四大平台。Flutter 基于 Skia/Impeller 引擎,确保全平台流畅 60 FPS 表现,无 DOM 性能开销。桌面端优化功能包括:

  • fps_boosterfps_optimizerfps_stimulator
  • message_load_optimizerchat_preloader

桌面专属功能:

  • 系统托盘支持最小化操作
  • 通过 IPC 实现单实例运行
  • 自定义标题栏,支持拖拽区域
  • Windows 平台原生通知支持

安全能力超越端到端加密

  • 使用 Flutter Secure Storage 实现 PIN 码与生物识别验证
  • 支持代理配置(proxy_manager.dart
  • 安全存储:Keychain / Android Keystore
  • 会话管理:可查看并删除来自可信设备的会话记录

账户仅需用户名与密码登录,无需手机号或邮箱。用户名永久有效,应用内支持多账号切换,且提供彻底的数据清除功能。

群组、频道与自托管实例

通过 ONYX 服务器内置群组与频道功能——同步过程不启用端到端加密。

外部自托管选项:

  • 局域网环境:无需联网即可实现文件共享与聊天
  • VPS 上搭建私密社区,通过邀请制访问
  • 公开频道,支持邀请订阅制加入

连接方式:在 external_server_join_screen 中输入服务器地址。部署方式:使用 ONYX Server。

群组:双向互动;频道:仅管理员可发布。

本地“收藏”存储功能

专设标签页用于保存笔记、分类信息(如密码、媒体、链接),所有数据仅本地存储,不进行同步,也不触达服务器。

核心亮点:

  • 离线局域网:UDP 广播 + 分块媒体传输
  • 端到端加密栈:X25519、XChaCha20-Poly1305、会话密钥管理
  • 多设备支持:按设备加密,安全授权流程
  • Flutter:全平台优化 60 FPS 用户界面
  • 自托管:支持外部实例用于群组与频道管理

项目目前处于测试阶段,特别适合私密通信与离线局域网场景。

— Editorial Team

Advertisement 728x90

继续阅读