Проверяю возможности устройства…
Не могу запуститься
Нужен код доступа
Этот сервер закрыт: пользоваться им могут только те, кому дали код.
Код должен дать тот, кто поднял сервер. Если тебя пригласили ссылкой — код в ней уже есть, и этот экран не появится: просто открой ссылку.
Космо
Сообщения летят прямо между устройствами. Ключи не покидают телефон.
Ключи создаются здесь же, на устройстве, и никуда не отправляются.
Уже есть резервная копия
Пока никого нет на связи.
Пригласить собеседника
Покажи этот код или отправь ссылку. Она одноразовая и действует сутки.
Ключи лежат во фрагменте ссылки — той части, что идёт после решётки. Она не отправляется на сервер, поэтому в его журналы не попадает.
Добавить по приглашению
Контакт
Код безопасности
Сравните код на обоих устройствах — вслух или лично. Совпал — переписку никто не подменил. Это единственная настоящая проверка: сервер, через который шли ключи, теоретически способен подставить свои.
Канал по умолчанию
Состояние
Настройки
Личность
Режим передачи
Внешний канал
Спутник и радиомодем работают в обход интернета. Модем по USB — единственный способ отправить сообщение, когда сети нет совсем.
Браузер не может послать SMS сам — такого API нет ни на Android, ни на iOS. Приложение откроет сообщения с готовым текстом, «отправить» нажмёшь вручную. Принятую SMS скопируй и вставь ниже.
Номера контактов
Ретранслятор
Адрес сервера. Пусто — тот же, откуда загружено приложение. Пригодится, чтобы установленная 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 не существует — используй штатную «Камеру» или вставь ссылку.
Метаданные
Ретранслятор не видит текст, но видит, кто с кем и когда переписывается и какого размера сообщения. Это цена за доставку офлайн-адресату.