- PVSM.RU - https://www.pvsm.ru -

Почему Signal — не идеальный мессенджер. Нам нужна децентрализация

Почему Signal — не идеальный мессенджер. Нам нужна децентрализация - 1
Федеративная система Matrix поддерживает связь с другими сетями через мосты. Это пример инфраструктуры, к которой нужно стремиться Signal

4 января 2021 года WhatsApp внёс изменения [1] в пользовательское соглашение. Теперь каждый пользователь обязан согласиться на отправку личных данных в материнскую компанию Facebook, иначе его аккаунт WhatsApp просто заблокируют. Эффект от изменений был вполне предсказуем — миллионы человек массово ушли из WhatsApp. Прежде всего, в Telegram и Signal.

Павел Дуров назвал [2] это «крупнейшей цифровой миграцией в истории»: всего за трое суток у Telegram появилось 25 млн новых пользователей, абсолютный рекорд. Илон Маск в твиттере прокомментировал события просто: «Используйте Signal» [3], — написал он. То же самое советует [4] Эдвард Сноуден. Мессенджер Signal [5] для многих стал настоящим открытием.

После изменения политики WhatsApp популярность Signal взлетела на 4200% [6]: если говорить по-русски, это значит в 43 раза, а Telegram вышел на второе место по количеству скачиваний в США. В итоге они примерно сравнялись по количеству загрузок: 7,5 млн и 9 млн за первую неделю после той новости от WhatsApp.

Почему Signal — не идеальный мессенджер. Нам нужна децентрализация - 2
Скачок количества установок Signal в Google Play

С точки зрения шифрования, приватности и защиты информации Signal предпочтительнее, чем Telegram [7]. Криптографические протоколы Telegram в старой версии не выдерживают никакой критики [8], они просто [9] ужасны [10], а в новой версии протокол до сих пор не прошёл независимый аудит. С другой стороны, у Signal всё в порядке: надёжность и безопасность подтверждены независимыми экспертами [11], код открыт и доступен для проверки всеми желающими.

Таким образом, если пользователи бегут от драконовской политики WhatsApp в области приватности, то логично переходить на более защищённый и приватный мессенджер, то есть на Signal. Это лучшее, что у нас есть.

Почему Signal — не идеальный мессенджер. Нам нужна децентрализация - 3
Граффити, сделанное во время массовых протестов в Калифорнии в 2017 году. Фото: Elijah Nouvelage, Getty Images

Как клиенты заддосили собственный сервер

К сожалению, инфраструктура Signal не справилась с наплывом миллионов новых людей. Причём случилось довольно забавно: клиентское программное обеспечение Signal фактически заддосило собственный сервер [12].

В коде клиента под Android была ошибка по обработке таймаута. С наплывом десятков миллионов новых пользователей серверы начали иногда возвращать ошибку HTTP 508, но клиент не обрабатывал эту ошибку должным образом. Он снова и снова повторял попытки. Хотя в алгоритме и реализована экспоненциальная выдержка [13], но не был предусмотрен вариант, когда сервер специально отказывает клиенту в соединении. При этом экспоненциальная выдержка работала без джиттера (элемента случайности).

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

Примечание. Строго говоря, здесь не совсем DDoS. В компьютерной науке для данной проблемы существует специальный термин thundering herd problem [14]. Это можно перевести как «проблема грохочущего стада» — имеется в виду стадо, которое начинает орать одновременно.

Хотя код клиента для Android [15] открыт и опубликован на GitHub, никто так и не заметил эту ошибку во время предыдущих аудитов и проверок. Вероятно, аудиторы сконцентрировали внимание на правильной реализации криптографии, а не на всяких интерфейсах, которые не угрожают безопасности. Хотя нужно заметить, что некорректную реализацию повторения попыток коннекта часто допускают начинающие программисты.

16 января для исправления ситуации в код Android-клиента внесли следующие изменения. «Флаги функций» означают, что соответствующий параметр в клиентской программе может быть установлен сервером:

Теперь клиенты Signal не должны ддосить свой сервер.

Для таких ситуаций Mozilla предлагает принять новый код ошибки HTTP 429 Too Many Requests [20], чтобы определить ситуацию более ясно. Он сопровождается заголовком Retry-After [21] с указанием предпочтительного таймаута. Например:

HTTP/1.1 429 Too Many Requests
Content-Type: text/html
Retry-After: 3600

Возможно, такой код ошибки будет проще обрабатывать на клиенте.

Стабильность инфраструктуры Signal не налажена до сих пор, так что серверы периодически уходят в даун. Ничего не поделаешь, ведь Signal Foundation — это некоммерческая организация, которая существует на пожертвования [22]. В отличие от компаний Telegram FZ LLC и Telegram Messenger Inc., привлекающих десятки миллионов долларов от инвесторов с общей оценкой мессенджера в $30 млрд [23]. Но там пользователей фактически считают товаром. Павел Дуров объявил, что скоро начнёт монетизировать аудиторию [24], то есть показывать рекламу, зарабатывать на профилировании, продаже данных, таргетировании рекламы и так далее. Единственное, что Дуров пообещал не показывать рекламу в личных чатах.

