PrivChat
Общение, в котором посередине ничего нет

Ваши сообщения идут с вашего телефона на телефон собеседника. Больше никуда.

PrivChat — это одноранговый зашифрованный мессенджер для Android. Нет аккаунта, который нужно создавать, нет номера телефона, который нужно давать, и нет компании, хранящей ваши разговоры, — включая нас. Два телефона разговаривают друг с другом напрямую, через сеть Tor.

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

Как путешествует сообщение

Ваш телефон узел узел узел узел Его телефон здесь шифруется здесь открывается сеть Tor — здесь никто не может это прочитать, и ни один узел не знает оба конца сразу

Когда вы пишете сообщение, ваш телефон шифрует его и передаёт сети Tor, которая проводит его через цепочку узлов, поддерживаемых независимыми добровольцами по всему миру. Каждый узел знает только предыдущий и следующий шаг. Первый узел знает, что вы что-то отправляете, но не кому; последний знает, куда это идёт, но не кто отправил. Никто по пути не может это прочитать, потому что ключ существует только на двух телефонах.

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

Нет ни входящего ящика, ни очереди, ни облака. Если собеседник не в сети, сообщение остаётся на вашем телефоне и пробует снова позже. Ничто никогда не паркуется на машине, принадлежащей кому-то другому.

Что его защищает

Сообщение проходит через несколько слоёв, каждый из которых решает свою задачу.

Новый ключ для каждого отдельного сообщения

Ключи не используются повторно. Каждое сообщение шифруется своим собственным ключом, выведенным заново и тут же выброшенным, а цепочка движется вперёд с каждым сообщением в обе стороны. Если бы какой-то ключ когда-нибудь был скомпрометирован, он открыл бы одно сообщение — а не разговор. И как только два телефона снова обмениваются сообщениями, цепочка сама себя восстанавливает: даже злоумышленник, который каким-то образом завладел текущим состоянием, снова оказывается заперт снаружи.

Пакеты не сообщают, кто говорит

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

Каждое сообщение одного размера, и приложение говорит, когда молчите вы

Ответ из одной буквы и длинный абзац дают пакеты одинакового размера, так что длина ничего не выдаёт. Вдобавок приложение отправляет пакеты-приманки через случайные промежутки, неотличимые от настоящих. И вот что здесь главное: наблюдатель, следящий за вашим соединением, не может определить, ведёте ли вы разговор вообще.

Почему оно будет безопасно и через двадцать лет

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

Согласование ключей PrivChat сочетает классический алгоритм (X25519) с ML-KEM-768 — постквантовым алгоритмом, стандартизированным NIST в 2024 году. Два секрета смешиваются вместе, так что злоумышленнику нужно взломать оба — а этот общий секрет засевает весь разговор, в обе стороны, на всё время его существования.

Это важнее всего как раз для тех, кому такое приложение нужно: то, что вы говорите сегодня, всё ещё стоит защищать через пятнадцать лет.

На вашем телефоне

Сообщения, контакты, вложения и сами ключи — всё зашифровано в состоянии покоя ключом, который хранится в хранилище ключей Android и привязан к оборудованию устройства. Вы можете добавить PIN-код, и тогда ключу нужны обе половины — ваш PIN-код и секрет устройства, — так что даже сам телефон не может открыть собственное хранилище без вас.

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

Что под капотом

Архитектура одноранговая, и именно эта часть решает, правда ли всё остальное на этой странице. Каждый телефон запускает свой собственный Tor onion-сервис и говорит напрямую с другим. Нет ни нашего узла, ни очереди сообщений, ни базы аккаунтов — так что нет и места, где могла бы накапливаться запись о том, кто с кем говорит, даже для того, кто пришёл бы за ней. Убрать сервер — не функция, привинченная к шифрованию. Это то, что делает шифрование стоящим.

Поверх этого работает тот же набор стандартов, на котором сошлись правительства и индустрия. Здесь нет ничего самодельного, и каждая часть публично специфицирована — ссылки ведут на сами спецификации, а не на нас.

НазначениеЧто используется
АрхитектураОдноранговая: каждый телефон — это свой Tor v3 onion-сервис, без сервера посередине
Согласование ключейPQXDHX25519 в сочетании с ML-KEM-768 (FIPS 203)
Обновление ключейDouble Ratchet, с зашифрованными заголовками
Шифрование сообщенийChaCha20-Poly1305
ПодписиEd25519
Вывод ключейHKDF-SHA256
Вывод из PIN-кодаArgon2id
Локальная база данныхSQLCipher (AES-256)
ТранспортTor, через реализацию arti

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

Пожертвования

PrivChat бесплатен, без рекламы и не собирает ничего на продажу. Если вы хотите его поддержать, вот единственные два адреса. Сверьте отпечаток, прежде чем что-либо отправлять.

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

Приложение показывает короткий отпечаток рядом с адресом. Если он совпадает с тем, что на этой странице, значит, адрес в вашей копии приложения настоящий. Это тот же жест, о котором приложение уже просит вас, чтобы проверить контакт.

Monero (XMR)

45hRduLUQD5Ek4qGgHTuWAZnncwroMET1WsLUDC9AF6DNSt5qMP1Fk7WUsN4EwzJdA1ypfL7TtJQQ8uqutAJWwJy5jzp8Pa

Отпечаток: 1D63 68D5 7653 1887

Bitcoin — Silent Payments (BIP-352)

sp1qqf2jvtz0k7rsy7f0cka9ejz6e4lmakz6v9zgae02ks0qpck3a6dxzqn73fp9gj6y632q8th2nfv2lv7rua49s5unzjpau3ahp29ssw689vwu9ksy

Отпечаток: 63BB FA03 F806 BC55

Почему нет обычного адреса Bitcoin

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

Адрес Silent Payments работает иначе: ваш кошелёк выводит свежий адрес назначения, тратить с которого можем только мы, так что ничто в цепочке не связывает пожертвования друг с другом. Нужен кошелёк с поддержкой BIP-352.

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

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

Подписанное заявление: donations.txt
Открытый ключ: privchat-pgp.asc

Отпечаток ключа:
BC8D E53F D8D1 6F63 AD8A 33EA 10EC 8069 37D6 8502

Как проверить: импортируйте ключ, затем выполните gpg --verify donations.txt. Отпечаток ключа, который он покажет, должен совпасть с тем, что выше.

Тот же отпечаток ключа опубликован на нашей странице в Google Play. Это два отдельных места, которыми владеют разные компании: поддельный отпечаток должен был бы появиться в обоих сразу и оставаться согласованным. Если эти два когда-нибудь разойдутся, ничего не отправляйте и напишите нам.

Получить

PrivChat в Google Play

Впервые здесь? Как пользоваться PrivChat проведёт вас через добавление первого контакта, сверку отпечатка и то, что означают состояния сообщений.