Как сделать мессенджер анонимным по-настоящему. Мессенджер наподобие WhatsApp — сколько стоит разработка? Пишем мессенджер на андроид


Одна из важных составляющих как IT-инфраструктуры компании, так и информационной безопасности – организация общения между сотрудниками, а также офисами и филиалами компании. Уже общепринято, что компания имеет свои почтовые сервера и корпоративный e-mail адрес, переписка ведется и хранится на собственных (купленных или арендованных) серверах, оставаясь таким образом, внутри защищенного контура.

В то же время многие компании по-прежнему не задумываются о том, что сотрудники пользуются публичными мессенджерами типа Skype или IСQ, пересылая по ним и цифры, представляющие коммерческую тайну, и документы, и логины-пароли.

Между тем, создать собственный корпоративный мессенджер не так сложно. Внутрикорпоративный мессендж-сервер – это технология, которая позволяет организовать обмен сообщениями между определенными группами сотрудников внутри сервера компании, как арендованного и находящегося удаленно, так и стоящего непосредственно в здании компании. В отличие от публичных мессенджеров, корпоративнвый избавлен от такого существенного недостатка – как отсутствие конфиденциальности. Ни одна компания, владеющая публичным мессенджером, не даст гарантии, что информация, исходящая от Ваших сотрудников, не будет передана третьим лицам. Внутрикорпоративный сервис полностью контролируется компанией- заказчиком, обмен сообщениями происходит внутри закрытого контура – сервера компании, при необходимости можно установить дополнительный контроль за обменом информацией – контроль службы внутренней безопасности компании.

Обмен сообщениями возможен среди всех сотрудников, которых руководство сочло необходимым подключить к данному сервису, при условии наличия Интернета. Можно обмениваться сообщениями с персонального компьютера, ноутбука, тонкого клиента, планшета и даже смартфона.

Особенно актуален данный сервис для компаний, имеющих несколько офисов, либо находящихся в нескольких городах/странах, поскольку позволяет существенно сэкономить на междугородней и международной телефонной связи.

Начать использовать корпоративный мессенджер компании могут двумя способами. Во-первых, можно купить эту услугу как готовый пакет. Подобные предложения встречаются, например, у облачных провайдеров. В этом случае провайдер создает для компании-клиента сервер с установленной на нем платформой корпоративного мессенджера, физический, либо виртуальный. Сотрудникам компании-клиента выдаются логины и пароли. На компьютерах и ноутбуках сотрудников устанавливаются специальные программы. Самые распространенные из них: QIP, Pidgin, Spark, но каждый пользователь может выбрать на свой вкус. Причем у каждого из сотрудников может быть выбрана собственная, удобная именно этому пользователю, программа. По желанию можно установить программу и на мобильные устройства.

Во-вторых, компания может поднять собственный сервер с платформой для мессенджера, а затем точно также подключить к этому серверу своих сотрудников. Отдельно стоит отменить, что передача данных в обоих случаях осуществляется по ssl – то есть по зашифрованным каналам связи. И это существенно повышает информационную безопасность компании.

И был у нее удивительный частный Интернет за заборчиком, где вместо URL-ов были "keywords": что-то среднее между адресом веб страницы и купленным ключевым словом в рекламе. Компании боролись за интересные ключевые слова, как сейчас борются за домены, а реклама выглядела так: "посетите нас во всемирной сети по адресу www.example.com, или наберите AOL Keyword: "banking"".


История имеет свойство повторяться. Сейчас роль Америки Онлайн играют основные мессенджеры: все они за заборчиками, несовместимы друг с другом, все изобретают свои keywords, желают схватить пользователя и уже никогда не отпускать. Компании не заинтересованы в открытости: более крупные игроки не желают делиться пользователями с более мелкими и уж тем более становиться открытыми. В результате невозможно послать сообщение даже из WhatsApp в Facebook Messenger, несмотря на то, что оба принадлежат одной компании. Да и пользователи ценят надежность и удобство выше абстрактной открытости, хотя многих раздражает, что часть друзей, например, в Telegram, часть в WhatsApp, а родители в Skype.