Signal никогда не сделает ничего подобного. Но поэтому вынужден страдать от недостатка финансирования и связанных с этим технических проблем.

Кстати, мессенджер WhatsApp до покупки компанией Facebook нормально выдерживал более 100 млн пользователей. Но у него были деньги на инфраструктуру.

Централизованная инфраструктура — всегда плохо

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

Вообще, Мокси Марлинспайк выступает принципиально против федеративной системы [25], которая предусматривает сосуществование произвольного количества серверов Signal, принадлежащих третьим лицам. Например, такую модель предусматривает протокол коммуникации XMPP (Jabber), на котором отлично работает служба обмена сообщениями.

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

Ещё один пример федеративной системы — социальная сеть Mastodon [26], свободная альтернатива Facebook.

Почему Signal — не идеальный мессенджер. Нам нужна децентрализация - 4
Инстансы Mastodon

Матрица

Сквозное шифрование в любом случае делает невозможным перехват сообщений Signal на сервере, поэтому никто не мешает реализовать федеративную систему. Например, такая система реализована в сети Matrix [27], которая поддерживает любые виды коммуникаций, в том числе разработаны мосты в Slack, IRC, XMPP, Gitter, Telegram, Discord, WhatsApp, Facebook, Hangouts, Signal и другие [28].

Нативный клиент для Matrix называется Element [29], он выпускается в версиях для Windows, macOS, Android, iOS, а также работает в вебе [30], то есть просто в браузере.

Почему Signal — не идеальный мессенджер. Нам нужна децентрализация - 5

Почему Signal — не идеальный мессенджер. Нам нужна децентрализация - 6
Веб-версия Element

Matrix поддерживает сквозное шифрование, причём фактически на том же протоколе Signal [31], что и сам Signal. Но это система иного типа. В реальности Matrix — это инфраструктура для сторонних сервисов, некий промежуточный слой, его называют «универсальной коммуникационной шиной» [32]. Используя все вышеперечисленные мосты, можно интегрировать все сторонние мессенджеры, приложения для групповой работы и социальные сети в едином интерфейсе Matrix.

Почему Signal — не идеальный мессенджер. Нам нужна децентрализация - 7

В прошлом году удалось значительно увеличить количество мостов для разных сервисов благодаря одному предпринимателю, который предложил вознаграждение $500 [32] за создание мостов Hangouts, Slack, Instagram, Facebook, Twitter, WeChat, Line, Linkedin, Airbnb, Tinder, Gmail и Snapchat.

Как выяснилось сейчас, это были инвестиции с дальним прицелом: в январе 2021 года этот предприниматель запустил новый стартап: платный универсальный мессенджер Beeper [33] с интеграцией 15 мостов из Matrix.

Тем временем разработчики Matrix рассматривают дальнейшую эволюцию проекта. Вместо федеративной системы с определённым количеством серверов они планируют внедрить полноценный P2P [34]. На пиринговой инфраструктуре работает демонстрационная версия мессенджера Riot P2P [35].

Почему Signal — не идеальный мессенджер. Нам нужна децентрализация - 8
Демо Riot P2P

Несколько лет назад разработчики Matrix даже предлагали [36] Мокси подключить Signal (тогда он назывался TextSecure) к Matrix.

Мокси вежливо отказался, а через несколько месяцев опубликовал пост «Экосистема движется» [37] с объяснением, почему он «больше не верит в возможность разработки конкурентного мессенджера на федеративной основе».

Аргументом Мокси Марлинспайка является то, что децентрализованную систему сложнее корректно спроектировать и запрограммировать. Программиста можно понять по-человечески, но сложность в реализации — это всё-таки недостаточное оправдание.

С каждым новым даунтаймом централизованная инфраструктура выглядит всё менее подходящей для Signal, да и для любого другого веб-сервиса, который ставит главным приоритетом надёжность работы. Даунтайм 16 января 2021 года продолжался почти сутки [38]!

Даунтайм на сутки — уже достаточный аргумент против централизации. Есть и другие. Например, Signal использует инфраструктуру AWS [39], а это уже определённый риск, как мы знаем по печальной истории изгнания сервиса Parler [40], который тоже рискнул положиться на AWS.

Хотя исходный код Signal открыт, но тот же серверный код [41] не обновлялся с апреля 2020 года. Это не значит, что там нет багов, а скорее указывает на недостаток внимания.

Если Мокси по-прежнему будет игнорировать федеративные системы, то в будущем есть смысл посмотреть в сторону альтернативных приложений со сквозным шифрованием. Кроме Matrix, например, есть приложение Session [42]. Оно не полагается на центральные серверы и не требует номер телефона для регистрации (это ещё один повод для критики Signal).

Почему Signal — не идеальный мессенджер. Нам нужна децентрализация - 9
Мессенджер Session

