GasApp

Политика приватности GasApp

Пункт M8 «Написать Data Retention Policy и Privacy Policy» (раздел 22), MASVS PRIVACY-2.1.

Редакция: 2026-10-10.

⚠️ GasApp не выпущен и не прошёл независимый аудит. Этот документ описывает, как приложение устроено сейчас, а не обещание на будущее. Пока аудита нет, всё написанное ниже стоит ровно столько, сколько стоит возможность проверить это по исходному коду — ссылки на код даны там, где утверждение можно сверить.

Коротко

Что изменилось 2026-10-07. До этой редакции регистрация не спрашивала адрес почты, и политика говорила «не спрашиваем адрес почты». Теперь спрашивает. Продукт тогда же переименован из AEGIS в GasApp, и в нём появились каналы.

Что нужно, чтобы пользоваться

Имя пользователя. Вы придумываете его сами. Оно не связано с номером телефона или настоящим именем и никак не проверяется.

Адрес почты. Нужен один раз — чтобы создать аккаунт. Приложение просит сервер прислать на него шестизначный код; аккаунт создаётся только с верным кодом, и на один адрес — один аккаунт.

🔐 Что происходит с адресом — по шагам, без округлений:

Если вам важно, чтобы аккаунт не был связан с вашей основной почтой, заведите для него отдельный адрес: связь «адрес ↔ имя» видит сервер в момент регистрации и почтовая служба — в письме.

🔐 Регистрация не требует номера телефона. Это не удобство, а решение модели угроз: номер связывает аккаунт с документом, удостоверяющим личность, и делает список контактов пригодным для сопоставления.

Камера — только если вы сканируете QR-код. Разрешение запрашивается в момент сканирования (добавить собеседника или сверить safety number). Кадры разбираются на телефоне, не сохраняются и никуда не отправляются. Без камеры приложение работает: собеседника можно найти по имени.

PIN. Шесть цифр. Мы его не знаем и не можем узнать: он не передаётся на сервер и не хранится на устройстве. Из PIN выводится ключ, которым зашифрована база на телефоне; неверный PIN даёт неверный ключ, и база не открывается. Отдельной проверки «верен ли PIN» не существует — она означала бы хранить где-то признак верного PIN, то есть подсказку для перебора.

Что видит сервер

ВидитНе видит
Что у аккаунта alice есть устройствоКто такая Алиса
Что для устройства есть недоставленный конвертЧто в нём
Размер конверта (с точностью до бакета дополнения)От кого он
Публичные ключи устройстваПриватные ключи
Что устройство сейчас на связиС кем оно переписывается
В каком месяце аккаунт был активенВ какой день и час
Хеш адреса почты, на который создан аккаунтСам адрес (после регистрации он не хранится)
Есть ли у аккаунта премиум и какие каналы он создалЧто в каналах написано и кто их читает

🔐 Сервер не знает отправителя ни одного сообщения. Право на отправку доказывается ключом доступа получателя, а не подписью отправителя. Для первого сообщения новому собеседнику, пока ключа доступа ещё нет, вместо него решается задача proof-of-work над этим самым конвертом.

До 2026-09-24 первое сообщение уходило за подписью вашего устройства, и для первого контакта сервер видел, кто кому написал. Так было сказано и здесь.

🔐 Ключ собеседника, которого вы нашли по имени, называет сервер, и сервер мог бы назвать свой. Поэтому приложение сверяет его с открытым журналом ключей: писать можно, если тот же ключ стоит в журнале под этим именем не меньше суток (у аккаунтов старше суток — сразу), а владелец каждого имени сам проверяет свою запись. Подмену сервер вынужден показать всем, и её заметят. Запросы к журналу анонимны: сервер не узнаёт, чьё имя проверяют. Самая надёжная проверка — отсканировать QR-код собеседника при встрече: в коде его ключ, и он приходит мимо сервера.

⚠️ Последняя строка — про присутствие, и её стоит прочитать внимательно. Чтобы сообщение приходило сразу, а не по обновлению экрана, приложение держит соединение с сервером, пока открыт список чатов или экран переписки. Соединение идёт по идентификатору устройства, а не чата: какую переписку вы открыли, сервер не узнаёт.

Но он видит, что какая-то открыта: когда соединение появилось, когда пропало и сколько держалось. По этому следу восстанавливается распорядок дня — и то, что двое бывают на связи одновременно. Шифрование содержимого от этого не защищает: это не содержимое.

Постоянного фонового соединения нет ни в одной сборке. Фоновая проверка уведомлений — короткий запрос раз в четверть часа (см. «Push-уведомления» ниже).

Полный перечень того, что хранится и сколько, — docs/legal/data-retention-policy.md.

Чего мы не делаем