А вот роль открытого интернета, к сожалению, сегодня не играет никто. Ситуацию хочется изменить. Если XMPP не справился, может быть кто-то другой сможет? И тут рассказ про Tinode .

Что такое Tinode

Tinode - мессенджер с полностью открытым исходным кодом на Github. Все клиентские приложения (ReactJS и Андроид) лицензированы под Apache 2.0, для того, чтобы упростить создание коммерческих приложений на основе Tinode, сервер под GPL 3.0. Цель проекта - создать федерированный мессенджер, который прост и удобен как для пользователей, так и для операторов. Поставил - и все работает, как MySQL или Nginx. В долгосрочной перспективе цель проекта – создать открытую альтернативу существующим проприетарным мессенджерам, повторить в отношении мессенджеров то, что сделал Android в отношении операционных систем для мобильных телефонов.

Что он умеет

Поддержка множественных устройств.

У всех есть смартфон, иногда не один, плюс часто удобно использовать web-приложение с основного компьютера. Поэтому поддержка множественных устройств была одним из главных требований к проекту, что определило основные архитектурные решения. Если пользователь авторизуется с нового устройства, то не хочется, чтобы он начинал с чистого листа как в WeChat. А это означает, что нужно и адресную книгу, и сообщения хранить на сервере, что и было реализовано.


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

Онлайн статус

Трансляция онлайн/оффлайн статуса пользователя в мессенджерах воспринимается как что-то само собой разумеющееся, однако, это весьма тяжелая в реализации фича. Нужно, чтобы она "просто работала", предсказуемо и надежно. Надежность работы исключила генерацию статуса на клиенте, как это реализовано в некоторых XMPP приложениях. В случае Tinode, сервер генерирует онлайн статус и рассылает по адресной книге, что, опять же, требует хранения контактов на сервере и их синхронизацию с клиентскими приложениями.

Простота протокола

Протокол хотелось сделать таким, чтобы кривая обучаемости была пологой – не нужно знать всего, чтобы начать. Спецификация получилась очень компактной : 10 запросов клиента, 5 ответов сервера. Например, по сравнению с 200+ страницами только core XMPP , не считая extensions, это почти записка на салфетке.


Представление данных отделено от сетевого протокола. Протокол лишь требует определенную структуру данных, но не требует, чтобы они передавались по сети каким-то определенным образом. Сейчас сервер поддерживает JSON по websocket и long polling, c TLS и без, плюс gRPC по TCP. Поддержка gRPC была реализована одним разработчиком за две недели, включая написание текстового клиента на Питоне. Добавление поддержки иных форматов данных и протоколов, например, MessagePack или Noise , вряд ли займет намного больше.

Расширяемость

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


Было принято решение разделить функционал на три части - основной, сетевой и вспомогательный. Основной - это то, что позволяет Tinode выполнять основную функцию - пересылать сообщения. Сетевой - функционал взаимодействия в серверами, как формат передаваемых данных и сетевой протокол. Вспомогательный - то, что решает чью-то локальную задачу, например, поддержка конкретной базы данных в качестве бэкенда или какой-то метод авторизации, но никак не влияет на другие сервера или пользовательские приложения. Основной функционал реализован в основном коде. Сетевой функционал выделен, но также хранится в основном репозитории для того, чтобы по возможности избежать создания несовместимых серверов. Вспомогательный реализован в виде плагинов - компилируемых Go интерфейсов (поддержка разных баз данных, разных авторизаторов, пуш нотификации, валидаторы по емейл или телефону, поддержка каптчи и т.п.) и gRPC endpoints (чатбот и поисковый интерфейс).

Прочее

  • Возможность, но не требование привязки счета к телефону или емейлу или ещё чему угодно.
  • ID пользователей, которые трудно угадать, и, соответственно, трудно разослать спам.
  • Tags, позволяющие реализовывать поиск людей как в WeChat (и, подобно WeChat, встроить в мессенджер службу знакомств) или разделить организацию на отделы как в Slack.
  • Возможность подключения пользователей без регистрации, необходимая, например, для организации службы поддержки через чат.
  • Интерфейс и пример подключения чатботов.
  • Планы создания каналов как в Telegram.

