Мессенджер, который живёт на Bluetooth: знакомьтесь, Bitchat

Мессенджер, который живёт на Bluetooth: знакомьтесь, Bitchat

«Интернет снова лёг, но чатиться всё равно хочется» — примерно так можно описать момент, когда вам пригодится Bitchat Mesh. Новый проект Джека Дорси (того самого, что придумал Twitter) работает без SIM‑карты и Wi‑Fi: сообщения прыгают от смартфона к смартфону по Bluetooth Low Energy, пока не доберутся до адресата.

Краткая предыстория: как стартап «на выходные» выстрелил в медиа

Дорси выложил прототип на GitHub в первые выходные июля 2025‑го, предупредив, что «это эксперимент, не боевой продукт». Но хайп случился мгновенно: TechCrunch и TechRadar раструбили о «мессенджере без интернета», а App Store поставил приложению 22‑е место в категории Social Networking при средней оценке 4,8 балла.

Как это работает: Bluetooth‑mesh на пальцах

  • Без базовых станций и серверов. Телефоны образуют ячеистую (mesh) сеть: каждый узел принимает, хранит и передаёт сообщения соседям.
  • Дальность ≈ 100 м. BLE‑радио не сравнится с LTE, но при плотной аудитории (фестиваль, университет, протест) цепочка устройств вытягивает сообщения на километры.
  • Hop‑by‑hop шифрование. Текст зашифрован на всём пути, так что промежуточный «курьер» видит лишь бесполезные байты — по крайней мере в теории.
  • Никакой регистрации. Приложение не спрашивает номер, e‑mail или (ура!) дату рождения вашего хомяка. Хочется сменить ник — пожалуйста, прямо в чате.
  • Panic‑mode. Три быстрых тапа по логотипу стирают локальную базу сообщений — полезно, если за плечами вдруг вырос любопытный полицейский.

Под капотом: архитектура протокола Bitchat

Если опустить маркетинг, Bitchat — это тонкий слой поверх стандартного Bluetooth LE Advertising, вдохновлённый research‑моделью BLE Mesh Draft , но реализованный проще. Вместо «официального» BLE Mesh с IV Index и Managed Flooding разработчики выбрали opportunistic flooding:

  • Каждый пакет вещается на рекламных каналах 37‑39 (BLE 1M) и, если железо позволяет, дублируется в extended advertising на данных частотах 0–36 (BLE 2M).
  • Узлы, принявшие пакет, сохраняют его в SQLite и переизлучают спустя случайную задержку 20–500 мс, чтобы уменьшить коллизии.
  • Повторная отправка прекращается, когда поле hop достигает ttl или когда время жизни сообщения истекает (по умолчанию 1 час).

Структура кадра Bitchat v1

0‑1 B   Magic ("BC")
 2    B   Version (=1)
 3    B   Flags (bit0=fwd‑secrecy, bit1=frag, bit2=ack)
 4    B   Hop
 5    B   TTL
 6‑7  B   Payload Len (LE)
 8‑…     Payload (ciphertext | frag‑info)
 …‑…     MAC (16 B, BLAKE2s‑128)
 

Максимальный размер рекламного payload BLE 4.x — 31 байт, BLE 5.x — 255 байт (с Ext Adv). Поэтому длинные сообщения фрагментируются: флаг frag + четыре байта индекса/счётчика. Рекомпозиция происходит на уровне приложения, после чего лишние фрагменты немедленно выбрасываются, чтобы не засорять кэш.

Поток данных: от tap‑to‑pair к массовой рассылке

  1. Handshake. На первом обмене два телефона исполняют односторонний Noise NN (handshake без сессионных ключей). В ответ получают временный token (32 бит), которым подписывают все следующие пакеты. Это защищает от простейшей подмены MAC‑адреса.
  2. Ephemeral → Static. После обмена несколькими сообщениями клиенты переходят на Noise IK (ca + static pubkey), сохраняя совместимость с устройствами без ключей.
  3. Forward Secrecy. Каждое сообщение шифруется XChaCha20‑Poly1305 с уникальным nonce, вычисленным из ID || hop || epoch seconds. Ключ обновляется каждые 32 сообщения при помощи HKDF(ck, "BitchatRatchet").

Хранение сообщений и TTL

Локальная база — банальный SQLite с таблицей messages (id INTEGER PK, ts INTEGER, remote_id BLOB, cipher BLOB, hop INT, sent BOOL). Каждые 15 минут VACUUM удаляет записи старше 24 часов или когда суммарный размер превышает 25 МБ. Такая агрессивная чистка должна препятствовать переполнению памяти на дешёвых Android‑телефонах.