Каналы

Канал — лента записей одного автора: текст, фото и файлы. Читать канал может каждый, у кого есть ссылка на него; писать, править и удалять записи — только автор.

Что сервер знает о канале: что канал есть, какому аккаунту он принадлежит, сколько в нём записей и файлов, их размер (с точностью до сетки дополнения), час публикации каждой записи, какие записи правились и какие удалены.

Чего сервер не знает о канале без публичного имени:

Подписка. Когда вы добавляете канал, приложение подписывает на него ваш аккаунт. 🔐 Сервер знает, на какие каналы подписан аккаунт, до какой записи вы дочитали и какие реакции поставили: подписка, отметка о прочтении и реакция идут за подписью вашего устройства. Так сделано, чтобы подписчиков, просмотры и реакции нельзя было накрутить: один аккаунт — один подписчик. Когда вы убираете канал с телефона, приложение отписывает аккаунт, и сервер стирает подписку и реакции.

Сами записи и файлы канала приложение забирает без подписи: кто именно в данный момент читает ленту, сервер по запросу не видит (при прямом соединении без Tor он видит IP-адрес).

Администраторы. Владелец канала может назначить администраторов — они публикуют, правят и удаляют записи. 🔐 Администратор серверу известен, как и владелец: сервер должен знать, от каких аккаунтов принимать записи. Чтобы стать администратором, вы показываете владельцу заявку; в ней идентификатор вашего устройства.

Публичный канал. Автор может дать каналу @имя, чтобы его находили поиском. Для этого приложение автора отдаёт серверу ссылку на канал — а в ней ключ чтения. 🔐 Публичный канал сервер прочитать может: название, записи и файлы. Приложение говорит об этом автору до включения. Если публичное имя убрать, сервер перестаёт отдавать ссылку, но то, что он уже узнал, не забывается. Подделать записи сервер не может и у публичного канала: ключа подписи автора у него нет.

Закрытый канал. Владелец может сделать канал закрытым: тогда в него входят по заявке, а записи сервер отдаёт только участникам. Ссылка такого канала ключа чтения не несёт — по ней подают заявку. 🔐 Когда вы подаёте заявку, сервер и те, кто ведёт канал, узнают имя вашего аккаунта; сервер хранит заявку, пока на неё не ответят. Одобряя, владелец или администратор передаёт вам ключ чтения шифротекстом — сервер его не видит. Сервер знает, кто участник закрытого канала, кому отказали в доступе после удаления, и называет тем, кто ведёт канал, имена заявителей и подписчиков.

🔐 Когда из закрытого канала удаляют подписчика, ключ чтения канала меняется: новый ключ получают только оставшиеся, и новые записи удалённый прочесть не может. ⚠️ То, что вышло до удаления, а также название и описание канала он мог прочесть и раньше — этого удаление не отменяет. Сервер знает, сколько раз у канала меняли ключ; самих ключей он не получает.

Боты. Аккаунт с премиумом может завести ботов — отдельные аккаунты, которые ведёт программа владельца. 🔐 Сервер хранит, какому аккаунту принадлежит какой бот, пока бот существует. Адреса почты у бота нет. Ключи бота создаёт его программа; ни сервер, ни приложение владельца их не получают. ⚠️ Когда вы пишете боту, ваше сообщение читает его программа — и тот, кто её запустил. Имя на bot значит только то, что аккаунт заведён как бот.

⚠️ Чего каналы не обещают. Канал — не личная переписка:

Премиум. Создавать каналы могут только аккаунты с премиумом. Это пометка на аккаунте, которую оператор сервера ставит вручную; оплаты в приложении нет, платёжных данных мы не получаем. Сервер хранит саму пометку — и больше ничего о том, почему она выдана.

Tor, мосты и службы Tor Project

Встроенный Tor соединяется с сетью Tor — добровольными узлами, которые держат не GasApp. Входной узел (или мост) видит ваш IP-адрес, но не то, куда идёт соединение; дальше соединение ведёт к onion-сервису сервера GasApp, и выходной узел не участвует вовсе, если сборка знает этот адрес.

Там, где Tor блокируют, приложение само подключается через мосты:

Сервер GasApp во всём этом не участвует и о мостах не знает.

Блокировка и жалобы

Блокировка — только на вашем телефоне. Сообщения заблокированного собеседника принимаются и молча отбрасываются; он об этом не узнаёт. Сервер о блокировке не знает: узнай он, узнал бы, что вы были знакомы.

Жалоба уходит оператору сервера. 🔐 Она раскрывает серверу, кто пожаловался и на кого — без этого жалобы нельзя ни проверить, ни посчитать. Доказательство — сертификат отправителя с его конверта, подписанный самим сервером: пожаловаться можно только на того, кто вам действительно писал. Переписка в жалобу не уходит — её у сервера нет. Собеседник о жалобе не узнаёт.

