Практически каждый мессенджер начинается с регистрации: телефон или почта. Кажется, что это мелочь, а на самом деле это фундамент всей системы — аккаунт привязан к тому, чем вы не вполне владеете.
Номер телефона вам не принадлежит. Оператор забирает его, если вы перестали платить. Отключённые номера через какое-то время отдают новым абонентам, и на некоторых сервисах новый владелец старого номера может попытаться восстановить чужие аккаунты. Отдельная история — SIM swap: мошенник убеждает или подкупает сотрудника оператора, и ваш номер переезжает на чужую SIM. Кто держит номер — тот держит путь восстановления ко всему, что на нём построено.
Есть и менее заметная проблема — метаданные. Даже в системах со сквозным шифрованием сам номер телефона остаётся постоянным идентификатором: он связывает вас с кругом общения и тянется за вами по всем сервисам, где вы его указывали. Содержание переписки можно защитить, а карта «кто с кем общается» остаётся открытой.
Мы не хотели, чтобы MurMur повторял эту схему, поэтому убрали регистрацию целиком.
MurMur ставится как PWA на iPhone и Android, минуя App Store и Google Play. При первом открытии никакой анкеты нет: ни телефона, ни почты. Приложение просто генерирует криптографическую пару ключей. Публичная часть — ваш npub, по нему вас и находят. Оператор связи в этой схеме не участвует.
Что это меняет на практике:
Сообщения и звонки зашифрованы сквозным шифрованием, push-уведомления работают как в обычном мессенджере. Разница в том, что серверная часть изначально проектировалась под допущение «мы не можем прочитать ни байта из того, что пересылаем».
Серверная часть MurMur — релей, написанный на Rust. Если объяснять на пальцах, это почта с запечатанными конвертами: он принимает от вас зашифрованный блок, кладёт его в очередь получателя, хранит ограниченное время, если тот офлайн, а потом удаляет.
Главное здесь — не обещание, а конструкция. Релей не получает открытый текст и не имеет вашего приватного ключа. Шифрование происходит в браузере отправителя до того, как данные уходят с устройства; расшифровка — в браузере получателя. Код на Rust занимается маршрутизацией, хранением шифротекста и сроками жизни сообщений — задачами, для которых понимание содержания не нужно. Rust мы выбрали в том числе из-за гарантий безопасности памяти: целый класс ошибок, которые обычно оборачиваются инцидентами, там просто не компилируется.
При этом релей всё же кое-что видит: сам факт зашифрованного трафика, его объём, примерное время и идентификаторы очередей. Мы не будем утверждать, что метаданные исчезают полностью — это не даёт ни один сетевой сервис. Но хранить нечего: на сервере нет ничего читаемого.
У этой модели есть цена, и мы скажем о ней прямо, а не спрячем в сноску. Никакого восстановления по SMS нет. Никакого сброса пароля нет. Аккаунт — это и есть ключ; потеряли ключ — аккаунта больше нет, и никто, включая нас, не поможет его вернуть. Это та же защита от SIM swap, только с обратной стороны: если бы восстановление шло через номер телефона, номер снова стал бы самым слабым местом.
Поэтому относитесь к ключу как к ключу от квартиры, а не как к паролю, который всегда можно сбросить. Сделайте резервную копию там, где контролируете доступ вы, а не кто-то ещё.
MurMur — молодой проект маленькой команды с маленькой аудиторией. Независимого аудита безопасности не было. Исходный код открыт на GitHub, его можно читать и проверять, но открытый код без аудита — это не доказательство безопасности, а приглашение её проверить. Из подхода с PWA следуют и практические ограничения: приложение зависит от браузера, а браузерная криптография надёжна ровно настолько, насколько надёжен сам браузер. Если вам нужен мессенджер с многолетними аудитами и большой командой безопасности — честно, возьмите один из известных. Мы считаем, что место для другой модели есть, и предпочитаем говорить, где на этом пути находимся.
Попробовать MurMur на murmurchat.org — номер телефона не понадобится. Собственно, ради этого всё и начиналось.