Энергопотребление и тонкая настройка BLE

  • Scanning Window — 8 мс, Interval — 1280 мс, что даёт duty cycle ≈0,6 %.
  • При подключённом зарядном устройстве или когда уровень батареи >80 % — окно сканирования расширяется до 40 мс, повышая шанс «услышать» соседей.
  • iOS‑вариант использует CBCentralManagerScanOptionAllowDuplicatesKey=YES ровно одну минуту после активации экрана, потом возвращается к дефолту, иначе система "задушит" приложение.

Дорожная карта протокола

  • v1.1 — двухфакторная аутентификация через QR‑код (вдохновлён Signal"), снапшот на август 2025.
  • v1.2 — WebAssembly‑SDK для сторонних приложений (игры, кооперативные карты).
  • v2.0 — частичная миграция с opportunistic flooding на adaptive Trickle Timer, снижение overhead в плотной сети до ‑40 %.

Первые впечатления: установка и UX

Bitchat доступен в App Store и на GitHub (Android APK). Интерфейс напоминает минималистичный IRC‑клиент: одно окно сообщений, список «видимых» устройств рядом и малюсенькая шестерёнка настроек. В пустой комнате приложение честно пишет «поблизости никого», что слегка демотивирует.

Безопасность: похвалы, уязвимости и тёплый плед реальности

Код открыт, шифрование строится на Noise. Но исследователи из Trail of Bits и Supernetworks нашли статические сессионные ключи, отсутствие полноценной аутентификации и простую в реализации атаку «человек-посередине», когда злоумышленник выдаёт себя за вашего друга.

Стоит ли бояться?

Если ваша угроза — соскучившийся хакер на конференции, лучше держать язык за зубами или запустить проверенный Briar. Но для неформального общения на фестивале, в поезде без сети или в стране с цензурой Bitchat уже сегодня полезен.

Практический тест: батарея, стабильность, радиус

  1. Аккумулятор. Два часа пассивного ожидания с активным сканированием BLE съели 7 % заряда на iPhone 13 mini. Меньше, чем TikTok, но больше, чем Telegram в фоне.
  2. Скорость доставки. На конференции сообщение дошло за 3‑5 с. В пустой деревне — бессрочно, пока не появится сосед с включённым Bitchat.
  3. Форма сети. Лучший результат — 9 «хопов» и ~400 м между крайними телефонами: Bluetooth‑мышца всё‑таки прокачана.

Альтернативы: с кем сравнивать

Приложение Связь без интернета Аутентификация Forward Secrecy Код
Bitchat Bluetooth mesh Слабая В планах Open‑source
Briar Wi‑Fi / Bluetooth / Tor QR‑код / PGP Да Open‑source
Bridgefy Bluetooth mesh Нет Нет Частично
Signal Нужен интернет QR‑код Да Open‑source

Плюсы

  • Работает без сети и SIM — спасение в роуминге или при цензуре.
  • Простой интерфейс, нулевая настройка.
  • Открытый код — можно изучать, форкать, предлагать патчи.
  • Крутой panic‑mode для мгновенного стирания данных.

Минусы

  • Уязвимая аутентификация → риск MITM‑атак.
  • Работает только при достаточной плотности пользователей.
  • Нет версии для настольных ОС и web‑клиента.
  • Быстрее разряжает батарею, чем привычные мессенджеры.

Вывод: ставить или подождать?

Bitchat — идеальная игрушка для тех, кто любит экспериментировать с новыми протоколами и мечтает о мире без крупных операторов связи. Для повседневных секретных разговоров приложение пока сыровато: дождитесь хотя бы внедрения per‑message forward secrecy и надёжной схемы проверки контактов. Но как аварийный канал связи в глуши или на массовом мероприятии Bitchat уже сегодня впечатляет своей «живучестью» и отсутствием логинов. Если готовы к щепотке адреналина и не планируете обсуждать запуск космических ракет, попробуйте — хуже точно не станет.

Alt text
Обращаем внимание, что все материалы в этом блоге представляют личное мнение их авторов. Редакция SecurityLab.ru не несет ответственности за точность, полноту и достоверность опубликованных данных. Вся информация предоставлена «как есть» и может не соответствовать официальной позиции компании.
Антивирус для мозга!

Лечим цифровую неграмотность без побочных эффектов

Активируйте защиту — подпишитесь

Юрий Кочетов

Здесь я делюсь своими не самыми полезными, но крайне забавными мыслями о том, как устроен этот мир. Если вы устали от скучных советов и правильных решений, то вам точно сюда.