Как мы внедрили скрытие аккаунтов в Telegram или #ДуровДобавьДвойноеДно

Как мы внедрили скрытие аккаунтов в Telegram или #ДуровДобавьДвойноеДно

Бекхан Гендаргеноевский

Решение, которое мы разработали для Telegram
Если анимированное превью у вас не воспроизводится, смотрите его здесь


Открытое письмо Павлу Дурову от команды Postuf.

Здравствуйте, Павел Дуров! Мы надеемся, что Вы нашли время ознакомиться с данным открытым письмом. Мы разработали решение для Telegram-клиента, которое позволяет скрывать аккаунты и открывать их только через уникальный код-пароль (см. анимированное превью). Нет никаких следов присутствия скрытых аккаунтов. Невозможно узнать, есть ли в мессенджере скрытые аккаунты и какое их количество. Решение именуется как «Двойное дно». Все нюансы были тщательно нами продуманы, а сам Telegram-клиент с точки зрения интерфейса и пользовательского опыта никак не изменился. Практически никаких доработок со стороны команды Telegram не требуется.  «Двойное дно» сделано полностью «под ключ», Вам нужно лишь принять наш «Pull Request» в Вашем репозитории. Перед тем как отправить «Pull Request», мы возьмем несколько дней на сбор обратной связи от пользователей, чтобы исправить мелкие недочеты. Для ознакомления Вы можете установить нашу сборку через TestFlight, а если под рукой нет iOS-устройства, то посмотреть видео. Исходный код сборки доступен на GitHub.


«Двойное дно» выручит в ситуациях, когда пользователь будет вынужден разблокировать и показать содержимое Telegram. А будет вынужден, потому что его пытают, его шантажируют, на него давят. Так совпало, что это письмо пишется в тот момент, когда в Беларуси происходит беспредел. Силовики подходят к прохожим, просят показать Telegram, если там находят оппозиционные каналы, то людей увозят в отдел. Сообщения о том, что силовики в Беларуси требуют «показать» телефон, периодически мелькают в СМИ. Данная ситуация в Беларуси дает четкий сигнал о том, что в «Двойном дне» есть крайняя необходимость. 


Ноль байт выданных личных данных, секретные чаты, борьба с цензурой - и всё это несмотря на давление разных стран. Вы создали действительно качественный и уникальный продукт. Основной упор в Telegram делается на защиту хранения и передачи данных, но очень мало делается для защиты от прямого (физического) доступа к устройству и пользователю. Это касается не только Вашего мессенджера, в принципе, ни в одном мессенджере нет защиты от подобной «атаки». Мы предлагаем Вам первым открыть новую страницу защиты приватности пользователя, добавив принцип «Двойного дна» в Telegram-клиент. 


Еще раз хотим подчеркнуть, что при разработке «Двойного дна» мы придерживались принципа не менять пользовательский интерфейс и опыт (UX/UI). Помимо этого, был принцип проработать все детали таким образом, чтобы команде Telegram не пришлось ничего дорабатывать. Считаем, что соответствуем принципам на 99%.


Мы готовы тесно взаимодействовать по улучшению и доработке «Двойного дна». Предоставить всю необходимую информацию. По всем вопросам мы доступны здесь.


Ниже Вы можете ознакомиться с детальным описанием механизма работы «Двойного дна» в Telegram-клиенте.


С большим уважением, Бекхан Гендаргеноевский / Команда Postuf.




Подробное описание «Двойного дна» в Telegram-клиенте


Предисловие

Помогите нам распространить хештег #ДуровДобавьДвойноеДно в социальных сетях, чтобы Павел Дуров обратил внимание на открытое письмо. Сейчас он активно ведет свой Твиттер-аккаунт.

UPD:
По возможности, поставьте лайк нашему комментарию и оставьте хештег #ДуровДобавьДвойноеДно под ним.



Функционал «Двойного дна» интуитивно понятен, он максимально упрощен для пользователя, но если вы хотите знать все детали, то текст ниже для вас.


Самая актуальная информация по обновлениям на нашем канале. О недочетах пишите в чат.



Двойное дно

Скрывает аккаунты, нигде их не отображает. Скрытые аккаунты не видят друг друга, но видят основные, а основные аккаунты видят только основные. О существовании скрытого аккаунта знает только сам владелец устройства.



Как попасть в скрытые аккаунты

Скрытые аккаунты не отображаются в общем списке аккаунтов, доступ к ним только через ввод код-пароля в режиме блокировки Telegram-клиента. Количество скрытых аккаунтов "Двойным дном" не ограничено. 



