Уголок Войти в Уголок

Технологии и устройство проекта

Эта страница — для тех, кому интересно заглянуть «под капот». Понимать её не обязательно, чтобы пользоваться приложением.

Протокол

Уголок построен на 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.