Ответы на вопросы, с которыми к нам действительно приходят. Где ответа нет, так и написано: FAQ, в котором всё прекрасно, бесполезен ровно так же, как отсутствующий.
Техническая сторона — в документации API; что сделано, а что нет — на странице технических наработок.
Мессенджер: переписка, группы и каналы, файлы, звонки, боты. Работает на собственном протоколе MVSy 1.0 — сервер, транспорт и хранилище написаны нами, а не собраны из чужого.
Аккаунт один на все устройства: переписка синхронизируется между телефоном, компьютером и браузером.
Тремя вещами, каждую из которых можно проверить, а не только прочитать:
Основное работает: переписка, группы и каналы, форумы, файлы, стикеры, истории, реакции, платежи и подарки, секретные чаты, звонки один на один.
Чего нет: групповых звонков (методы в схеме есть, но медиа-часть требует SFU, и он не поднят), нативного клиента для macOS, публичных сборок под Linux и iOS. Часть выложенных сборок отладочные. Полный перечень — на странице технических наработок.
Пока не решено — и это честный ответ, а не уход от вопроса.
Как проект будет зарабатывать, будет ли реклама, кому он принадлежит, по какому праву отвечает на запросы государственных органов и как выполняет требования вроде GDPR — решения владельцев, а не разработчиков. Пока они не приняты и не подписаны, писать их на странице сайта нечестно: обещание, которое назавтра поменяется, хуже прямого «не решено».
Что уже можно сказать точно — в манифесте. Про модерацию — отдельная страница.
Отдельного юридического документа пока нет — он появится вместе с ответами на вопрос выше. Технически же всё, что сервер видит и чего не видит, описано без прикрас: в манифесте и в разделе «Безопасность» ниже.
Любому, у кого есть аккаунт: по номеру телефона, если он есть в ваших контактах, или по имени пользователя. Номер собеседника для этого знать не обязательно.
По умолчанию — любой, кто знает ваш номер или имя пользователя. В настройках приватности это сужается: можно разрешить писать только контактам, а отдельных людей заблокировать.
Одна — сообщение доставлено на сервер и ушло получателю. Две — получатель его прочитал.
Да, в настройках приватности. Скрыв своё время последнего посещения, вы перестанете видеть чужое — это симметрично намеренно, иначе настройка была бы односторонним преимуществом.
Да — у себя или сразу у обоих, без ограничения по времени. Удалённое у обоих исчезает и из переписки собеседника.
Сообщения секретного чата удаляются на обоих устройствах, а на сервере их и не было в читаемом виде.
Один на один — да, со сквозным шифрованием: ключ вырабатывают сами устройства, сервер только передаёт пакеты.
Групповые — пока нет. Методы в схеме есть и обработчики написаны, но медиа-часть требует отдельного сервера потоков (SFU), и он не поднят. Обещать дату не будем.
Ссылкой вида ansible.su/имя, если у вас есть имя
пользователя. Она открывается в браузере и предлагает перейти в приложение —
устанавливать его, чтобы просто посмотреть, кто вам пишет, не требуется.
В группе пишут все участники, в канале — только администраторы, а остальные читают. У канала может быть привязанная группа обсуждений: тогда под каждым постом появляются комментарии.
В меню нового чата. Обычная группа превращается в супергруппу автоматически, когда участников становится много; супергруппу можно перевести в режим форума — с отдельными темами вместо одной ленты.
Ссылку создаёт администратор. Её можно ограничить сроком и числом переходов, включить заявки на вступление — тогда каждого нового участника придётся одобрить, — и отозвать в любой момент.
Отозванная ссылка перестаёт открываться, и страница отвечает на неё так же, как на несуществующую. Это сделано намеренно: иначе разница в ответах позволила бы перебирать чужие ссылки.
Это короткое имя вместо номера: по нему вас находят в поиске и по нему
работает ссылка ansible.su/имя. Задаётся в настройках профиля, если
не занято.
Нет. По умолчанию номер видят только те, у кого он уже записан в контактах; в настройках приватности это можно сузить ещё.
Занятое имя мы не отбираем и не перепродаём. Если под вашим именем кто-то намеренно выдаёт себя за вас, это повод для жалобы — как её разбирают, описано на странице модерации.
Соединение с сервером зашифровано всегда — не «включается в настройках», а
с первого пакета. Клиент и сервер договариваются о ключе по Диффи — Хеллману,
дальше идёт AES IGE, целостность каждого сообщения проверяется по
msg_key.
Мы пробовали читать собственный трафик со стороны: полезная нагрузка не читается. Что при этом видно постороннему — длины пакетов и идентификатор ключа. Это метаданные, и мы про них знаем.
Облачные чаты — видит. Так устроена любая система, где переписка открывается на новом устройстве без переноса ключей: чтобы отдать вам историю на только что установленном клиенте, сервер должен уметь её прочитать. Это осознанный размен удобства на приватность, и мы предпочитаем назвать его вслух, а не прятать за словом «шифрование».
Секретные чаты — не видит. Там ключ вырабатывают устройства, а сервер работает слепым релеем: передаёт байты, не имея возможности их прочитать. Это не обещание не смотреть, а отсутствие технической возможности.
Включается в настройках: помимо кода из сообщения при входе спрашивается пароль. К нему можно привязать почту — тогда пароль восстанавливается по коду с неё.
Если почта не привязана и пароль забыт, восстановить его нельзя: сброс возможен только вместе со сносом аккаунта.
Да. Passkey создаётся на устройстве, и вход происходит по PIN-коду или
биометрии вместо кода из сообщения. Поддержка есть не у каждого клиента — если
метод недоступен, сервер отвечает PASSKEY_NOT_SUPPORTED.
Потому что тогда переписка перестанет открываться на новом устройстве. Ключ секретного чата живёт только на двух устройствах, и восстанавливать историю серверу будет не из чего — он её не хранит в читаемом виде.
Это не отговорка, а прямое следствие: либо синхронизация между устройствами, либо сервер, который ничего не может прочитать. Выбор оставлен вам — по чату.
Правильный ответ — «не верьте, проверьте». Код клиентов открыт, протокол описан, схема опубликована целиком, а ошибки, которые возвращает сервер, собраны на страницах методов из его же исходников.
Утверждение «данные защищены» стоит ровно столько, сколько стоит возможность его перепроверить.
Переписка между двумя конкретными устройствами со сквозным шифрованием. Ключ вырабатывают сами устройства, сервер в обмене не участвует и прочитать сообщения не может.
Отсюда и свойства: такой чат не появится на других ваших устройствах, историю нельзя восстановить после переустановки, а пересылка из него ограничена.
Задаётся на чат: после прочтения сообщение исчезает у обоих через выбранное время. Отсчёт начинается с момента, когда получатель его открыл.
Отпечаток общего ключа. Если у вас и у собеседника картинки совпадают, значит вы договорились об одном и том же ключе и между вами никто не встал. Сверять её стоит по другому каналу — голосом, при встрече.
В настройках есть список активных сессий: там видно устройство, приложение и адрес, и любую сессию можно завершить. Если устройство недоступно — завершайте сессию с любого другого.
В настройках аккаунта. Переписка, группы и контакты остаются: аккаунт привязан не к номеру, а к внутреннему идентификатору.
Из приложения — в настройках аккаунта.
Кнопка на my.ansible.su пока отвечает ошибкой, и это сделано осознанно. Снос затрагивает сообщения, диалоги, владение каналами и хранилище в двух базах; кнопка, привязанная к недостроенному сносу, потеряла бы часть данных необратимо и оставила бы остальные. Лучше честная ошибка, чем половина удаления.
Отдельно работает самоуничтожение по бездействию: срок задаётся в настройках, и по его истечении аккаунт удаляется сам.
С другого устройства завершите его сессию в списке активных — этого достаточно, чтобы отрезать доступ. Если двухфакторная защита не была включена, включите её сразу: без пароля владение номером даёт вход.
Секретные чаты на том устройстве расшифровать без него нельзя, но и вам их не вернуть: ключ был только там.
Через бота-менеджера в самом мессенджере: он выдаёт токен, которым бот подключается к серверу. Отдельный номер телефона для бота не нужен.
Да, для этого всё и опубликовано. api_id и
api_hash выдаются автоматически на
my.ansible.su — без заявки и без объяснения,
зачем вам клиент.
Дальше — обзор API, схема и список методов.
Нет: серверный код закрыт. Открыты клиенты и протокол — этого достаточно, чтобы проверить, что именно уходит с вашего устройства, но не чтобы поднять свою сеть.
Полезнее всего — найденные ошибки и дыры: и в клиентах, чей код открыт, и в протоколе, который описан. Отдельной программы вознаграждений у нас пока нет, и обещать её мы не будем, пока она не заведена.
Если вы уже входили с другого устройства, код приходит внутрь мессенджера, а не по SMS — проверьте чат со служебным аккаунтом там.
Если это первый вход, код идёт сообщением на номер. Он живёт ограниченное
время: просроченный код нужно запрашивать заново, сервер ответит
PHONE_CODE_EXPIRED.
Проверьте, не отключены ли они для этого чата и не ограничивает ли система фоновую работу приложения.
Честно: доставка через сторонние службы уведомлений у нас пока не подключена, и на некоторых сборках Android уведомления приходят, только пока приложение живо в фоне. Это в списке несделанного.
Про клиенты — в их репозитории, они перечислены на странице приложений. Про нарушения и жалобы на содержимое — страница модерации.