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


Аккаунт — это фраза, а не человек
Для регистрации не нужно ничего. Cryptico создаёт случайную личность и фразу восстановления из двенадцати слов — и эта фраза и есть аккаунт: из неё выводится каждый ваш ключ. Нечего подтверждать, нечего верифицировать, нет профиля, который связал бы всё это с вами. Имя пользователя — по желанию: возьмите его, если хотите, чтобы вас находили, или обойдитесь без него.
Четыре вещи, за которые мы правда можем отвечать
- 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
Что здесь действительно можно делать
Мессенджер, а не демонстрация. Всё из этого списка есть в продукте — на каждой платформе, где оно имеет смысл.
Чаты, которые ведут себя как чаты
Текст с упоминаниями, ответы, правки, удаление у всех, реакции, пересылка, множественный выбор и личные закладки. Отметки о доставке и прочтении, индикатор набора, черновики, поиск внутри чата и по всем сразу. Опросы, чек-листы, точка на карте и карточка контакта, когда обычного текста мало.
Группы до 128 участников
Создайте группу, добавляйте и удаляйте людей, приглашайте ссылкой со сроком действия и лимитом использований, упоминайте одного человека или всех сразу. Сервер разносит сообщения и никогда не узнаёт ни название группы, ни описание, ни то, в честь кого вы её назвали.
Файлы, фото и голос
Восемь видов вложений до 100 МиБ каждое — фото, видео, голосовое сообщение, видеосообщение, файл, GIF, стикер, аудио — с альбомами и скрытым содержимым. Каждый файл запирается на вашем устройстве собственным одноразовым ключом и проверяется на подмену перед открытием.
Мини-приложения внутри мессенджера
Каталог, установка в одно касание и изолированная среда запуска, плюс консоль разработчика и кнопка анонимной жалобы. Приложение, контрольная сумма которого не совпадает с манифестом, просто не запустится.
Блокировка, которая действительно блокирует
Сообщение заблокированного отправителя не дойдёт до вас в личном чате, и он не узнает, что оно не дошло. Блокировка действует 180 дней, и каждая попытка написать продлевает её.
До десяти устройств на один аккаунт
Подключите новое устройство фразой, смотрите весь список, отключайте любое из них — в том числе тогда, когда рабочей сессии уже не осталось. Контакты, папки, список чатов, блокировки и настройки переезжают в зашифрованном виде. Архив сообщений — по большей части нет; об этом — в разделе «чего мы не обещаем».
Звонки — один на один и групповые
Аудио и видео, фронтальная и основная камера, до восьми видеоплиток одновременно, поднятая рука, демонстрация экрана, индикаторы микрофона и камеры на каждой плитке. Медиапоток по умолчанию идёт через ретранслятор, поэтому собеседник не видит вашего адреса.



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



Как это устроено на самом деле
Коротко — для тех, кто предпочитает проверить, а не поверить.



- Рукопожатие
- 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, закреплённых на точной версии, — одна строка изменена, чтобы оно собралось здесь, и ничего не тронуто в криптографии.
Чего мы не обещаем
Главная страница любого мессенджера рассказывает, что он защищает. Эта рассказывает и о том, чего он не защищает, — потому что как раз то, что мы не в силах починить, вам важнее всего знать.