Почему Go?

Сервер для мессенджера по сути роутер: получает сообщение из одного канала, как-то его обрабатывает, затем передает в другой канал или каналы. Go (как и Erlang, но это уже другая история) идеально подходит для создания такого функционала т.к. содержит примитивы goroutine и chan, делающие организацию потоков и обмен данными между ними эффективным и простым.


Безусловно, роутер можно написать и на C/C++, и на Java. Однако, при прочих равных, код скорее всего получится более сложным и потребует больших усилий для избежания дедлоков.

А что потом?

Федерация

Одна из основных задач для Tinode на ближайший год - создание платформы для федерации. Так, чтобы любой желающий мог запустить свой Tinode сервер, который бы мог обмениваться сообщениями с любым другим сервером, точно так, как это возможно с емейлом. Уже сейчас возможна кластеризация серверов. Сетевой обмен между сервером и клиентами идет по TLS websocket, что для внешного наблюдателя мало отличимо от простого HTTPS трафика.


Публичный DNS, вероятно, будет использоваться, по крайней мере первоначально. Однако, в будущем поиск чат-серверов будет осуществляться также, как это сделано в Bittorrent - при помощи DHT , распределенной хеш таблицы.


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

Репутация и распределенное принятие решений

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

  • Криптографическая идентификация сервера-отправителя.
    Изначально, SMTP вообще не предполагал какой-либо идентификации отправителя. Не стоит снова наступать на эти грабли. Каждый сервер, желающий установить контакт, будет представлен криптографическим сертификатом. "Ну да", скажете вы, "я сейчас нагенерю 100500 сертификатов и каждый раз буду представляться новым чистым сервером". И будете правы. Поэтому следующий пункт.
  • Распределенный учет репутации.
    Когда к нам стучится новый, неизвестный сервер-отправитель, мы сделаем запрос к известным серверам с просьбой сообщить рейтинг нового сервера. И в зависимости от ответа установим, например, скорость, с которой новый сервер может посылать нам сообщения.

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

Шифрование

Ну а как же в наши дни без шифрования сообщений? Чаты между двумя людьми, вероятно, будут шифроваться OTR . С групповыми чатами пока непонятно. Все известные схемы шифрования групповых чатов либо имеют значительный недостатки, либо тяжеловесны и сложны в реализации. Также, не очевидно, насколько важно шифрование групповых чатов: "Если тайну знают двое – это уже не тайна, а если трое – это уже базар."


Что вы по этому поводу думаете?

Вы можете помочь и перевести немного средств на развитие сайта



Комментарии (205):

                      • Ваша наивность зашкаливает.


                        Можно сделать текст жирным, курсивом

                        Вы сами-то пробвали это сделать хотя бы раз?

                              • Вам нужно сменить хмпп-сервер

                                Я использую jabberon.ru, у которого есть HTTP File Upload согласно его диско (upload.jabberon.ru). На conference.jabber.ru всё работает, как вы заявляете.


                                Но кнопки отправки файла в чат на conference.jabber.ru у меня нет!

Наша команда, которая практически помешана на информационной безопасности, внедрила в Eleet множество интересных решений.

Ниже – восемь «фишек» продукта, существенно влияющих на вашу защищённость в сети. Некоторые из этих идей совершенно уникальны: такое предлагает только Eleet Private Messenger. Другие, в том или ином виде, можно встретить у конкурентов, но мы всё равно о них расскажем: ведь важна именно комплексная система, построенная командой разработки Eleet.

Итак, начнём.

1. Нет привязки к телефону

Самое первое, и самое важное. Сегодня существует множество мессенджеров, заявляющих о своём высоком уровне безопасности, но… почти всегда работа с ними начинается с регистрации по номеру мобильного телефона. Такой недостаток есть даже у FireChat, работающего через распределенную mesh-сеть.

В нашем представлении, после этого говорить об анонимности уже не имеет смысла. Так или иначе, вы сообщили кому-то свой телефонный номер – а если он попадёт не в те руки, вашу личность и точное местонахождение установить окажется очень легко.