Судя по whitepaper [43], одним из разработчиков Session является Максим Шишмарёв из проекта Loki Project. Эта организация занимается разработкой инструментов приватности и анонимных коммуникаций.

Session и Riot выглядят более стабильно, хотя по функциональности и удобству использования уступают Signal. Но они показывают, в каком направлении нужно двигаться Signal с точки зрения инфраструктуры. Федеративная система без центральных серверов — это отсутствие единой точки отказа, что означает более стабильную и надёжную работу.

По крайней мере, такое приложение не заддосит само себя.


На правах рекламы

Эпичные серверы — это виртуальные серверы [44] для любых задач. Вы можете создать собственный тарифный план, максимальная конфигурация — 128 ядер CPU, 512 ГБ RAM, 4000 ГБ NVMe!

Автор: Mikhail

Источник [45]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/open-source/361047

Ссылки в тексте:

[1] внёс изменения: https://www.whatsapp.com/legal/updates/privacy-policy

[2] назвал: https://t.me/durov/148

[3] «Используйте Signal»: https://twitter.com/elonmusk/status/1347165127036977153

[4] советует: https://twitter.com/Snowden/status/1350123606601322496

[5] Signal: https://signal.org/ru/

[6] популярность Signal взлетела на 4200%: https://www.businessinsider.com/whatsapp-facebook-data-signal-download-telegram-encrypted-messaging-2021-1

[7] Signal предпочтительнее, чем Telegram: https://habr.com/ru/company/globalsign/blog/536986/

[8] не выдерживают никакой критики: http://library.usc.edu.ph/ACM/SIGSAC%202017/spsm/p113.pdf

[9] просто: https://courses.csail.mit.edu/6.857/2017/project/19.pdf

[10] ужасны: https://eprint.iacr.org/2015/1177.pdf

[11] подтверждены независимыми экспертами: https://www.pindrop.com/blog/audit-of-signal-protocol-finds-it-secure-and-trustworthy/

[12] заддосило собственный сервер: https://twitter.com/NovakDaniel/status/1350471722034745348

[13] экспоненциальная выдержка: https://en.wikipedia.org/wiki/Exponential_backoff

[14] thundering herd problem: https://en.wikipedia.org/wiki/Thundering_herd_problem

[15] клиента для Android: https://github.com/signalapp/Signal-Android/commits/master

[16] Флаг функции для максимального таймаута повторной попытки: https://github.com/signalapp/Signal-Android/commit/93e9dd6425b22db13baaf7e7f780a93bda0a457e

[17] Джиттер для экспоненциальной выдержки: https://github.com/signalapp/Signal-Android/commit/8f7fe5c3eeb693e132b3c7d8bc692546bd70d27d

[18] Обработка ServerRejectedException (HTTP 508): https://github.com/signalapp/Signal-Android/commit/c95f0fce6ee3b78ff82fde865b2ee49288e1303f

[19] Флаг функции для автоматического сброса сеанса: https://github.com/signalapp/Signal-Android/commit/a3c7e7e552f35751c43e79481357980bb36a8404

[20] HTTP 429 Too Many Requests: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429

[21] Retry-After: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After

[22] пожертвования: https://signal.org/donate/

[23] $30 млрд: https://habr.com/ru/news/t/537446/

[24] скоро начнёт монетизировать аудиторию: https://habr.com/ru/news/t/534550/

[25] федеративной системы: https://en.wikipedia.org/wiki/Federation_(information_technology)

[26] Mastodon: https://joinmastodon.org/

[27] Matrix: https://matrix.org/

[28] другие: https://matrix.org/bridges/

[29] Element: https://element.io/

[30] работает в вебе: https://app.element.io/

[31] протоколе Signal: https://en.wikipedia.org/wiki/Signal_Protocol

[32] «универсальной коммуникационной шиной»: https://medium.com/@ericmigi/the-universal-communication-bus-42dfb9a141ad

[33] платный универсальный мессенджер Beeper: https://habr.com/ru/news/t/538616/

[34] планируют внедрить полноценный P2P: https://matrix.org/blog/2020/06/02/introducing-p-2-p-matrix

[35] Riot P2P: https://p2p.riot.im/

[36] даже предлагали: https://matrix.org/blog/2020/01/02/on-privacy-versus-freedom

[37] «Экосистема движется»: https://signal.org/blog/the-ecosystem-is-moving/

[38] продолжался почти сутки: https://www.theverge.com/2021/1/17/22235707/signal-back-app-privacy-encrypted-outage

[39] использует инфраструктуру AWS: https://signal.org/blog/looking-back-on-the-front/

[40] изгнания сервиса Parler: https://habr.com/ru/news/t/536886/

[41] серверный код: https://github.com/signalapp/Signal-Server

[42] Session: https://getsession.org/

[43] whitepaper: https://getsession.org/wp-content/uploads/2020/02/Session-Whitepaper.pdf

[44] виртуальные серверы: https://vdsina.ru/cloud-servers?partner=habr242

[45] Источник: https://habr.com/ru/post/539330/?utm_source=habrahabr&utm_medium=rss&utm_campaign=539330