Мы видим, кто с кем общается
Сквозное шифрование прячет то, что вы говорите, а не сам факт, что вы это сказали. Чтобы доставить сообщение, сервер обязан знать, кто его получает и когда. Он также хранит состав групп, потому что без этого рассылка невозможна. Мы не можем честно утверждать, что не знаем, кто с кем общается. Мы можем утверждать другое: содержимого мы не видим никогда, а код сервера не способен даже разобрать его.
Push-уведомления выдают тайминг Google и Apple
Уведомления на Android идут через Firebase Cloud Messaging, а на iPhone — через службу Apple. В пуше нет ни текста, ни отправителя, но перевозчик видит, какое устройство разбудили и в какой момент, — а этого достаточно, чтобы по совпадению времени восстановить, кто с кем общается. Анонимность аккаунта не распространяется на сам факт и время общения, пока будильником служит чужой сервис.
История почти не следует за вами
Вход на новом устройстве возвращает вашу личность, профиль, контакты, папки, список чатов, блокировки и часть настроек — но не архив сообщений. Собеседники присылают заново лишь тонкий срез, не глубже тридцати дней, и это всё. Серверной резервной копии вашей истории нет — так задумано.
Потеряете фразу — и помочь не сможет никто
Поддержка не вернёт вас внутрь, потому что на нашей стороне нечем возвращать: ни номера, ни адреса, ни подсказки к паролю. Двенадцать слов — это весь аккаунт. Такова цена всего остального на этой странице, и мы предпочитаем, чтобы вы узнали её до регистрации, а не после.
Логи мы ведём — просто не о вас
Мы ведём служебные операционные логи: без содержимого сообщений, без тел шифротекста, без ключей и без фраз восстановления. Сказать «логов нет вообще» было бы неправдой; «в логах нет содержимого» — правда, и это то, что мы обещаем.
Где это работает




Веб
Открывается в любом браузере, ставить нечего. Все 24 языка интерфейса живут здесь.
Открыть веб-приложениеоткрывается в новой вкладкеiPhone
Нативное приложение: чаты, группы, звонки, голосовые сообщения и мини-приложения.
Установить на iPhoneоткрывается в новой вкладкеAndroid
Нативное приложение с теми же чатами, группами и звонками на вашем телефоне.
Установить на Androidоткрывается в новой вкладке
Вопросы, которые задают на самом деле

Сколько это стоит?
Нисколько. Нет ни платного тарифа, ни рекламы, ни допродаж — ограничения только технические, вроде 100 МиБ на файл и тридцати дней хранения для него. Если платный тариф когда-нибудь появится, мы скажем об этом заранее, а не задним числом.
Код открыт?
Пока нет. Он будет опубликован, когда разработка устоится. До этого дня мы не называем себя проектом с открытым исходным кодом — проверить такое заявление вы не можете, а просить принять его на веру мы не станем. Когда репозиторий станет публичным, его адрес будет прямо здесь.
Что будет, если я потеряю фразу восстановления?
Аккаунт потерян. Нет ни ссылки для сброса, ни способа для поддержки впустить вас обратно — путь восстановления, которым управляли бы мы, был бы входом и для кого-то ещё.
Кто может мне написать?
Нужно ваше имя пользователя, ссылка-приглашение, которую вы дали, или ваш QR-код. Если вы вообще не хотите, чтобы вас находили, не берите имя пользователя. Заблокировать можно любого, и заблокированный отправитель до вас больше не достучится.
Можно ли убедиться, что я говорю с тем самым человеком?
Да, двумя способами. У каждого разговора есть число безопасности из 60 цифр, которое обе стороны могут один раз сверить, а во время звонка на обоих экранах показывается один и тот же код из шести цифр — один читает вслух, другой проверяет. Код звонка каждый раз новый.
Можно пользоваться больше чем на одном устройстве?
Да, до десяти. Каждое подключается фразой восстановления, и любое можно отключить из списка. Контакты, папки, список чатов и настройки переезжают зашифрованными; архив сообщений — по большей части нет.
Вы составляете мой профиль или что-то продаёте?
Ни рекламы, ни продажи данных. На этой странице нет ни аналитики, ни сторонних скриптов вообще — ни один запрос не уходит на чужой сервер.
Сообщите мне, когда будет готово
Одно письмо — в тот день, когда появится что-то, что стоит установить. Ни рассылки, ни цепочки писем, ни сторонней почтовой службы: адрес остаётся в нашей собственной базе и никуда больше не уходит.
Подтверждения мы не присылаем, поэтому опечатка означает тишину. Проверьте адрес перед отправкой.
