Прочитати можете лише ви та ті, кому ви пишете

Cryptico — анонімний месенджер для вебу, Android та iPhone: ні номера телефону, ні email, ні справжнього імені. Кожне повідомлення зашифроване наскрізно, а код сервера не вміє його розібрати, навіть якби ми цього захотіли.

Без реєстрації й без номера телефону — відкривається просто в браузері.

Веб-клієнт у широкому вікні браузера: список чатів ліворуч, відкрите листування групи праворуч.

Акаунт — це фраза, а не людина

Реєстрація не питає нічого. Cryptico створює випадкову особу й фразу відновлення з дванадцяти слів — ця фраза і є акаунтом, з неї виводяться геть усі ваші ключі. Немає номера, який треба підтвердити, немає адреси, на яку прийде лист, немає профілю, що звʼязує все це з вами. Імʼя користувача — на ваш вибір: візьміть, якщо хочете, щоб вас знаходили, або не беріть.

01

Чотири речі, за які ми справді відповідаємо

  • 01

    Сервер не може прочитати ваші повідомлення

    Це властивість збірки, а не обіцянка. Серверний бінарник не компілює саме визначення тіла повідомлення, тож у ньому немає шляху коду, який міг би його розібрати. Перевірка в нашому конвеєрі валить білд, щойно це перестане бути правдою.

    check-proto-content-boundary.mjs
  • 02

    Жодних реальних ідентифікаторів. Ніколи

    Ні номерів телефону, ні поштових адрес, ні справжніх імен — ні в застосунку, ні в базі, ні в протоколі. Автоматична перевірка відхиляє будь-яку зміну, що додає таке поле. Поле телефону колись потрапило в чернетку картки контакту; його прибрали, а його місце закрили назавжди.

    check-forbidden-columns.mjs
  • 03

    Signal Protocol і пост-квантове узгодження ключів

    PQXDH для рукостискання, Double Ratchet для повідомлень, Sender Keys для груп. Кожна сесія додає до класичного обміну пост-квантовий Kyber-1024 — не як опцію, а в кожному рукостисканні, — тож записаний сьогодні трафік не стане читабельним для майбутнього квантового компʼютера. Далі працює звичайна криптографія, саме тому ми кажемо «пост-квантове узгодження ключів», а не приписуємо це всьому ланцюжку.

    libsignal · PQXDH · Kyber-1024
  • 04

    Дзвінки, яких не чують наші ж сервери

    Дзвінки один-на-один ідуть напряму між пристроями — сервер не торкається медіа взагалі. Групові проходять через наш медіасервер, і кожен кадр шифрується ще до того, як туди потрапить, ключем, якого той сервер ніколи не отримує. Перевірка збірки не пускає ключі медіа в серверний код у принципі.

    check-call-media-key-boundary.mjs
02

Що ним справді можна робити

Це месенджер, а не демонстрація. Усе з цього переліку є в продукті — на кожній платформі, де воно має сенс.

  • Чати, які поводяться як чати

    Текст зі згадками, відповіді цитатою, редагування, видалення в усіх, реакції, пересилання, вибір кількох повідомлень і особисті закладки. Квитанції про доставку й прочитання, «пише…», чернетки, пошук усередині чату й по всіх одразу. Опитування, чек-листи, точка на карті й картка контакту — коли самого тексту замало.

  • Групи до 128 учасників

    Створити групу, додавати й видаляти людей, запрошувати посиланням із терміном дії та лімітом використань, згадати одного або всіх. Сервер розсилає повідомлення й ніколи не дізнається ні назви групи, ні її опису.

  • Файли, фото й голосові

    Вісім видів вкладень до 100 МіБ кожне — фото, відео, голосове, відео-кружок, файл, GIF, стикер, аудіо — з альбомами й спойлерами. Кожен файл запирається просто на вашому пристрої власним одноразовим ключем і перевіряється на підміну ще до розшифрування.

  • Міні-застосунки всередині месенджера

    Каталог, встановлення в один дотик і запуск в ізольованому середовищі, плюс консоль розробника й анонімна скарга. Застосунок, чия контрольна сума не збіглася з маніфестом, не запуститься взагалі.

  • Блокування, яке справді блокує

    Повідомлення заблокованого не доходить до вас у особистому листуванні — і він ніколи не дізнається, що не дійшло. Блокування триває 180 днів, і кожна спроба написати його продовжує.

  • До десяти пристроїв на один акаунт

    Привʼязати новий пристрій фразою, побачити весь список, відвʼязати будь-який — навіть тоді, коли робочої сесії у вас уже не лишилось. Контакти, папки, список чатів, блокування й налаштування переїжджають зашифрованими. Архів повідомлень здебільшого ні — про це у розділі «чого ми не обіцяємо».

