Технологии и устройство проекта
Эта страница — для тех, кому интересно заглянуть «под капот». Понимать её не обязательно, чтобы пользоваться приложением.
Протокол
Уголок построен на Nostr — открытом протоколе для децентрализованных сообщений. Основная идея Nostr простая: у каждого пользователя есть пара ключей (публичный и приватный), сообщения подписываются приватным ключом, а публикуются на один или несколько серверов (их называют relay). Никто не выдаёт аккаунты — личность целиком определяется ключом.
Шифрование
- Личная переписка использует MLS (Messaging Layer Security) — тот же класс протоколов, что лежит в основе шифрования у крупных мессенджеров. Он даёт forward secrecy: даже если ключ утечёт в будущем, старую переписку задним числом прочитать не получится.
- Содержимое каналов шифруется отдельным ключом канала — здесь forward secrecy сознательно не применяется (канал по своей природе — это архив, к которому годами возвращаются, а не разговор, который должен «забываться»).
- Локальная база данных на устройстве тоже зашифрована — ключ шифрования получается из вашего пароля.
- Файлы и вложения шифруются отдельно перед загрузкой на сервер хранения (Blossom) — сервер хранит только шифротекст.
Из чего собрано приложение
- Preact — лёгкий интерфейсный движок (реактивный, но в разы меньше по размеру, чем более известные аналоги).
- Dexie.js — обёртка над встроенной в браузер базой данных (IndexedDB), в которой хранится вся ваша переписка локально.
- Криптографические примитивы — библиотеки семейства @noble (secp256k1, ChaCha20-Poly1305, SHA-256 и другие), реализация MLS — ts-mls.
- Всё приложение собирается в единственный html-файл — так проще разворачивать и обновлять.
Серверная часть
- Relay (сервер сообщений) — используется strfry, зрелая и широко проверенная реализация Nostr-relay.
- Blossom — отдельный протокол и сервер для хранения файлов, привязанный к тем же ключам, что и остальной Nostr.
- Оба компонента может развернуть у себя любой желающий — см. страницу про собственный сервер в настройках профиля.
Открытый исходный код
Код проекта открыт и доступен для изучения любому желающему: github.com/devugolok/ugolok.