Не забудем и о банальном способе обхода авторизации по SMS, столь популярной сегодня: создании дубликата SIM-карты. Мобильные операторы легко могут осуществить это в чьих-либо интересах. Да, пресловутая «двухфакторная авторизация» с пересылкой кода текстовым сообщением – далеко не так надёжна, как многим кажется.

В любом из этих вариантов, уже не будет иметь никакого значения – насколько хорошее применяется шифрование, надёжны ли пароли… именно поэтому в мессенджере Eleet никакой авторизации по номеру телефона нет.

2. Нет привязки к личности

Это не столько конкретная функция приложения, сколько общая идея, которую мы последовательно реализуем – и она естественным образом вытекает из предыдущего пункта. Итак, аккаунт в Eleet Private Messenger вообще никак не связан с вашей реальной личностью. Пользуясь нашим мессенджером, вы не оставляете следов, позволяющих связать вас настоящего с вами же в информационном пространстве Eleet.

3. Приватные ID

Всё ещё не уверены в том, что ваш аккаунт невозможно отследить? Хорошо: создайте дополнительный приватный ID, обладающим полным функционалом «основного». При этом, все связанные с ним данные (контакты, логи, контент) будут храниться отдельно, и исчезнут при удалении приватного ID – не оставив в основном аккаунте никаких следов.

4. Не «светитесь» онлайн

Из разряда приятных мелочей: пользователи нашего мессенджера имеют возможность полностью скрывать своё пребывание онлайн. Нет, мы не имеем в виду простое сокрытие времени последнего входа в систему – а именно полноценную «невидимку». Многим не хватает этого в социальных сетях, да и мессенджеры не всегда предлагают подобную возможность.

5. Удалить можно действительно всё

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

В нашем приложении этой проблемы нет. Вы легко можете удалить себя из списка контактов собеседника. Логов общения с вами у любого другого пользователя также не останется, если вы этого захотите. Поэтому никто не сможет, к примеру, шантажировать вас компрометирующей перепиской.

Дело в том, что это – лишь дополнительный слой безопасности, а не ключевой элемент защиты созданного вами чата. Пин легко запомнить, удобно вводить с любого устройства: о надёжном пароле такого, как правило, не скажешь.

Пин-код не играет ключевой роли в информационной защите, но помогает пользователям чувствовать себя ещё спокойнее.

7. Особо секретные чаты

Обычно, когда речь идёт об информационной безопасности, в центре внимания оказывается внешняя слежка: злоумышленники, конкуренты, органы власти. Но что, если вы не вполне доверяете собственным собеседникам?

Всё просто: создайте с ними анонимный чат, задав на входе любой никнейм. Люди, с которыми вы общаетесь в таком чате, никогда не узнают вашего настоящего ID. Заодно чат можно сделать и «самоуничтожающимся» спустя определённое время.

8. И самое интересное!

Естественно, нашу любимую функцию мы приберегли напоследок. Пользователи Eleet Private Messenger могут задать «пин-код на удаление». Что это такое?

Со стороны покажется, будто вы вводите самый обыкновенный пин-код (вроде того, что описан в шестом пункте). Обычная мера авторизации. В действительности же, по этой команде Eleet мгновенно удалит все ваши данные – переписки, контакты, пересылаемые материалы, и тому подобное. А как вы уже знаете, под «удалением» наша команда имеет в виду настоящее, бесследное удаление: восстановить ничего не получится.

Не станем перечислять, в каких именно ситуациях эта функция может оказаться жизненно важной: полагаем, читатели и сами могут представить несколько вариантов подобного. Как говорится, «если вы понимаете, о чём мы».

Напоследок, повторимся: Eleet Private Messenger создан людьми, для которых анонимность в сети, надёжная защита любых персональных данных и виртуального личного пространства – важнейшие ценности. Все усилия команды разработчиков служат тому, чтобы сделать Eleet максимально безопасным на всех уровнях.

Как видите, в этом направлении нами сделано уже очень многое. И будет реализовано ещё больше.