Офлайн-меш
Без интернета и без вышек: сообщения идут по Bluetooth Low Energy и Wi-Fi Direct и перескакивают через соседние устройства, пока не найдут адресата.
Открытый исходный код · Android и Linux · без регистрации
Soty шифрует каждое сообщение на вашем устройстве и передаёт его напрямую: офлайн — через BLE и Wi-Fi Direct, онлайн — по libp2p. Серверов, которые хранят переписку, не существует.
Ключи генерируются на устройстве и никогда его не покидают.
Привет! Я готов принимать сообщения.
Отлично, наши ключи совпали. Доставлено
Ни номера телефона, ни почты, ни пароля. Личность — это пара ключей, сгенерированная на устройстве.
Сообщение шифруется на устройстве отправителя и расшифровывается только на устройстве получателя.
В офлайне сообщения идут по BLE и Wi-Fi Direct, перескакивая через соседние устройства.
Приложение и релейный хост собираются из открытых исходников, а сборки лежат на GitHub.
Soty сам выбирает подходящий канал: сначала пробует договориться напрямую, а релей подключает только тогда, когда устройства не видят друг друга.
Без интернета и без вышек: сообщения идут по Bluetooth Low Energy и Wi-Fi Direct и перескакивают через соседние устройства, пока не найдут адресата.
Когда оба устройства онлайн, они соединяются напрямую по libp2p: трекер лишь подсказывает адреса, а переписка идёт между устройствами.
Если получатель сейчас недоступен, шифрованный конверт подождёт на релее и уйдёт адресату, как только тот появится в сети. Плейнтекст туда не попадает.
Один конверт — один получатель. Внутри нет ничего лишнего: только шифртекст, подпись отправителя и пара служебных полей.
Для каждого сообщения создаётся одноразовая пара ключей X25519. Из общего секрета через HKDF выводится ключ AES-256-GCM, которым и шифруется текст.
Готовый конверт подписывается долговременным ключом отправителя, поэтому подменить текст, получателя или время по дороге не выйдет.
Конверт уходит туда, где сейчас получатель: по мешу, напрямую по libp2p или на релей. Ни один из каналов не видит открытый текст.
На приёмнике порядок фиксирован: часы → подпись Ed25519 → идентификатор → дубликаты → расшифровка. Всё, что не прошло проверку, молча отбрасывается.
Одноразовые ключи делают шифртексты непохожими: два одинаковых сообщения выглядят как два разных набора байт. Прочитать конверт может только устройство, которому он адресован, — на релее лежит шифртекст, который не с чем сравнить.
Не только шифрование: переписка, контакты и обслуживание себя самого — в одном приложении.
Переписка один на один и группы. Каждому участнику уходит свой конверт, поэтому ключи соседей по чату друг другу не видны.
Свой ключ показывается QR-кодом, чужой считывается камерой. Обмен идёт между устройствами, посредник не нужен.
Отправлено, доставлено, прочитано. Чеки — такие же подписанные конверты, поэтому подделать их нельзя, а получатель может их не отправлять.
Пока приложение закрыто, приёмом занимается foreground-сервис с постоянным уведомлением. Его можно выключить в настройках.
Вход по отпечатку или системному паролю: без разблокировки содержимое переписки не показывается.
Настройка «Хранить сообщения» решает, остаются ли ваши сообщения на устройстве. Лишнее удаляется само, а у релея свой срок хранения.
Можно держать сразу несколько релеев: приложение подключается к живому и предлагает заменить замолчавший адрес.
Светлая, тёмная или системная тема. Интерфейс переведён на 10 языков, включая русский и английский.
Релей — это обычная программа на чужом сервере. Она умеет одно: ждать шифрованные конверты для тех, кто сейчас офлайн. Хосты объединяются в федерацию и делятся друг с другом тем, что накопилось.
Конверт для отсутствующего получателя лежит на релее и уходит адресату, как только устройство появится на связи.
Релей отвечает на вопрос «кто сейчас онлайн» и выдаёт адреса. Через него идёт только поиск, а не переписка.
Хосты синхронизируются между собой: живой релей плюс анти-энтропия по накопленному. Если один узел ушёл в офлайн, конверт не потеряется.
Релей видит, что пришёл конверт, какого он размера и для кого. Текста он не видит. Если и это лишнее, есть меш и прямое соединение.
Relay 1
ws://85.198.75.50:3100/ws
fad55cc762eda3f6cbc9c6522030ce8ec29e87143c9c78f452038d24143a4e82
Relay 2
wss://price.dcns.ru/soty-ws
dba88ecc7cd8053f76ddbe9c29d0bf63bb24e6234ebcaf9c074dcb0a1ce4b014
Адреса и отпечатки ключей уже зашиты в сборку, но их можно заменить своими в настройках.
Все сборки делаются из одного исходника: приложение для Android и Linux и релейный хост для оператора.
Приложение мессенджера одним APK: скачать, разрешить установку из неизвестного источника и открыть файл. Подойдёт Android 8.0 и новее.
soty-release.apk · 86 MB
СкачатьТот же мессенджер для компьютера. Распакуйте архив и запустите файл soty; нужны GTK 3 и libsqlite3.
soty-linux-x64.tar.gz · 20 MB
СкачатьУзел офлайн-доставки и трекера: один бинарник, которому нужна только libsqlite3. Для тех, кто держит релей сам.
dtm_host.bin · 8 MB
СкачатьКоротко о том, на что можно опереться, а что придётся принять как есть.
Как это устроеноОдноразовый обмен ключей X25519 на каждое сообщение: компрометация одного сообщения не тянет за собой остальные.
AES-256-GCM с 12-байтовым nonce: порча или подмена конверта обнаруживаются до расшифровки.
Подпись Ed25519 и фиксированный порядок проверок: часы, подпись, идентификатор, дубликат, расшифровка.
Ошибка аутентификации не переспрашивается и не попадает в логи: некорректный конверт просто исчезает.
Самое частое — коротко.
Нет. При первом запуске приложение генерирует пару ключей — и всё. Ни регистрации, ни номера, ни почты.
Нет. На релее лежит шифрованный конверт: без ключа получателя это просто байты. А вот метаданные — время и адресата — релей действительно видит.
Копия останется у вас, а конверт подождёт на релее или у соседа в меше и уйдёт адресату, как только тот появится на связи.
Только вместе с устройством. Сервера, на котором лежала бы копия, нет, а ключи хранятся только на устройстве.
Android (APK) и Linux x64. Сборок для iOS, macOS и Windows пока нет: в вебе мешают локальная база и транспорты.
Скачайте APK, отсканируйте QR-код собеседника — и можно писать. Ни шлюзов, ни настроек, ни подтверждений по SMS.