03

Дзвінки один-на-один і групові

Аудіо та відео, передня й задня камера, до восьми відеопотоків одночасно, піднята рука, демонстрація екрана, індикатори мікрофона й камери на кожній плитці. Медіа за замовчуванням іде через ретранслятор, тож співрозмовник не бачить вашої адреси.

Груповий дзвінок із чотирма учасниками; в одного піднята рука.Груповий дзвінок на телефоні.
04

Папки, закріплення й тихі чати

Папки з правилами фільтрації, закріплені чати, вимкнені сповіщення, перегляд спільних медіа й банер стану звʼязку, який каже правду про ваше зʼєднання. Згадка пробиває вимкнені сповіщення — і це зроблено навмисно.

Редактор папки з правилами фільтрації, які визначають, що в неї потрапляє.Список чатів на телефоні та екран створення нової групи.
05

Як це влаштовано насправді

Коротко — для тих, хто хоче перевірити, а не повірити.

Налаштування приватності: квитанції про прочитання, PIN і автоблокування.Приватність на телефоні: розблокування біометрією, автоблокування й число безпеки для звірки співрозмовника.
Рукостискання
PQXDH: Curve25519 плюс Kyber-1024 — у кожній без винятку сесії, тож узгодження ключів стійке до квантової атаки з першого ж повідомлення.
Повідомлення
Double Ratchet: кожне повідомлення просуває ключі вперед, тож здобутий пізніше ключ не відкриває того, що було раніше.
Групи
Sender Keys, до 128 учасників. Сервер знає склад групи, бо мусить розсилати повідомлення; назви групи він не знає.
Групові дзвінки
Кадри шифруються ще до того, як дійдуть до нашого медіасервера. Ключ створює пристрій, який почав дзвінок, роздає його сам месенджер, і він ротується щоразу, коли хтось заходить або виходить.
Файли та фото
AES-256-GCM зі свіжим ключем на кожен файл, який їде всередині зашифрованого конверта, і перевірка SHA-256 ще до розшифрування. Сховище тримає байти, яких не може витлумачити.
На вашому пристрої
Локальна база повідомлень зашифрована на диску — SQLCipher на Android та iPhone, AES-256-GCM у браузері.
Ваша фраза відновлення
Дванадцять слів. Усі ключі акаунта виводяться саме з них: BIP39, далі Argon2id із 64 МіБ памʼяті та трьома проходами на кожну спробу — саме це робить перебір невигідним. На сервері не лишається нічого, чим фразу можна було б відтворити.
Перевірка співрозмовника
60-значне число безпеки на кожну розмову і шестизначний код усередині дзвінка, який один із вас промовляє вголос. Код рахується з даних саме цього зʼєднання, тож щоразу він інший.
Замок застосунку
PIN із чотирьох цифр під Argon2id і AES-256-GCM, пʼять спроб, біометрія там, де вона є, і автоблокування за бездіяльністю. PIN відкриває пристрій, фраза володіє акаунтом.
Налаштування й контакти
Синхронізуються шифротекстом під ключем, похідним від вашої фрази відновлення, — навіть імʼя кожного запису є хешем, а не текстом. Сервер зберігає непрозорі блоби, а не поля.
Бібліотеки
Android та iPhone використовують офіційну бібліотеку Signal. Для браузерів Signal не випускає її збірки взагалі, тому веб-двигун ми збираємо самі з офіційних вихідників Signal, із жорсткою привʼязкою до конкретної версії — один рядок змінено, щоб воно збиралось у нас, і жодного дотику до самої криптографії.
06

Чого ми не обіцяємо

