
Комментарии 21
пробивают прямое TCP - это как?
Как быть с разными устройствами у одного человека? Когда пир = устройство, на каждое устройство придется делать новую личность
Как хранится история сообщений? Устройство хранит полностью всю историю вместе с медиа файлами?
Как реализуется поиск по сообщениям? В E2EE это сделать можно только построив локальный индекс
Как мигрировать данные между устройствами при смене телефона, например?
1. Мультиустройство Сейчас в MVP 1 устройство = 1 пир. В будущем планируется концепция "Linked Devices" (как в Signal или Session). При привязке по QR-коду основное устройство по защищенному P2P-каналу передает ключи и историю новому. Для собеседников ты остаешься одним контактом, но сообщения отправляются веером (fan-out) на все твои привязанные пиры.
2. Хранение истории и медиа Да, всё хранится исключительно локально на устройстве (БД зашифрована через SQLCipher, медиа — в защищенной директории). Сервера, хранящего терабайты данных, нет физически. Чтобы телефон не забивался, планируется автоочистка старых медиа, как в WhatsApp.
3. Поиск по сообщениям Всё верно, серверного поиска быть не может. Так как расшифрованный текст уже лежит в локальной SQLCipher на устройстве, поиск работает мгновенно через обычные SQL-запросы (FTS) прямо по локальной базе без запросов в сеть.
4. Миграция данных Пока при смене телефона генерируется новый PeerID. Для бесшовной миграции нужен механизм защищенного бэкапа: либо локальный экспорт зашифрованного архива (база + ключи), который юзер сам перекидывает на новый девайс, либо зашифрованный мастер-паролем слепой бэкап в iCloud/Google Drive. На новом устройстве архив разворачивается с сохранением старого PeerID и истории.
Если предполагается, что можно развернуть свой сервер и будет федерация, то удобнее историю, пусть даже и в шифрованном виде, хранить на своём локальном сервере.
Иметь все копии на всех устройствах - это неудобно, особенно когда речь идёт о медиафайлах. А когда человек обнаружит, что "оптимизация" места удаляет старые файлы, то он как минимум расстроится.
Обычные люди ценят удобство больше чем потенциальную 100% безопасность. А наличие своего сервера обеспечивает достаточную безопасность от внешнего окружения т.к. сервер можно поднять даже дома, куда есть физический доступ.
Я в принципе открыт к предложениям по реализации, если мессенджер куда то дойдет и я продолжу им заниматься то с радостью реализую если будет потребность)
Помимо своего сервера планируется еще полный p2p режим, для самых переживающих за безопастность)
Такое уже есть в Jami, Briar, Berty, Bitchat. Чистый P2P бесполезен для большинства людей, потому что он не приспособлен для реальной жизни. На мобилках его вообще нереально использовать. Без STUN серверов они становятся слепыми, а TURN - это та самая централизация, потому что левый трафик через TURN обычно никто не пускает, поэтому нужен свой TURN с аутентификацией того или иного вида.
Тотальная безопасность обычно несовместима с удобством использования если пробовать совместить всё то либо получится неудобно, либо небезопасно, либо всё сразу. И, скорее всего, из-за этого ни тем, ни другим не будет интересно. А как следствие, будет не интересно и вам потому что нет дофамина от кучи пользователей которым нравится результат вашего труда.
Open-source — клиентский пакет (Go + Dart)
А сервер?
Почему не gomobile вместо CGO?
Потратил пару дней на конфигурирование gomobile, не получилось, плюс до этого был опыт с FFI, удалось все настроить и завести быстро
А зачем? Для gomobile всё равно придётся писать обвязку поверх MethodChannel. А gomobile - это по сути враппер над JNI, что само по себе враппер для нативных API
Здесь же прям сразу FFI. Те же яйца, только проще.
В Google Play неинтересно. apk бы...
Кстати, по поводу Push. Очень бы хотелось иметь UnifiedPush, чтобы не зависет от вендоров.
Просто поделюсь, потому что близка эта тема
7 месяцев делал ugolok.tech
И сейчас в принципе всё работает. Пользователь скачать index.html и может общаться через сигнальные функции и федерацию.
Потом дошло что это плохой подход.
Сейчас переделываю.
Автору статьи удачи!
А когда планируется на android,очень хотелось бы попробовать.
Приватная Cвязь на Go и Flutter