Активация


Кнопка «Двойное дно» находится в «Настройках», в разделе «Конфиденциальность». Скрыть аккаунт можно только в первую минуту после авторизации аккаунта в Telegram-клиенте. По истечению времени кнопка пропадает из «Настроек». Чтобы снова увидеть кнопку, нужно заново авторизоваться. Временно́е ограничение позволяет скрыть факт активации «Двойного дна». Если бы кнопка не пропадала, то по ней можно было бы понять, активировано ли «Двойное дно». Это дает возможность показывать злоумышленнику любой аккаунт без намека на то, что имеются другие скрытые аккаунты.



Основной аккаунт


Для возможности скрыть текущий аккаунт необходимо иметь, как минимум, один основной аккаунт, который вы не будете скрывать. Если критерий уже соблюден, то «Двойное дно» не будет просить вас добавлять аккаунт.


В теории, можно иметь один и тот же аккаунт в качестве основного и скрытого. Это может быть полезно, если Вы хотите иметь в скрытом аккаунте секретные чаты, которые не будут отображаться в основном. Показ секретных чатов только в одной сессии - стандартное поведение Telegram. Мы не стали давать возможность указывать в качестве основного аккаунта тот аккаунт, который вы в данный момент уже пытаетесь скрыть (защита от дурака), но вам ничего не мешает добавить тот же аккаунт заново через стандартный способ в настройках. Для безопасности, помешать Вам это сделать мы не можем, так как система может «спалить» факт присутствия скрытого аккаунта, если Telegram-клиент будет выдавать предупреждение.



Основной код-пароль


Вам нужно указать код-пароль для всех аккаунтов, которые не будут скрыты в приложении (основные аккаунты). Его вы будете указывать при входе, если захотите получить доступ к основным аккаунтам.


Устанавливается минимальное время автоблокировки приложения (одна минута). Если код-пароль уже был ранее установлен вами в настройках Telegram-клиента, то «Двойное» дно не будет вас просить его установить. Основной код-пароль можно в любой момент поменять в настройках (Стандартный функционал Telegram).


Основной код-пароль можно отключить в настройках (Стандартный функционал Telegram). В таком случае, для безопасности «Двойное дно» не воспрепятствует этому, никаких предупреждений не будет. Основные аккаунты будут доступны без ввода код-пароля. Скрытые аккаунты никуда не пропадут, но будут недоступны для использования. От них не будут приходить уведомления в конкретно взятом Telegram-клиенте, а звонки будут отключены на всех устройствах, где авторизованы скрытые аккаунты (Технически невозможно со звонками провернуть как с уведомлениями без помощи команды Telegram).



Скрытый код пароль


Здесь мы устанавливаем код-пароль для аккаунта, который хотим скрыть. Формат пароля зависит от того, какой он был задан при установке основного код-пароля. Например, если вы указали в основном четырехзначный код-пароль, то в скрытом будет тот же формат. 


Скрытый код-пароль нельзя изменить после завершения скрытия аккаунта. Единственный способ - заново добавить аккаунт в Telegram-клиент и активировать «Двойное дно».


Интересный момент, если в будущем в настройках вы поменяете формат код-пароля для основных аккаунтов, то вы не сможете попасть в скрытые аккаунты. При этом доступ к ним вы не потеряете, но и попасть в них вы не сможете до тех пор, пока не вернете «правильный» формат. Таким образом, вы можете иметь несколько скрытых аккаунтов с разными форматами код-пароля. Это усложняет поиск скрытых аккаунтов, так как они могут присутствовать в нескольких «измерений».


«Двойное дно» не позволит вам установить для скрытого аккаунта такой же код-пароль как у основных, но в будущем вы все равно сможете это сделать в настройках (Стандартный функционал Telegram). В таком случае по данному код-паролю будут доступны основные аккаунты, а скрытый станет неактивным, доступ к нему будет невозможен до тех пор, пока вы не поменяете код-пароль для основных аккаунтов на любой другой. 


Если вы укажете код-пароль, который уже используется для другого скрытого аккаунта, то для безопасности «Двойное дно» этому не воспрепятствует. По данному код-паролю будет доступен крайний (последний) скрытый аккаунт, а предыдущий скрытый аккаунт будет недоступен до тех пор, пока крайний (последний) не будет разлогинен в приложении.



Уведомления и звонки