Оператор видит в админ-центре имя аккаунта, на который пожаловались, и число разных жалобщиков — не их имена. Жалоба хранится, пока существуют оба аккаунта, или до решения оператора. Решение (удаление аккаунта или отклонение жалоб) записывается в журнал оператора без имени: что сделано, почему, сколько было жалобщиков. Из этого журнала составляется отчёт о прозрачности.

Жалоба на канал тоже уходит оператору — вместе с именем вашего аккаунта и выбранной причиной. 🔐 Канал без публичного имени оператор прочитать не может. Поэтому приложение спрашивает, приложить ли к жалобе ссылку канала — ключ чтения: согласитесь — оператор откроет канал и увидит записи; нет — увидит только сам факт жалобы. Хранится одна жалоба от аккаунта на канал — до решения оператора либо удаления канала.

Push-уведомления

Сервисов Google, Apple или Firebase в уведомлениях нет: ни одна третья сторона не узнаёт, когда вам пишут.

Как это устроено. Пока приложение заперто, переписка зашифрована PIN и прочитать её нечем. Поэтому примерно раз в 15 минут (так решает система телефона) приложение спрашивает сервер одно: есть ли для этого устройства что-то в очереди. Спрашивает оно отдельным случайным токеном уведомлений: он хранится на телефоне вне зашифрованной базы, а сервер хранит только его хеш. По токену нельзя ни прочитать, ни забрать сообщения — только получить ответ «да» или «нет».

Если ответ «да», телефон показывает уведомление «Новые сообщения» — без текста и без отправителя: расшифровать их в этот момент нечем. Сами сообщения забираются, когда вы открываете приложение.

Что видит сервер. По этим запросам — что телефон включён и в сети, как и при любом соединении. Время запросов он не записывает. При прямом соединении он видит и IP-адрес.

С Tor или прокси фоновая проверка не выходит в сеть: прямой запрос выдал бы адрес тому, кто выбрал его скрыть. Тогда новые сообщения приходят, только пока приложение открыто.

Уведомления выключаются в «Настройки → Уведомления»; сервер тогда забывает токен. Удаление аккаунта удаляет токен вместе с устройством.

Что остаётся на вашем устройстве

Переписка, контакты, ключи и файлы хранилища лежат только на устройстве, в базе, зашифрованной SQLCipher. Ключ выводится из вашего PIN и из секрета, который не покидает аппаратное хранилище телефона.

Мы не имеем к этой базе доступа и не можем восстановить её за вас. Резервная копия — ваш выбор, и она шифруется ключом восстановления, который знаете только вы.

🔐 Исчезающие сообщения в резервную копию не попадают. Выгруженная копия живёт у того, кто её хранит, и стереть из неё сообщение по таймеру нечем. Поэтому восстановление не возвращает исчезающих сообщений — даже тех, чей срок ещё не вышел. ⚠️ До 2026-09 они попадали в копию вместе со сроком, и срок действовал только на устройстве.

⚠️ Удалённое сообщение остаётся в копиях, сделанных до удаления. При восстановлении всей цепочки копий оно убирается снова (копия несёт отметку об удалении). Но восстановление из старой копии или из цепочки без последних звеньев его вернёт: убедиться, что цепочка полная, приложению нечем — у файлов в чужом хранилище нет признака «последнее звено», которому можно верить.

⚠️ Потеря ключа восстановления означает потерю переписки. Это прямое следствие того, что мы не можем её прочитать. Обещать иное значило бы обещать доступ, которого у нас не должно быть.

Пределы защиты

Ни один мессенджер не защищает от всего. Здесь — пределы GasApp сейчас, чтобы вы могли решить, как им пользоваться.

Собеседник, найденный по имени. Когда вы ищете человека по имени, его ключ приходит от сервера, и нечестный сервер мог бы подсунуть другой. GasApp сверяет ключ с открытым журналом ключей: писать можно, когда тот же ключ простоял в журнале не меньше суток, а каждый аккаунт раз в час проверяет собственную запись — поэтому подменённый ключ пришлось бы показать всем, и подмену заметят. Тот, кто не открывал приложение больше суток, заметит её, только когда вернётся. Для полной уверенности сверьте коды безопасности лично или добавьте человека по QR-коду или ссылке на контакт — тогда ключ не приходит от сервера вовсе. Уже начатые переписки это не затрагивает: ключ собеседника запоминается, и его смена всегда показывается. Каждое сообщение, включая первое, запечатано: сервер не видит, кто кому написал.

