iPhone / iPad: Apple не дозволяє запускати локальні HTML-файли. Потрібне посилання:
попроси того, хто надіслав файл, дати адресу https://… і відкрий її в Safari.
Якщо файл уже в «Файлах»: Поділитися → «Скопіювати в Safari» (працює не в усіх версіях iOS).
Компʼютер / Android: відкрий цей файл у Chrome, Safari або Firefox — тоді все запрацює.
Приватна розмова напряму між браузерами — без сервера, без реєстрації.
Оберіть режим нижче: «один на один» — найпростіше й найанонімніше (лише два пристрої,
ніякого реле) — або «колективний дзвінок» — голос/відео й текст для кількох людей одразу
(mesh: кожен з'єднується з кожним напряму, нові учасники «знайомляться» з рештою через вже
встановлені зашифровані канали — сервера немає в жодному режимі). Код запрошення передаєте вручну —
будь-яким каналом (голосом, іншим месенджером). Нічого не зберігається, доки ви самі не натиснете
«Зберегти чат» — після закриття вкладки розмова і ключі шифрування зникають назавжди.
Шифрування: подвійний каскад незалежних алгоритмів на кожен канал — ECDH P-256 → HKDF →
AES-256-GCM, а поверх нього ChaCha20-Poly1305 з окремим ключем (той самий звірений з OpenSSL код,
що й у файловому шифраторі ParanoicCrypt). Кожне повідомлення додатково доповнюється до найближчого
«кошика» розміру (як у Signal), щоб довжина тексту не була видна навіть тому, хто лише перехоплює
зашифровані пакети. У режимі «один на один» чат заблоковано, поки ви не підтвердите код звірки (SAS)
вголос — це ловить підміну з'єднання (MITM) до того, як ви скажете щось важливе.
Чесно про «офлайн»: саме з'єднання й код запрошення не йдуть через жоден сервер. Але щоб
пробити NAT, браузер за замовчуванням запитує у Google/Cloudflare (STUN) ваш публічний IP — це
бачить лише сервер STUN, не зміст розмови. Якщо всі учасники на одному Wi-Fi/точці доступу —
увімкніть нижче «лише локальна мережа», тоді жоден зовнішній сервер не задіюється взагалі.
При прямому P2P-з'єднанні співрозмовник завжди бачить ваш IP — так працює будь-яке пряме
з'єднання, це не рішення застосунку, обійти це неможливо без стороннього сервера-посередника
(а такого тут навмисно немає). Якщо потрібно, щоб IP не бачив ніхто — ні STUN, ні
співрозмовник — увімкніть VPN на своєму пристрої до того, як відкриєте цю сторінку:
тоді всі побачать лише IP VPN, а не ваш. Симетричний NAT (коли пряме з'єднання взагалі
неможливе без ретранслятора) тут поки не підтримано — безкоштовний TURN, який тут був,
перестав приймати підключення.
Чесно про груповий дзвінок: мій мікрофон/камера додаються до з'єднання одразу при вході —
зміну мікрофона/камери під час дзвінка не підтримано (це вимагало б повторного узгодження SDP,
а тут усе узгодження — ручне, копіюванням коду). Вимкнути мікрофон на льоту — можна. При великій
кількості учасників (mesh) кожен пристрій тримає з'єднання з кожним — на слабких телефонах і
повільних мережах на 6+ людей очікуйте гальм.
Чесно про антискрін: надійно ловиться лише клавіша PrintScreen на Windows. Win+Shift+S,
Cmd+Shift+3/4/5 на macOS та скріншоти/запис на телефоні браузер у принципі не бачить — від них
захищає лише розмиття тексту й водяний знак, а не виявлення.
Крок 1. Файл запрошення вже скачався — надішліть його тому, кого запрошуєте (будь-яким каналом, вкладенням), і просто чекайте тут.
Крок 2. Коли отримаєте файл-відповідь — оберіть його тут:
Крок 1 — надішліть цей код:
Крок 2 — вставте код-відповідь:
Крок 1. Оберіть файл запрошення, який вам надіслали:
Крок 2. Файл-відповідь скачався — надішліть його назад тим самим каналом.
Крок 1 — вставте код від того, хто вас запросив:
Крок 2 — надішліть код назад:
👤 з'єднано: —
🌫️ Текст повідомлень розмито — наведіть курсор (ПК) чи натисніть і тримайте (телефон), щоб прочитати одне повідомлення. При PrintScreen (Windows) чат сам ховається й попереджає співрозмовника.
👥 у дзвінку: 1
Код біля кожного імені звіряйте вголос особисто з цією людиною — це і є перевірка, що з'єднання не підмінене.
📂 Відкрити збережений чат
Оберіть файл .pcxchat, який ви самі зберегли кнопкою «Зберегти чат», і введіть той самий пароль.