Так как уведомления и звонки могут выдать присутствие скрытого аккаунта, «Двойное дно» дает возможность отключить их для скрываемого аккаунта. Но есть нюанс, Telegram применяет данные настройки на все устройства, где авторизован аккаунт (Стандартный функционал Telegram). Это касается только мобильных устройств.


Счетчик уведомлений на иконке не будет учитывать скрытые аккаунты, так как при сворачивании Telegram-клиента в системе происходит переключение на последний основной аккаунт.


Какие именно параметры меняются, если вы отключаете уведомления и звонки на данном экране. 

  • Настройки -> Уведомления и звуки -> Уведомления о сообщениях -> Показывать уведомления -> Выкл.
  • Настройки -> Уведомления и звуки -> Уведомления от чатов -> Показывать уведомления -> Выкл.
  • Настройки -> Уведомления и звуки -> Уведомления от каналов -> Показывать уведомления -> Выкл.
  • Настройки -> Конфиденциальность -> Звонки -> Кто может мне звонить -> Никто


Мы понимаем, что без уведомлений пользоваться скрытыми аккаунтами некомфортно. Компромиссным вариантом было бы получать уведомления от скрытых аккаунтов только в "безымянном" виде, и только когда все сообщения Telegram приходят в таком же виде. Telegram в "безымянном" виде присылает уведомления, когда клиент заблокирован код-паролем. Получается следующее: Когда Telegram-клиент заблокирован, получаем уведомления от всех типов аккаунтов в "безымянном" виде, а когда разблокирован, то только от основных аккаунтов. Безусловно, такой алгоритм является зацепкой к обнаружению скрытого аккаунта, но это лучше, чем в открытую показывать уведомления в условиях, когда пользователю они необходимы. К сожалению, реализовать такой алгоритм без поддержки Telegram команды - невозможно.


Замочек


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

Здесь имеются два важных момента:

  • Первый, если вы свернете Telegram-клиент, будучи в скрытом аккаунте, то при входе обратно в приложение до автоблокировки вас перекинет на основной аккаунт. Если основных аккаунтов несколько, то на последний использованный.
  • Второй, если вы вошли в приложение, а автоблокировка еще не сработала, то вы можете сами заблокировать приложение, нажав на замочек над чатом (см. анимацию). Я сам лично узнал об этой функции только после начала разработки «Двойного дна», в том числе поэтому мы посчитали нужным уделить этому дополнительный экран с анимацией.



Финал


Это финальное окно, которое означает, что настройки успешно применены. 


Если вы начнете идти «назад», то настройки будут сбрасываться к предыдущему состоянию. Например, если вы указали основной код-пароль, но потом снова вернулись в состояние, где нужно добавить основной аккаунт, то основной код-пароль сбросится.


Если вы на полпути закроете Telegram-клиент, то «Двойное дно» откатит все изменения, но основной аккаунт (если вы его добавили) останется авторизованным. 



Разлогирование (logout) аккаунта

При разлогине из основного или скрытого аккаунта происходит перенаправление на другой основной аккаунт, а если это был единственный основной, то Telegram-клиент попросит авторизоваться (стандартное поведение Telegram).


Когда в Telegram-клиенте отсутствует хотя бы один основной аккаунт, доступ к скрытому аккаунту приостанавливается, а его уведомления и звонки отключаются. Уведомления отключаются на конкретном устройстве, а звонки для всех устройств, где авторизован скрытый аккаунт. 



Прочие особенности

  • «Двойное дно» позволяет добавлять аккаунт в Telegram-клиент, который уже присутствует в качестве скрытого. Это позволяет не выдавать присутствие активного «Двойного дна».
  • Siri и Виджет не видят скрытые аккаунты, а Apple Watch может видеть скрытый аккаунт, но только если данный аккаунт открыт в Telegram-клиенте.
  • Контакт, созданный в скрытом аккаунте, не добавляется в телефонную книгу устройства.
  • Видео и аудио вызовы скрытого аккаунта (входящие, исходящие, пропущенные) не отображаются в системном приложении "Телефон". Настройка "Интеграция со звонками iOS" (Настройки → Конфиденциальность → Звонки) должна игнорироваться скрытыми аккаунтами и влиять только на основные.
  • Новые виджеты для iOS 14 адаптированы под использование Двойного дна. Скрытые аккаунты не показываются в списке возможных к добавлению. Если чат из аккаунта был добавлен в виджет, а потом аккаунт был сделан скрытым, то чат пропадет из виджета



Ограничения

  • В нашем клиенте не доходят звонки, если сам клиент не запущен, но придет уведомление, что пропущен звонок (Технические особенности).