Зачем я сделал LAN-синхронизацию между своими же устройствами в self-hosted мессенджере (и почему не через сервер)
wardcore 6 минут назад Зачем я сделал LAN-синхронизацию между своими же устройствами в self-hosted мессенджере (и почему не через сервер) Средний 2 мин 19 Мессенджеры * Криптография * Информационная безопасность *...
Anthropic — What company has the best second artificial intelligence model at the end of June?
Вот важная новость с фронта ИИ: wardcore 6 минут назад Зачем я сделал LAN-синхронизацию между своими же устройствами в self-hosted мессенджере (и почему не через сервер) Средний 2 мин 19 Мессенджеры * Криптография * Информационная безопасность * Децентрализованные сети * Flutter * Обзор ONYX — мой pet-project: self-hosted, анонимный, E2E-шифрованный мессенджер. Клиент — Flutter, есть под Windows/Linux/macOS/Android, аккаунт без телефона и почты. Список изменений ниже, но текст в основном про одну фичу: WardLink, ради которой стоило катить этот релиз.
ПроблемаДаже на self-hosted сервере синхронизация состояния (например, какие чаты в избранном и в каком порядке) между телефоном и ноутбуком обычно всё равно идёт через сервер. Для самих сообщений это нормально. Не нравилось другое: ради локальной задачи («два устройства в одной квартире») трафик гоняется через сервер, который держишь совсем для другого.
Технические детали
WardLink делает это напрямую между устройствами по LAN, без сервера в петле для этой конкретной задачи. Как это устроеноПара устройств один раз сопрягается через QR: сканирующая сторона пинит показанное устройство, после чего по LAN уходит nonce-аутентифицированный запрос на сопряжение, и второе устройство тоже начинает доверять первому. Получается взаимное доверие с одного скана.
На каждом устройстве постоянный X25519 identity-ключ в секьюрном хранилище, в отличие от эфемерных ключей, которые ротируются при каждом запуске для обычного LAN-мессенджинга. Сессионный ключ — static-static ECDH + HKDF. Синхронизация pull-based: каждая сторона независимо запрашивает у пира манифест (какие сообщения и чаты есть у него), сравнивает со своим состоянием и подтягивает недостающее.
Центрального координатора нет. Большие медиафайлы передаются стримом, AES-GCM кадрами по 256KB, без base64 и без загрузки файла целиком в память. Это снимает прежнее ограничение в 200MB и поднимает лимит до 512MB–4GB (по умолчанию 2GB).
Отраслевые последствия
Синхронизируются только избранные чаты, полностью, всегда. Честно про ограничения: это LAN, не интернет. Работает, пока оба устройства в одной сети.
Для синхронизации через интернет всё ещё нужен сервер. WardLink закрывает другой сценарий: «два моих устройства рядом».
Этот прогресс даёт важные сигналы о будущем отрасли, и технологический мир внимательно наблюдает.





