Как устроен Solmu

Коротко и по фактам: из чего состоит Solmu, как шифруется переписка и звонки, как работает вход по паролю и что видит сервер.

Чем Solmu не является

Узел

Узел — это набор контейнеров Docker на VPS: сервер аккаунтов и доставки (Rust), база PostgreSQL, медиасервер звонков, TURN и HTTPS-шлюз. Ставится одной командой (install.sh), каждый день делает резервную копию. Узел хранит аккаунты, доставляет зашифрованные сообщения и держит зашифрованные файлы, пока их не скачают получатели.

Связь между узлами (федерация) — в работе: у каждого узла уже есть ключ подписи Ed25519, опубликованный в /.well-known/solmu/server.

Шифрование переписки — MLS

Звонки — SFrame

Голос и видео идут через медиасервер узла (до 25 человек в комнате), но шифруются на устройствах SFrame: у каждой дорожки свой ключ, выведенный из текущего ключа группы MLS. Медиасервер пересылает кадры, не имея ключей. Владелец канала может создать канал «без шифрования звонков» — это видно в его настройках.

Вход по паролю — OPRF + Argon2id

Уведомления

Уведомление — пустой сигнал «проснись» без текста и без имени отправителя (web push или UnifiedPush/ntfy на Android, сервер ntfy можно держать у себя). Устройство само забирает и расшифровывает новое. Свёрнутое приложение без звонка не держит соединений и почти не тратит батарею.

Что видит узел

Содержимое — нет. Видит то же, что любой сервер переписки: имена аккаунтов, кто в каких разговорах, когда и какого размера сообщения, IP-адреса подключений. Подробно — «Что узел хранит о вас».

Приложения и код

Браузер (WebAssembly), Android, Windows, Linux — общий код на Rust (шифрование, протокол). Лицензия — AGPL-3.0.