Головна сторінка кожного месенджера розповідає, від чого він захищає. Ця розповідає ще й від чого не захищає — бо саме те, чого ми не можемо виправити, вам і треба знати.

  • Ми бачимо, хто з ким спілкується

    Наскрізне шифрування ховає зміст, а не сам факт спілкування. Щоб доставити повідомлення, сервер мусить знати, кому його віддати й коли. Він також зберігає склад груп — без цього неможлива розсилка. Ми не можемо чесно сказати, що не знаємо, хто з ким пише. Що ми справді можемо сказати: змісту ми не бачимо, і код сервера навіть не вміє його розібрати.

  • Сповіщення зливають Google та Apple час

    Сповіщення на Android доставляються через Firebase Cloud Messaging, на iPhone — сервісом Apple. У пуші немає ні тексту, ні відправника — але перевізник бачить, який пристрій розбудили і о котрій годині, а цього достатньо, щоб за збігами таймінгів відновити, хто з ким спілкується. Анонімність акаунта не поширюється на факт і час комунікації, доки транспортом пробудження є чужий сервіс.

  • Історія за вами майже не переїжджає

    Вхід на новому пристрої повертає особу, профіль, контакти, папки, список чатів, блокування й частину налаштувань — але не архів листування. Співрозмовники надсилають заново лише тонкий його зріз, не глибше тридцяти днів, і це все. Серверної резервної копії історії немає — так задумано.

  • Загубили фразу — допомогти нікому

    Підтримка не впустить вас назад, бо на нашому боці немає чим впускати: ні номера, ні адреси, ні підказки до пароля. Дванадцять слів — це весь акаунт. Така ціна всього іншого на цій сторінці, і нам краще, щоб ви знали її до реєстрації, а не після.

  • Логи ми ведемо — просто не про вас

    Ми ведемо технічні логи роботи сервісу — без змісту повідомлень, без шифротексту, без ключів і без фраз відновлення. «Жодних логів» було б неправдою; «жодного змісту в логах» — правда, і саме її ми беремо на себе.

07

Де це працює

Листування групи, відкрите на телефоні.Груповий дзвінок на телефоні.Екран запрошення на телефоні: QR-код і код запрошення, який можна передати.
08

Питання, які ставлять насправді

Скільки це коштує?

Нічого. Немає ні платного тарифу, ні реклами, ні допродажів — обмеження є лише технічні, як-от 100 МіБ на файл і тридцять днів його зберігання. Якщо колись зʼявиться платний тариф, ми скажемо про це до того, а не після.

Чи публічний код?

Поки ні. Його буде відкрито, коли розробка вляжеться. До того дня ми не називаємо себе open source — перевірити це твердження ви не можете, а просити вірити на слово ми не будемо. Коли репозиторій стане публічним, його адреса буде саме тут.

Що буде, якщо я загублю фразу відновлення?

Акаунт зникає. Немає ні посилання на скидання, ні способу для підтримки впустити вас назад — шлях відновлення, який контролюємо ми, був би входом і для когось іншого.

Хто може мені написати?

Потрібне ваше імʼя користувача, запрошення, яке ви самі дали, або ваш QR-код. Якщо ви взагалі не хочете, щоб вас знаходили, — не беріть імені користувача. Будь-кого можна заблокувати, і заблокований до вас більше не достукається.

Чи можу я переконатися, що говорю саме з тією людиною?

Так, двома способами. У кожної розмови є 60-значне число безпеки, яке обидві сторони звіряють один раз, а під час дзвінка на обох екранах світиться той самий шестизначний код — один промовляє, другий звіряє. У наступному дзвінку код буде інший.

Чи можна користуватися з кількох пристроїв?

Так, до десяти. Кожен привʼязується фразою відновлення, будь-який можна відвʼязати зі списку. Контакти, папки, список чатів і налаштування переїжджають зашифрованими; архів листування здебільшого ні.

Ви мене профілюєте або щось продаєте?

Ні реклами, ні продажу даних. На цій сторінці немає жодної аналітики й жодного стороннього скрипта — назовні не йде жоден запит.

Скажіть, коли буде готово

Один лист — того дня, коли буде що встановлювати. Ні розсилки, ні ланцюжка листів, ні стороннього поштового сервісу: адреса лишається в нашій власній базі й нікуди більше не йде.

Підтвердження ми не надсилаємо, тож помилка в адресі означає тишу. Перевірте адресу перед надсиланням.