// БЕЗОПАСНОСТЬ

Конфиденциальность
и безопасность

Информация о том, как TMesh обрабатывает и хранит данные, как работает шифрование сообщений и что рекомендуется для защиты ваших устройств.

Важное предупреждение

⚠️ В боте нет сквозного шифрования, на сервере TMesh все сообщения расшифровываются для отправки в Telegram. Администратор сервера имеет доступ к этим сообщениям и контактным данным в незашифрованном виде. Администратор не использует ваши данные и не передает их третьим лицам, за исключением случаев, когда это требуется для выполнения законов РФ. Сервер находится в России, его защита реализована на уровне хобби-проекта. Не используйте бота для передачи персональной, конфиденциальной и секретной информации!

Шифрование сообщений

Путь сообщения: Meshtastic → Telegram

Когда устройство Meshtastic отправляет сообщение, оно шифруется по протоколу Meshtastic (PKI для личных сообщений, PSK для каналов). Сообщение передаётся по радио до одного из шлюзов TMesh.

Шлюзы не имеют доступа к содержимому

Шлюзы TMesh передают зашифрованные пакеты на MQTT-сервер «как есть». Ключи шифрования хранятся только на сервере TMesh, поэтому шлюзы не могут расшифровать пересылаемые сообщения.

Расшифровка на сервере TMesh

Сервер TMesh расшифровывает сообщения для отправки в Telegram. Это обусловлено ограничениями Telegram Bot API — бот может отправлять в Telegram только открытый текст. Сквозное шифрование между Meshtastic и Telegram невозможно.

Доступ к данным

Администратор сервера TMesh имеет техническую возможность доступа к расшифрованным сообщениям. Администратор не просматривает и не использует содержимое сообщений.

Инфраструктура и защита сервера

Сервер TMesh размещён в Yandex Cloud (Россия). Все порты, кроме MQTT (1883), защищены ограничениями по IP-адресам.

Почему MQTT без TLS (порт 1883)?

Некоторые устройства Meshtastic (например, Heltec V3) не могут поддерживать стабильное TLS-соединение с MQTT-сервером — через несколько часов работы они зависают и перестают передавать пакеты. Поэтому TMesh использует порт 1883 (MQTT без TLS). Содержимое сообщений при этом зашифровано на уровне протокола Meshtastic — шлюзы передают зашифрованные пакеты, расшифровка происходит только на сервере TMesh.

Данные, хранимые на сервере

TMesh не хранит содержимое сообщений. На сервере хранятся только данные, необходимые для работы сервиса:

Данные Telegram

  • Telegram User ID — для идентификации пользователя, зарегистрировавшего устройство или канал
  • Telegram Chat ID — идентификатор чата (личного или группового), в котором работает бот
  • Telegram Username — имя пользователя, если пользователь выполнил команду /start (используется для команды /chat @username со стороны Meshtastic)

Данные устройств Meshtastic

  • Node Name — имя устройства в сети Meshtastic
  • Public Key — публичный ключ устройства для шифрования личных сообщений (PKI)
  • Последняя известная позиция — координаты устройства, если оно передавало геопозицию (через публичный канал, приватный канал или личное сообщение)

Данные каналов Meshtastic

  • Имя канала — название приватного канала
  • PSK (Pre-Shared Key) — ключ шифрования канала, необходим для расшифровки сообщений из этого канала
ℹ️ Данные о каналах хранятся для того, чтобы TMesh мог расшифровывать сообщения из приватных каналов и пересылать их в Telegram. Без ключа канала это невозможно.
⚠️ При регистрации канала с ключом по умолчанию (AQ==) TMesh предупредит, что этот ключ небезопасен — любой участник сети Meshtastic сможет читать сообщения канала. Однако TMesh не блокирует регистрацию такого канала, если пользователь подтвердит, что понимает риски.

Безопасность ключей устройств

Фиксация ключа при регистрации

Когда устройство впервые регистрируется в TMesh через команду /add_device, его публичный ключ и информация об узле фиксируются в базе данных и больше не обновляются автоматически. Это сделано намеренно в целях безопасности.

Зачем фиксируется ключ?

Без фиксации ключа злоумышленник мог бы подделать Node Info пакет с идентификатором вашего устройства и подменить публичный ключ в базе данных TMesh. После этого он получил бы доступ ко всем одобренным чат-сессиям вашего устройства.

Рекомендации

  • Рекомендуется зарегистрировать устройство через /add_device, чтобы зафиксировать его ключ и предотвратить подмену.
  • Если вы используете только чат-сессии (/chat) без регистрации устройства, ключ устройства обновляется при каждом получении Node Info и теоретически может быть подменён.

Что делать при потере или сбросе ключа

Если вы сбросили устройство или изменили ключи шифрования, TMesh больше не сможет отправлять вам сообщения (старый ключ не подходит). В этом случае:

  1. Выполните /remove_device_from_all_chats !ваш_id — это удалит устройство из всех чатов и все одобрения.
  2. Заново зарегистрируйте устройство через /add_device — новый ключ будет зафиксирован.
⚠️ TMesh предупредит всех пользователей, у которых зарегистрировано ваше устройство, если обнаружит изменение публичного ключа. Однако автоматически ключ не обновляется.

Безопасность ключей каналов

Ключ по умолчанию (AQ==)

Meshtastic использует ключ AQ== как ключ по умолчанию для канала. Этот ключ известен всем и не обеспечивает защиты — любой участник сети может расшифровать сообщения канала с таким ключом.

При попытке зарегистрировать канал с ключом AQ== TMesh предупредит пользователя о небезопасности ключа и попросит подтверждение. Если пользователь подтвердит, что понимает риски (ответив my key is not secure), регистрация будет завершена.

💡 Рекомендуется использовать уникальный ключ канала длиной 16 или 32 байта. Создать такой ключ можно в приложении Meshtastic при настройке канала.

Исходный код и ссылки

TMesh — открытый проект. Весь исходный код доступен для аудита:

TMesh Исходный код сервера (C# · .NET 8 · Docker · MQTT · ASP.NET Core · EF Core · PostgreSQL) — github.com/samfromlv/tmesh
Прошивка шлюза Исходный код прошивки TMesh для устройств Meshtastic — github.com/samfromlv/tmesh_meshtastic_firmware
MQTT Auth Аутентификационный плагин для MQTT-сервера Mosquitto — github.com/samfromlv/mosquitto-derived-auth
Обсуждение Отзывы, вопросы, запросы на новые функции — Телеграм топик — Сценарии использования