Bitchat — децентрализованный P2P-мессенджер (обзор)

Bitchat — мобильное/настольное приложение для децентрализованного обмена сообщениями, спроектированное для работы в офлайн-сетях и через глобальные Nostr‑реле при наличии интернета. Проект ориентирован на приватность: нет учётных записей, номеров телефонов и центральных серверов — только прямые подключения и распределённые реле. Статья написана с помощью gpt-5 mini.

bitchat

Главная идея

Приложение использует гибридную архитектуру с двумя транспортными уровнями:

  • Bluetooth LE mesh для локального общения без интернета (многоступенчатая ретрансляция через соседние устройства).
  • Nostr (через реле) для глобальной доставки и покрытия зон, где нет прямого Bluetooth‑соединения.

Комбинация позволяет использовать Bitchat в условиях отключённого интернета (протесты, чрезвычайные ситуации, удалённые области) и одновременно обеспечить связь с внешним миром, когда это необходимо.

Основные возможности

  • Двойная транспортная архитектура (Bluetooth mesh + Nostr) с автоматическим выбором лучшего канала.
  • Каналы на основе геолокации (geohash): чат для блока, района, города и т.д.
  • Многоступенчатая ретрансляция сообщений в mesh (поддержка нескольких хопов).
  • Приватность: отсутствие постоянных идентификаторов, учётных записей и телефонных номеров.
  • Шифрование приватных сообщений: протокол Noise для bluetooth‑сессий и NIP‑17 для Nostr.
  • Поддержка IRC‑подобных команд для управления (например, /msg, /who и т. п.).
  • Опции производительности: сжатие сообщений (LZ4), режимы энергосбережения и оптимизированная сеть.
  • Экстренная очистка данных (Emergency Wipe) — быстрый сброс локального хранилища.

Архитектура и канализация

Bitchat делит каналы на несколько типов:

  • mesh #bluetooth — локальные каналы, полностью функционируют по Bluetooth, подходят для офлайн‑сред и локальных событий.
  • Локационные каналы через Nostr — геохеши разных точностей: block (7 символов), neighborhood (6), city (5), province (4), region (2). Это позволяет организовать чаты, связанные с местоположением.

Такой подход даёт гибкость: локальные разговоры остаются в радиусе mesh, а при необходимости сообщения могут «провалиться» в Nostr для доставки адресату, оказавшемуся вне Bluetooth‑досягаемости.

Маршрутизация приватных сообщений

Для приватной пересылки Bitchat применяет умную стратегию:

  1. Сначала — Bluetooth (если доступен). Сообщение шифруется через Noise и отправляется напрямую или через mesh‑хопы.
  2. Если Bluetooth недоступен — откат на Nostr (через публичные реле). Для приватности используется NIP‑17 (“gift‑wrapping”) и работа с временными/эпhemeral ключами.
  3. Если ни один транспорт недоступен — сообщение ставится в очередь и отправится автоматически при появлении соединения.

Безопасность и ограничения

  • Проект подчёркивает приватность, однако приватные сообщения не проходили формального внешнего аудита на момент заметки; поэтому не рекомендуется доверять критически важной информации до проведения аудита.
  • Для mesh‑сессий Bitchat применяет Noise Protocol (предоставляет свойства E2E и forward secrecy).
  • Публичные локальные чаты (основная особенность приложения) не несут тех же рисков, но всё равно следует быть внимательным с личной информацией.

Сборка и запуск (кратко)

Репозиторий содержит инструкции для запуска из исходников на macOS / iOS и утилиту just для упрощения задач сборки.

  • Запуск из Xcode: открыть bitchat.xcodeproj, подготовить локальные конфиги (например, Configs/Local.xcconfig), указать Team ID и обновить entitlements перед запуском на устройстве.
  • Альтернатива: установить just (через Homebrew) и использовать прописанные рецепты (just run, just clean и т. п.) для локального тестирования.

Для подробных шагов сборки и отладки см. README в репозитории и файл WHITEPAPER.md с технической документацией.

Локализация и развитие

Проект поддерживает локализацию — текстовые ресурсы лежат в соответствующих папках Localization/*.lproj. При добавлении переводов следует обновлять Localizable.strings и Localizable.stringsdict.

Для кого это подходит

  • Активисты и сообщества, которым нужна связь в офлайн‑условиях.
  • Люди, желающие экспериментировать с децентрализованными P2P‑сетями и Nostr.
  • Разработчики, желающие изучить гибридные транспортные архитектуры и приватные протоколы для мобильных приложений.

Еще ссылки