Собеседник. Тот, кто получил ваше сообщение, его видел и может сфотографировать или запомнить. «Удалить у всех» — просьба к его приложению, а не гарантия.

Ваш сетевой адрес. При прямом соединении (по умолчанию) сервер его видит, со встроенным Tor — нет; см. Tor, мосты и службы Tor Project.

Резервные копии и ключ восстановления — см. Что остаётся на вашем устройстве.

Уведомления — см. Push-уведомления.

Имена и неактивные аккаунты — см. Имя пользователя и неактивные аккаунты.

Звонки. В этой версии звонков нет.

Ваши права и как ими воспользоваться

ПравоКак
Узнать, что о вас хранитсяПеречислено в политике хранения; сверх этого ничего нет
Удалить перепискуВ приложении, локально; на сервере её и нет
Удалить аккаунт«Приватность» → «Удалить аккаунт» — см. ниже
Забрать свои данные«Приватность» → «Выгрузить мои данные» — см. ниже

Выгрузка данных

В приложении: «Приватность» → «Выгрузить мои данные». Вы получаете файл JSON с именем пользователя, контактами, перепиской и настройками. Формат открытый: его прочтёт и человек, и чужая программа — право забрать данные в закрытом формате правом не является.

⚠️ Файл не зашифрован. Это осознанный выбор: зашифрованная выгрузка не переносима, а смысл выгрузки в том, чтобы унести данные туда, где их прочтут. Но тот, кто получит этот файл, получит всю переписку. Приложение предупреждает об этом до того, как вы выберете, куда сохранять.

Ключей в выгрузке нет — ни приватного identity-ключа, ни состояния ратчета, ни ключа восстановления. Поэтому восстановить из неё аккаунт нельзя: для этого есть резервная копия, и она зашифрована. Это разные задачи, и смешивать их нельзя — переносимость требует читаемости, восстановление требует секретности.

Имя пользователя и неактивные аккаунты

Имя закреплено за аккаунтом, пока аккаунт существует. Переустановка приложения его не освобождает. Вернуть аккаунт с тем же именем на новом телефоне можно из резервной копии: «Восстановить аккаунт из копии» на экране регистрации. В копии лежит ключ восстановления аккаунта; сервер хранит только его открытую часть и, проверив подпись, перепривязывает аккаунт к новому устройству. Ключ безопасности при этом новый, и собеседникам нужно заново сверить safety number: приватный identity-ключ между устройствами не копируется.

Аккаунт, в который никто не входил 12 месяцев, сервер удаляет целиком — так же, как при удалении владельцем, — и имя освобождается. Для этого сервер хранит только месяц последней активности, без дня и часа: точное время было бы журналом присутствия.

Удаление аккаунта

В приложении: «Приватность» → «Удалить аккаунт». Подтверждений два, и это не формальность: вернуть удалённый аккаунт не может никто, включая оператора сервера.

Уходит с сервера: имя пользователя, identity-ключ, все устройства аккаунта, подписанные и одноразовые предключи, недоставленные конверты, токены push и ключи доступа sealed sender, а также хеш адреса почты, пометка о премиуме и все каналы, которые вы создали, вместе с их записями. Адрес после этого свободен: на него можно создать новый аккаунт.

Уходит с устройства: база переписки (в ней же каналы, которые вы читали, и ключи ваших каналов), соль, зашифрованный аппаратный секрет, ключ-обёртка в Android Keystore и история попыток ввода PIN.

Приложение показывает числа — сколько устройств, конвертов и вложений удалено. «Готово» без чисел ничем не отличается от «готово» при запросе, который ничего не сделал, а проверить самому после удаления уже нечем.

⚠️ Чего удаление не делает.

Если удаление на сервере не прошло (нет связи), на устройстве ничего не трогается, и попытку можно повторить. Обратный порядок оставил бы человека без переписки, но с живым аккаунтом на сервере, и повторить удаление стало бы нечем: запрос подписывается ключом устройства.

Дети

Условия использования требуют, чтобы вам было не меньше 16 лет, и приложение не рассчитано на то, чтобы привлекать детей. Мы не можем проверить возраст, не собирая данных, которых не собираем, — поэтому не проверяем и говорим об этом прямо.

Где хранятся данные

На сервере, который разворачивает оператор экземпляра. Для официального экземпляра место размещения будет указано здесь до релиза 1.0. GasApp распространяется под AGPL-3.0, и любой может поднять свой экземпляр — тогда политика его оператора заменяет эту.

Изменения

Существенные изменения публикуются в репозитории с датой редакции. История правок видна в git log этого файла — это и есть механизм уведомления, которому можно верить без нашего участия.

Связь

privacy@gasapp.eu — вопросы о данных. security@gasapp.eu — уязвимости (SECURITY.md).