Федеративная система Matrix поддерживает связь с другими сетями через мосты. Это пример инфраструктуры, к которой нужно стремиться Signal
4 января 2021 года WhatsApp внёс изменения в пользовательское соглашение. Теперь каждый пользователь обязан согласиться на отправку личных данных в материнскую компанию Facebook, иначе его аккаунт WhatsApp просто заблокируют. Эффект от изменений был вполне предсказуем — миллионы человек массово ушли из WhatsApp. Прежде всего, в Telegram и Signal.
Павел Дуров назвал это «крупнейшей цифровой миграцией в истории»: всего за трое суток у Telegram появилось 25 млн новых пользователей, абсолютный рекорд. Илон Маск в твиттере прокомментировал события просто: «Используйте Signal», — написал он. То же самое советует Эдвард Сноуден. Мессенджер Signal для многих стал настоящим открытием.
После изменения политики WhatsApp популярность Signal взлетела на 4200%: если говорить по-русски, это значит в 43 раза, а Telegram вышел на второе место по количеству скачиваний в США. В итоге они примерно сравнялись по количеству загрузок: 7,5 млн и 9 млн за первую неделю после той новости от WhatsApp.
Скачок количества установок Signal в Google Play
С точки зрения шифрования, приватности и защиты информации Signal предпочтительнее, чем Telegram. Криптографические протоколы Telegram в старой версии не выдерживают никакой критики, они просто ужасны, а в новой версии протокол до сих пор не прошёл независимый аудит. С другой стороны, у Signal всё в порядке: надёжность и безопасность подтверждены независимыми экспертами, код открыт и доступен для проверки всеми желающими.
Таким образом, если пользователи бегут от драконовской политики WhatsApp в области приватности, то логично переходить на более защищённый и приватный мессенджер, то есть на Signal. Это лучшее, что у нас есть.
Граффити, сделанное во время массовых протестов в Калифорнии в 2017 году. Фото: Elijah Nouvelage, Getty Images
Как клиенты заддосили собственный сервер
К сожалению, инфраструктура Signal не справилась с наплывом миллионов новых людей. Причём случилось довольно забавно: клиентское программное обеспечение Signal фактически заддосило собственный сервер.
В коде клиента под Android была ошибка по обработке таймаута. С наплывом десятков миллионов новых пользователей серверы начали иногда возвращать ошибку HTTP 508, но клиент не обрабатывал эту ошибку должным образом. Он снова и снова повторял попытки. Хотя в алгоритме и реализована экспоненциальная выдержка, но не был предусмотрен вариант, когда сервер специально отказывает клиенту в соединении. При этом экспоненциальная выдержка работала без джиттера (элемента случайности).
В итоге получилось так, что все начинали стучаться к серверу одновременно — и не было никакой возможности отключить эти «волны» DDoS'а.
Примечание. Строго говоря, здесь не совсем DDoS. В компьютерной науке для данной проблемы существует специальный термин thundering herd problem. Это можно перевести как «проблема грохочущего стада» — имеется в виду стадо, которое начинает орать одновременно.
Хотя код клиента для Android открыт и опубликован на GitHub, никто так и не заметил эту ошибку во время предыдущих аудитов и проверок. Вероятно, аудиторы сконцентрировали внимание на правильной реализации криптографии, а не на всяких интерфейсах, которые не угрожают безопасности. Хотя нужно заметить, что некорректную реализацию повторения попыток коннекта часто допускают начинающие программисты.
16 января для исправления ситуации в код Android-клиента внесли следующие изменения. «Флаги функций» означают, что соответствующий параметр в клиентской программе может быть установлен сервером:
- Флаг функции для максимального таймаута повторной попытки
- Джиттер для экспоненциальной выдержки
int boundedAttempt = Math.min(nextAttempt, 30); long exponentialBackoff = (long) Math.pow(2, boundedAttempt) * 1000; long actualBackoff = Math.min(exponentialBackoff, maxBackoff);
- Обработка ServerRejectedException (HTTP 508)
- Флаг функции для автоматического сброса сеанса
Теперь клиенты Signal не должны ддосить свой сервер.
Для таких ситуаций Mozilla предлагает принять новый код ошибки HTTP 429 Too Many Requests, чтобы определить ситуацию более ясно. Он сопровождается заголовком Retry-After
с указанием предпочтительного таймаута. Например:
HTTP/1.1 429 Too Many Requests
Content-Type: text/html
Retry-After: 3600
Возможно, такой код ошибки будет проще обрабатывать на клиенте.
Стабильность инфраструктуры Signal не налажена до сих пор, так что серверы периодически уходят в даун. Ничего не поделаешь, ведь Signal Foundation — это некоммерческая организация, которая существует на пожертвования. В отличие от компаний Telegram FZ LLC и Telegram Messenger Inc., привлекающих десятки миллионов долларов от инвесторов с общей оценкой мессенджера в $30 млрд. Но там пользователей фактически считают товаром. Павел Дуров объявил, что скоро начнёт монетизировать аудиторию, то есть показывать рекламу, зарабатывать на профилировании, продаже данных, таргетировании рекламы и так далее. Единственное, что Дуров пообещал не показывать рекламу в личных чатах.
Signal никогда не сделает ничего подобного. Но поэтому вынужден страдать от недостатка финансирования и связанных с этим технических проблем.
Кстати, мессенджер WhatsApp до покупки компанией Facebook нормально выдерживал более 100 млн пользователей. Но у него были деньги на инфраструктуру.
Централизованная инфраструктура — всегда плохо
Дело не только в недостатке инвестиций. Организацию Signal и ведущего разработчика Мокси Марлинспайка ещё упрекают в выборе не самого корректного технологического стека, который не позволил внезапно масштабироваться в десять раз. Никто не знал, что WhatsApp выкинет такой фокус и произойдёт массовый наплыв пользователей в Signal, это было совершенно неожиданно, но инфраструктура оказалась не готова.
Вообще, Мокси Марлинспайк выступает принципиально против федеративной системы, которая предусматривает сосуществование произвольного количества серверов Signal, принадлежащих третьим лицам. Например, такую модель предусматривает протокол коммуникации XMPP (Jabber), на котором отлично работает служба обмена сообщениями.
Другой пример федеративной системы — электронная почта, которая основана на инфраструктуре из миллиона почтовых серверов от третьих лиц. Кто угодно может поднять собственный почтовый сервер — и он станет частью общей почтовой экосистемы.
Ещё один пример федеративной системы — социальная сеть Mastodon, свободная альтернатива Facebook.
Инстансы Mastodon
Матрица
Сквозное шифрование в любом случае делает невозможным перехват сообщений Signal на сервере, поэтому никто не мешает реализовать федеративную систему. Например, такая система реализована в сети Matrix, которая поддерживает любые виды коммуникаций, в том числе разработаны мосты в Slack, IRC, XMPP, Gitter, Telegram, Discord, WhatsApp, Facebook, Hangouts, Signal и другие.
Нативный клиент для Matrix называется Element, он выпускается в версиях для Windows, macOS, Android, iOS, а также работает в вебе, то есть просто в браузере.
Веб-версия Element
Matrix поддерживает сквозное шифрование, причём фактически на том же протоколе Signal, что и сам Signal. Но это система иного типа. В реальности Matrix — это инфраструктура для сторонних сервисов, некий промежуточный слой, его называют «универсальной коммуникационной шиной». Используя все вышеперечисленные мосты, можно интегрировать все сторонние мессенджеры, приложения для групповой работы и социальные сети в едином интерфейсе Matrix.
В прошлом году удалось значительно увеличить количество мостов для разных сервисов благодаря одному предпринимателю, который предложил вознаграждение $500 за создание мостов Hangouts, Slack, Instagram, Facebook, Twitter, WeChat, Line, Linkedin, Airbnb, Tinder, Gmail и Snapchat.
Как выяснилось сейчас, это были инвестиции с дальним прицелом: в январе 2021 года этот предприниматель запустил новый стартап: платный универсальный мессенджер Beeper с интеграцией 15 мостов из Matrix.
Тем временем разработчики Matrix рассматривают дальнейшую эволюцию проекта. Вместо федеративной системы с определённым количеством серверов они планируют внедрить полноценный P2P. На пиринговой инфраструктуре работает демонстрационная версия мессенджера Riot P2P.
Демо Riot P2P
Несколько лет назад разработчики Matrix даже предлагали Мокси подключить Signal (тогда он назывался TextSecure) к Matrix.
Мокси вежливо отказался, а через несколько месяцев опубликовал пост «Экосистема движется» с объяснением, почему он «больше не верит в возможность разработки конкурентного мессенджера на федеративной основе».
Аргументом Мокси Марлинспайка является то, что децентрализованную систему сложнее корректно спроектировать и запрограммировать. Программиста можно понять по-человечески, но сложность в реализации — это всё-таки недостаточное оправдание.
С каждым новым даунтаймом централизованная инфраструктура выглядит всё менее подходящей для Signal, да и для любого другого веб-сервиса, который ставит главным приоритетом надёжность работы. Даунтайм 16 января 2021 года продолжался почти сутки!
Даунтайм на сутки — уже достаточный аргумент против централизации. Есть и другие. Например, Signal использует инфраструктуру AWS, а это уже определённый риск, как мы знаем по печальной истории изгнания сервиса Parler, который тоже рискнул положиться на AWS.
Хотя исходный код Signal открыт, но тот же серверный код не обновлялся с апреля 2020 года. Это не значит, что там нет багов, а скорее указывает на недостаток внимания.
Если Мокси по-прежнему будет игнорировать федеративные системы, то в будущем есть смысл посмотреть в сторону альтернативных приложений со сквозным шифрованием. Кроме Matrix, например, есть приложение Session. Оно не полагается на центральные серверы и не требует номер телефона для регистрации (это ещё один повод для критики Signal).
Мессенджер Session
Судя по whitepaper, одним из разработчиков Session является Максим Шишмарёв из проекта Loki Project. Эта организация занимается разработкой инструментов приватности и анонимных коммуникаций.
Session и Riot выглядят более стабильно, хотя по функциональности и удобству использования уступают Signal. Но они показывают, в каком направлении нужно двигаться Signal с точки зрения инфраструктуры. Федеративная система без центральных серверов — это отсутствие единой точки отказа, что означает более стабильную и надёжную работу.
По крайней мере, такое приложение не заддосит само себя.
На правах рекламы
Эпичные серверы — это виртуальные серверы для любых задач. Вы можете создать собственный тарифный план, максимальная конфигурация — 128 ядер CPU, 512 ГБ RAM, 4000 ГБ NVMe!
Автор: Mikhail