Skip to content

Код принуждения

Второй пароль, опустошающий аккаунт

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

Шифрование отвечает на вопрос «смогут ли это прочитать?». Оно не отвечает на вопрос «что будет, когда над вами стоят и требуют пароль?». Код принуждения — ответ на второй вопрос, и ответ узкий. Прочтите, чего он не делает, прежде чем на него полагаться.

Что происходит, когда вы его вводите

Экран блокировки принимает оба кода. Ввод настоящего разблокирует приложение. Ввод кода принуждения запускает стирание и показывает экран приветствия — ровно такой же, какой показала бы только что установленная программа: тот же экран, те же формулировки, без сообщений, без задержки, без следа аккаунта, который был здесь секунду назад.

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

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

Почему два кода неотличимы

Код принуждения бесполезен, если приложение ведёт себя с ним иначе. Это обеспечивают две вещи.

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

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

Сменить обычный пароль на код принуждения тоже нельзя. Проверка сначала сверяет настоящий пароль, поэтому совпадение разрешилось бы как «разблокировать», а код принуждения тихо перестал бы работать. Такая смена отклоняется.

Чего он не делает

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

Он не стирает телефон или компьютер. Уходят только данные самого PrivaMesh. Фотографии, другие мессенджеры и всё прочее остаются нетронутыми.

Он никого не оповещает. Нет ни тихой тревоги, ни сообщения контакту, ни сервера, которому можно было бы сообщить. Стирание — всё действие целиком.

Он не показывает подставной аккаунт. Некоторые инструменты вместо этого открывают второй, безобидный профиль. PrivaMesh опустошает настоящий и показывает приложение при первом запуске. Что из этого безопаснее — зависит от того, кто спрашивает и что он уже знает; наше обещание проще, и его мы можем сдержать.

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

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

Перебор ограничен для обоих кодов одинаково

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

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

Где это работает сегодня

Windows

Есть, начиная с 1.0.0

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

Android

Есть, начиная с 0.1

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

iPhone

В исходниках есть, в App Store — ещё нет

Код написан, покрыт тестами и открыт, но текущая сборка в App Store — 1.0 от 7 августа 2026, и она вышла раньше. Функция появится в следующем релизе. До тех пор код принуждения работает только на Windows и Android. Если он нужен вам прямо сейчас, полагайтесь на эти клиенты, а не на iPhone.

На каждом клиенте, где функция есть, поведение одинаковое: те же два кода, то же правило равной длины, то же сравнение за постоянное время, та же пауза при переборе. Различия только в том, что именно приходится удалять на каждой системе, потому что база Windows, база Android и хранилище ключей iOS ломаются по-разному, если удалять их небрежно.

Все три реализации открыты, и их можно прочитать прежде, чем доверять: iOS, Windows и Android.

Frequently asked questions

Что такое код принуждения?

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

Можно ли отличить один код от другого?

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

Удалит ли он мои сообщения из блокчейна?

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

Он стирает весь телефон?

Нет. Удаляются только данные PrivaMesh: сообщения, контакты, ключи, оба пароля и биометрическая разблокировка. Всё остальное на устройстве не затрагивается.

Можно ли это отменить или вернуть переписку?

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

В каких версиях PrivaMesh есть код принуждения?

В клиенте для Windows начиная с 1.0.0 и в клиенте для Android начиная с 0.1 — оба вышли 27 августа 2026. На iPhone код написан и открыт, но текущая сборка в App Store — 1.0 от 7 августа, она вышла раньше, поэтому функция появится в следующем релизе.

Читать дальше