ONYX: E2EE와 오프라인 LAN 모드를 갖춘 자체 호스팅 메신저
ONYX는 배포 용이성과 강력한 기능 사이에서 완벽한 균형을 제공합니다: 마리아DB와 레디스를 백엔드로 사용하는 Node.js 서버, 그리고 안드로이드, 윈도우, 맥OS, 리눅스용 플러터 기반 클라이언트를 지원합니다. 전체 엔드투엔드 암호화(X25519 및 XChaCha20-Poly1305)를 지원하며, 인터넷 없이도 UDP 브로드캐스트를 통해 통신 가능한 독특한 오프라인 LAN 모드를 제공합니다.
아키텍처 및 기술 스택
서버는 Express와 웹소켓(express-ws + ws)을 기반으로 동작하며, 데이터 저장에는 마리아DB, 세션 및 캐시에는 레디스를 사용합니다. 파일은 AWS SDK v3를 활용한 S3 호환 저장소에 저장됩니다. 전송 프로토콜은 wss://과 HTTP/REST를 포함합니다. 암호화는 키 교환에 X25519, 메시지 전송에 XChaCha20-Poly1305, LAN 내 미디어 전송에는 AES-256-GCM을 사용합니다.
XChaCha20-Poly1305가 AES-GCM보다 우수한 점:
- AES-NI 지원 여부와 무관하게 일정 시간 내 실행됨.
- 노운스 길이가 192비트(기존 96비트 대비)로 확장되어 장시간 세션에서 충돌 위험 감소.
암호화된 패킷 형식: [공개키 32B] [노운스 12B] [암호문] [MAC 16B].
LAN 모드: 자동 탐지 및 오프라인 메시징
클라이언트는 5초마다 255.255.255.255:45678로 UDP 패킷을 브로드캐스트하며, 다음 JSON 형식의 정보를 포함합니다:
{
"username": "alice",
"timestamp": 1710000000000,
"pubkey": "<X25519 공개키, base64>"
}
수신 클라이언트는 내부 테이블을 업데이트하여 사용자명 → IP, 사용자명 → 공개키 매핑을 생성합니다. mDNS, 수동 IP 입력, 추가 핸드셰이크 없이도 즉시 암호화가 시작됩니다.
미디어는 포트 45679를 통해 약 32KB 단위로 전송되며, 각 청크는 독립적으로 AES-256-GCM으로 암호화됩니다. 첫 번째 청크 도착과 동시에 복호화 및 렌더링이 시작됩니다.
다중 디바이스 동기화: 완전한 E2EE 보호
새로운 디바이스를 추가할 때, 신뢰할 수 있는 기기로부터 인증 요청을 합니다. 승인 후 키 교환이 이루어지며, 서버는 평문을 전혀 접하지 않습니다.
개인 대화에서는 서버가 각 사용자 디바이스에 메시지의 암호화된 사본을 전송합니다(각 디바이스의 공개키별로 하나씩). 들어오는 메시지만 다른 디바이스 간 동기화되며, 나가는 메시지는 발신 디바이스에서만 확인 가능합니다. 이 설계는 보안을 유지하면서 기본적인 동기화 기능을 제공합니다.
키 유도: HKDF-SHA256를 사용하며, 라벨은 (onyx-lan-v2는 LAN용, 개별 대화용 별도 라벨).
플러터로 구현된 크로스플랫폼 클라이언트
네 가지 플랫폼에서 동일한 코드베이스를 사용합니다. 스카이/임펠러 기반 플러터는 DOM 오버헤드 없이 60FPS 부드러운 성능을 보장합니다. 데스크톱 최적화 기능에는 다음과 같은 항목이 포함됩니다:
fps_booster,fps_optimizer,fps_stimulatormessage_load_optimizer,chat_preloader
데스크톱 전용 기능:
- 시스템 트레이 및 최소화 지원
- IPC를 통한 싱글 인스턴스 앱
- 드래그 가능한 커스텀 타이틀바
- 윈도우즈용 네이티브 알림
E2EE 이상의 보안 기능
- 플러터 세이프 스토리지 기반 PIN 및 생체 인식
- 프록시 지원 (
proxy_manager.dart) - 안전한 저장소: 키체인 / 안드로이드 키스토어
- 세션 관리: 신뢰할 수 있는 기기에서 세션 조회 및 삭제 가능
계정은 사용자 이름과 비밀번호만 필요하며, 전화번호나 이메일은 필수 아님. 사용자 이름은 영구적이고, 앱 내에서 여러 계정을 지원하며, 모든 데이터 삭제 기능도 제공됩니다.
그룹, 채널, 자체 호스팅 인스턴스
ONYX 서버를 통해 내장된 그룹과 채널 기능 제공 — 동기화 목적의 E2EE는 적용되지 않음.
외부 자체 호스팅 옵션:
- 로컬 네트워크: 인터넷 없이 파일 공유 및 채팅 가능
- VPS 기반 개인 커뮤니티: 초대 제한 접근
- 초대 기반 구독이 가능한 공개 채널
연결 방법: external_server_join_screen에서 서버 주소 입력. 배포 방법: ONYX 서버.
그룹: 양방향. 채널: 관리자 전용.
로컬 '즐겨찾기' 저장소
노트, 카테고리(비밀번호, 미디어, 링크) 전용 탭. 서버에 저장되지 않고, 로컬에만 저장되며 동기화도 불가.
주요 특징:
- 오프라인 LAN: UDP 브로드캐스트 + 청크 기반 미디어 전송
- E2EE 스택: X25519, XChaCha20-Poly1305, 세션 키
- 다중 디바이스: 디바이스별 암호화, 안전한 인증 절차
- 플러터: 모든 플랫폼에서 최적화된 60FPS UI
- 자체 호스팅: 그룹 및 채널용 외부 인스턴스 지원
프로젝트는 현재 베타 상태이며, 개인 소통 및 오프라인 지역 네트워크에 적합합니다.
— Editorial Team
아직 댓글이 없습니다.