Космо

Проверяю возможности устройства…

Не могу запуститься

Нужен код доступа

Этот сервер закрыт: пользоваться им могут только те, кому дали код.

Код должен дать тот, кто поднял сервер. Если тебя пригласили ссылкой — код в ней уже есть, и этот экран не появится: просто открой ссылку.

Космо

Сообщения летят прямо между устройствами. Ключи не покидают телефон.

Ключи создаются здесь же, на устройстве, и никуда не отправляются.

Уже есть резервная копия

    Пригласить собеседника

    Покажи этот код или отправь ссылку. Она одноразовая и действует сутки.

    Ключи лежат во фрагменте ссылки — той части, что идёт после решётки. Она не отправляется на сервер, поэтому в его журналы не попадает.

    Добавить по приглашению

    Контакт

    Код безопасности

    Сравните код на обоих устройствах — вслух или лично. Совпал — переписку никто не подменил. Это единственная настоящая проверка: сервер, через который шли ключи, теоретически способен подставить свои.

    Канал по умолчанию

    Состояние

    Настройки

    Личность

    Режим передачи

    Внешний канал

    Спутник и радиомодем работают в обход интернета. Модем по USB — единственный способ отправить сообщение, когда сети нет совсем.

    Ретранслятор

    Адрес сервера. Пусто — тот же, откуда загружено приложение. Пригодится, чтобы установленная PWA подключилась к серверу в локальной сети, где интернета нет.

    Резервная копия

    Единственная защита от потери телефона и от того, что Safari вычистит хранилище. Копия зашифрована парольной фразой.

    Хранилище

    Что работает, а что нет

    Шифрование

    Сообщения шифруются на устройстве (AES-256-GCM), ключи выводятся обменом X25519 или ECDH P-256 и проворачиваются на каждое сообщение. Приватные ключи не покидают телефон.

    Чего нет: провёртки Диффи-Хеллмана (полного Double Ratchet). Если злоумышленник получил состояние сессии, прошлые сообщения он не прочитает, а вот последующие — сможет, пока контакт не создан заново.

    И главное: приложение приходит с сервера. Тот, кто им управляет, может подменить сам код и увести ключи. Это неустранимо для любой браузерной криптографии. Защита работает против сети и против любопытного ретранслятора, но не против взломанного хостинга.

    Прямое соединение

    Между двумя телефонами в мобильных сетях прямой канал поднимается не всегда: операторский NAT ведёт себя как симметричный. Поэтому ретранслятор — основной путь, а прямое соединение подключается, когда получится. Для надёжности нужен свой сервер TURN.

    Bluetooth и Wi-Fi Direct между телефонами из браузера недоступны нигде — и на Android тоже. Web Bluetooth не умеет работать в режиме периферии, поэтому два телефона просто не увидят друг друга. API для Wi-Fi Direct в вебе не существует вовсе.

    Спутник и радио

    Работает по-настоящему — двумя разными способами.

    Модем по USB. Браузер сам говорит с модемом Iridium (RockBLOCK 9602/9603 и подобные) через Web Serial и AT-команды, модем выходит на спутник. Ни интернета, ни сервера при этом не нужно вовсе — это и есть настоящая связь вне зоны покрытия. Кадр 340 байт, сеанс связи от минуты до пяти. Тем же путём работает обычный радиомодем (LoRa, APRS, мост на ESP32) — он дешевле и ближе.

    Шлюз провайдера. Железа не требует, но требует интернета: шлюз — это HTTP-сервис в сети. Запрос идёт через собственный сервер, потому что провайдер не отдаёт CORS-заголовки браузеру, а ключ API не должен лежать в клиентском коде.

    Длинное сообщение режется на кадры и собирается на той стороне. Обрыв на пятом кадре из семи не заставляет слать заново первые четыре, а потерянный кадр получатель запрашивает отдельно. Служебная мелочь — подтверждения, «печатает», отметки о прочтении — через платный канал не ходит никогда.

    Чего всё же нельзя: отправить со смартфона прямо на спутник без отдельного модема — физически невозможно, тут никакой веб-API не поможет. И Web Serial есть только в Chromium (компьютер и Android); в Safari и на iOS его нет, там остаётся шлюз.

    Работа без интернета

    Приложение, добавленное на главный экран, запускается и работает без всякой сети: оболочка и весь код лежат в кэше устройства, переписка и ключи — в локальном хранилище.

    Важное различие: 2G — это тоже интернет. GPRS и EDGE передают данные, просто медленно, и там всё работает штатно — для этого и сделан эконом-режим. А сотовая сеть без данных даёт только голос и SMS.

    Совсем без данных отправить можно так: SMS — хватит одной палки сети; модем Iridium по USB — настоящий спутник; радиомодем по USB — то же самое, но дешевле и ближе. В одной Wi-Fi устройства к тому же соединяются напрямую, даже если у сети нет выхода наружу.

    Про SMS честно: браузер не может отправить её сам — такого API нет ни на Android, ни на iOS, иначе любая вкладка тратила бы деньги со счёта. Приложение откроет штатные сообщения с готовым шифротекстом, «отправить» нажимаешь ты. Принятую SMS нужно скопировать и вставить в настройках. Полуручной канал — но он работает там, где не работает ничего другого.

    Качество связи

    Значения «5G» в веб-API не существует: Network Information API различает только slow-2g, 2g, 3g и 4g — и есть лишь в Chromium, в Safari его нет совсем. Поэтому показывается полоса качества по собственному замеру задержки, а метка от браузера — как подсказка, если она есть.

    iOS

    Фоновой доставки нет. Push доступен с iOS 16.4 и только для приложения, добавленного на главный экран, причём каждое уведомление обязано быть показано. Данные приложения, открытого просто во вкладке, Safari удаляет через 7 дней без использования — вместе с ключом, после чего переписку не расшифровать. Сканера QR в приложении на iOS нет: нужного API в Safari не существует — используй штатную «Камеру» или вставь ссылку.

    Метаданные

    Ретранслятор не видит текст, но видит, кто с кем и когда переписывается и какого размера сообщения. Это цена за доставку офлайн-адресату.