Юзабельное шифрование: уроки Мокси для продуктов и UX
Юзабельное шифрование: почему безопасность рушится без UX, и какие паттерны использовать для входа, обмена доступом и управления ключами.

Когда безопасность проигрывает удобству
Люди редко хотят нарушать правила безопасности. Они просто хотят закончить задачу: войти в сервис, дать доступ коллеге, восстановить аккаунт, не потерять важный файл. Если защищенный путь длинный, непонятный или часто ломается, пользователи находят обходной.
Криптография может быть безупречной на бумаге, но система все равно проваливается в реальной жизни. Не потому что шифр слабый, а потому что UX подталкивает человека действовать против интересов безопасности. Получается парадокс: чем строже и неудобнее защита, тем чаще ее отключают или обходят.
На практике это выглядит знакомо: пароль записывают в заметки, код подтверждения пересылают в мессенджере, секреты проекта кидают в чат, один аккаунт делят на всю команду, потому что приглашения и роли непонятны.
Почти в каждом продукте одни и те же зоны риска:
- вход и подтверждение личности (пароли, 2FA, сессии)
- шаринг и приглашения (кому и на сколько дать доступ)
- ключи и секреты (где хранить, как менять, кто видит)
- восстановление (что делать при потере телефона, почты, устройства)
Представьте небольшую команду, которая запускает приложение и зовет подрядчика «поправить платежи». Если доступ выдается только через сложную схему с непонятными терминами, подрядчик попросит «скинь логин и пароль», а кто-то отправит их в личку. Формально виноват человек, но причина в дизайне процесса.
Цель простая: сделать безопасное поведение самым легким вариантом. Чтобы вход, обмен доступом и управление секретами решались быстро и понятно, без героизма и без желания «обойти на минутку».
Уроки Мокси Марлинспайка простыми словами
Мокси Марлинспайк (Moxie Marlinspike) - криптограф и инженер, которого часто вспоминают, когда обсуждают, почему «просто добавить шифрование» недостаточно. Его ключевая мысль для продуктовых команд звучит приземленно: безопасность ломается там, где человеку неудобно.
Сильная криптография не спасает, если пользователь делает обходной путь. Если включение защиты требует пяти шагов, чтения предупреждений и ручного копирования кодов, люди начнут отправлять секреты в обычном чате, сохранять их в заметках или использовать один пароль на все. Формально система «защищена», но реальное поведение превращает ее в открытую дверь.
Практический смысл «юзабельного шифрования» в том, что продукт не должен просить человека быть экспертом. Он должен тихо делать безопасное по умолчанию и давать минимум поводов «срезать углы».
Полезные ориентиры при проектировании:
- меньше решений и переключателей там, где они не нужны
- безопасные дефолты: защита включена сразу, а не после галочки
- предупреждения обычным языком: что случится и что делать дальше
- восстановление продумано заранее, а не через «напишите администратору в личку»
Важно помнить: UX - часть модели угроз. Если в продукте есть неизбежная ситуация «надо срочно дать доступ», атакующий будет давить именно туда. Значит, уязвимость часто не в алгоритмах, а в том, что нет безопасного быстрого сценария для реальной задачи.
Почему люди обходят шифрование и правила
Большинство людей не хотят «ломать безопасность». Они просто хотят закончить задачу. Если защита мешает, она воспринимается как ошибка продукта, а не как помощь. Тогда даже хорошее шифрование проигрывает привычкам: проще переслать код в мессенджер, сделать скриншот или зайти в общий аккаунт.
Обход почти всегда начинается там, где UX заставляет пользователя думать, ждать или бояться ошибиться. Частые триггеры:
- слишком сложные требования к паролю и частая смена без понятного смысла
- лишние шаги при входе и подтверждениях, особенно на телефоне
- предупреждения в стиле «все пропадет», но без понятного следующего шага
- термины вроде «ключ», «токен», «сертификат», «отпечаток» без человеческого объяснения
- разные правила в разных местах продукта (сегодня можно, завтра нельзя)
Дальше включается режим «как быстрее». Нужен доступ коллеге прямо сейчас? Пользователь кидает скриншот одноразового кода. Нужно передать файл? Делает копию без защиты и отправляет в чат. Нужно, чтобы подрядчик «просто зашел и посмотрел»? Появляется общий логин и пароль, который потом никто не меняет.
Стресс и дедлайны усиливают ошибки. Если безопасный путь выглядит длиннее на 30 секунд, его будут избегать.
Если хотите проверить продукт на «склонность к обходам», смотрите не на лозунги, а на точки трения: где люди бросают процесс (вход, приглашение, подтверждение), где переходят на ручные костыли (копирование, скриншоты, пересылки), какие сообщения вызывают ступор и что человек делает сразу после них.
Мини-модель угроз для обычных продуктов
Мини-модель угроз нужна не для паранойи, а чтобы не строить защиту против выдуманного врага. Когда вы понимаете, что именно защищаете и от кого, проще сделать удобные и безопасные потоки.
Что считаем активами
Активы - это то, потеря чего реально бьет по пользователю или бизнесу. В типовом продукте чаще всего важны доступ к аккаунту и сессиям, переписка и комментарии, файлы и вложения, права и роли, история действий.
Достаточно выбрать 1-2 главных актива для ежедневных сценариев и уже под них проектировать потоки. Остальное можно подтянуть позже.
Кто ваш противник в бытовых сценариях
В реальности чаще ломают не криптографию, а человека и его контекст. Самые частые ситуации:
- потеря или кража телефона с активной сессией
- фишинг: «введите код из SMS», «подтвердите вход»
- общий ноутбук, где забыли выйти из аккаунта
- утечки через мессенджеры и пересылки секретов
- подрядчик или коллега с лишними правами
Что нельзя перекладывать на пользователя
Не просите человека выбирать уровень шифрования, тип ключа или «безопасный режим». Он выберет то, что быстрее или звучит понятнее. Эти решения должны быть правильными по умолчанию: безопасные настройки, ясные названия, автоматические сроки доступа.
Связывайте угрозы с UX-точками, где человек с высокой вероятностью ошибется: слишком сложный вход, запутанное приглашение, просьба «сохраните этот ключ в надежном месте». Если ошибка вероятна, меняйте интерфейс, а не добавляйте предупреждение мелким шрифтом.
Паттерны удобной аутентификации
Сильная аутентификация не должна ощущаться как препятствие. Если вход мучительный, люди начнут обходить правила: сохранять пароли где попало, пересылать коды, оставлять сессию открытой на чужом устройстве.
Хороший дефолт - самый легкий безопасный путь. Для многих продуктов это вход по ссылке (magic link) или одноразовый код, а для постоянных пользователей - passkeys. Что бы вы ни выбрали, добавьте ограничения попыток и паузу после серии ошибок, чтобы защита работала тихо, а не как наказание.
Второй фактор просите не всегда, а по сигналам риска: новое устройство, необычное местоположение, вход после долгого перерыва, серия подозрительных попыток. Если все спокойно, не заставляйте человека подтверждать личность на каждом шаге.
Тексты делайте человеческими. Вместо «неверная подпись» пишите «код устарел, запросите новый». Вместо «сессия недействительна» - «вы вышли из аккаунта, войдите снова».
Сессии и смена устройства
Смена телефона и ноутбука происходит постоянно, поэтому сценарий нельзя делать хрупким. Пользователю нужен понятный список активных устройств и несколько простых действий:
- подтверждение «Это я» / «Это не я» при входе с нового устройства
- список устройств с датой последней активности
- «выйти с этого устройства» и «выйти везде»
Добавьте понятные имена устройств (например, «iPhone Анны») и короткую подсказку, что делать при потере телефона.
Что показывать и что фиксировать
Пользователю полезны короткие сигналы: последний вход, новое устройство, серия неудачных попыток, смена пароля или метода входа. Это должны быть ясные уведомления с одним действием: проверить устройства, сменить пароль, отключить все сессии.
Логи храните так, чтобы команда могла расследовать инцидент, но не превращайте экран безопасности в «простыню событий».
Паттерны безопасного обмена и приглашений
Самая частая UX-ошибка в безопасности: продукт заставляет делиться секретом (паролем, токеном, файлом ключа), потому что «так проще». Пользователь так и сделает, а потом секрет окажется в почте, мессенджере и пересылках. Надежный обмен строится вокруг доступа, а не вокруг секрета.
Делитесь доступом, а не секретами
Сделайте так, чтобы «пригласить» было быстрее, чем «скинуть пароль». Базовая механика простая: приглашение по почте или телефону, понятная роль, автоматическая выдача прав после принятия. Если пользователю приходится копировать длинную строку, он скопирует ее в самый удобный канал - и это будет не тот канал, который вам нужен.
Роли называйте обычными словами и показывайте итог одной фразой. Например: владелец управляет оплатой, приглашениями и удалением проекта; редактор меняет данные и настройки, но не управляет доступами; просмотр видит, но не меняет.
Приглашение делайте одноразовым и со сроком. Пишите «Приглашение действует 24 часа», а не «TTL 24h». Если срок истек, рядом должна быть кнопка «Отправить заново».
Отзыв доступа - одной кнопкой с ясным эффектом: «Отключить доступ сейчас», и сразу же пояснение, что поменялось. Отдельно покажите, кто имеет доступ и какие ключевые возможности включены: можно ли скачивать, можно ли экспортировать, можно ли приглашать других, к какому проекту это относится.
Практичный сценарий: вы зовете подрядчика на неделю. Вместо логина и пароля вы отправляете одноразовое приглашение с ролью «Просмотр», сроком 7 дней и кнопкой «Отозвать». Это и есть удобная безопасность: привычка «нужно быстро» ведет к правильному действию.
Управление ключами без боли для пользователя
Если человеку приходится разбираться в словах «ключ», «сид-фраза» и «импорт/экспорт», он почти наверняка выберет обход: сохранит секрет в заметках или отправит в чат. Простое правило: ключи должны жить в продукте, а не в голове пользователя.
Самый надежный дефолт - когда приложение само создает и хранит ключи в защищенном хранилище устройства, а пользователю показывает понятные действия: «добавить устройство», «подтвердить вход», «восстановить доступ». Ручное копирование длинных строк лучше уводить глубоко в настройки и оставлять как опцию для продвинутых.
Рабочий набор паттернов:
- автогенерация ключей при регистрации без дополнительных шагов
- привязка к устройству и биометрии/пин-коду без показа «секретов» на экране
- добавление нового устройства через подтверждение на уже доверенном устройстве
- резервные коды на случай потери (показать один раз, затем спрятать)
Восстановление должно быть спокойным сценарием, а не квестом. Лучше честно объяснить границы: «Переписку восстановим, если есть доверенное устройство или резервные коды. Без этого старые сообщения не вернутся, потому что они зашифрованы так, что даже мы их не можем расшифровать». Такая честность снижает нагрузку на поддержку и уменьшает импровизацию пользователя.
Потеря устройства: один экран, один план. Человек должен быстро заблокировать старое устройство и выпустить новый ключ, а вы - показать статус («устройство удалено», «новое устройство подтверждено») и последствия простыми словами.
Частые ошибки, из-за которых безопасность ломают
Проблемы чаще возникают не из-за криптографии, а из-за мелких решений в интерфейсе.
Первая ошибка - вынуждать хранить секреты где попало. Когда сервис говорит «сохраните этот ключ» и дальше никак не помогает, ключ оказывается в заметках, в письме самому себе или в чате. Это не «невнимательность пользователя», а дефект продукта: критичная операция переложена на память и дисциплину.
Вторая ошибка - слишком много предупреждений. Если каждое действие сопровождается «опасно», мозг быстро начинает нажимать «ОК» автоматически, и важное предупреждение теряется в шуме.
Третья ошибка - тексты, которые не дают следующего шага. «Ошибка шифрования» не говорит, что делать. Пользователь пробует еще раз, а потом ищет обход: отправить файл без защиты, переслать пароль отдельно, отключить проверку.
Четвертая ошибка - смешивание понятий. Когда пароль, PIN, код из SMS и «ключ» лежат рядом и называются похожими словами, люди путают уровни защиты. Тогда PIN воспринимают как «надежный пароль», а одноразовый код пересылают «для входа» другому человеку.
Пятая ошибка - нет простого выхода. Если нельзя быстро отозвать доступ, закрыть сессию на потерянном устройстве или посмотреть активные устройства, люди начинают действовать радикально: менять пароли всем, заводить общий аккаунт, отключать защитные функции.
Короткие правила, которые помогают не доводить до обходов:
- секреты должны храниться и восстанавливаться без «скопируй и не потеряй»
- предупреждений мало, и они заметно отличаются по важности
- любая ошибка содержит «что произошло» и «что нажать дальше»
- термины стабильны по всему продукту
- отзыв доступа и «выйти везде» находятся в 2-3 кликах, не в переписке с поддержкой
Короткий чеклист: можно ли этим пользоваться безопасно
Юзабельное шифрование проверяется тем, что делает человек в реальном потоке.
- Безопасный дефолт в каждом сценарии. Если пользователь просто жмет «Далее», результат все равно должен быть безопасным: минимальные права, разумные сроки доступа, защита от случайной пересылки.
- Задача решается без ручного копирования секретов. Никаких «скопируйте ключ» или «вставьте токен» для базовых операций. Если без этого нельзя, поток сломан.
- Отзыв доступа быстрый, а следы понятны. Ограничить доступ можно за секунды, а история действий объясняет, кто пригласил, кто принял, что изменилось и когда истечет.
- Восстановление продумано заранее. Потеря телефона не должна приводить к панике и обходным путям. Пользователь понимает, что восстановится, что потеряется и какие шаги безопасны.
- Предупреждения говорят, что делать дальше. Текст не пугает и не обвиняет. Он объясняет риск и предлагает конкретное действие.
Быстрый стресс-тест: дайте продукт человеку, который не участвовал в разработке, и попросите за 2 минуты выполнить типовую задачу (например, дать доступ коллеге). Затем спросите, где возникло желание «просто переслать код» и почему. Если соблазн сделать небезопасно появляется регулярно, проблема почти всегда в UX, а не в «плохих пользователях».
Реалистичный пример: доступ для подрядчика без пересылки секретов
Сценарий: небольшая команда хочет дать подрядчику доступ к документу (или проекту) ровно на 3 дня. Задача простая, но именно здесь удобство часто ломает безопасность: всем нужно быстро.
Хороший поток выглядит так: тимлид нажимает «Пригласить», вводит email или номер, выбирает роль «Только просмотр» и ставит срок «3 дня». Система отправляет приглашение, показывает, к чему будет доступ, и просит подрядчика подтвердить вход. После принятия приглашения действия подрядчика фиксируются, а владелец получает понятные сигналы о первом входе и попытках скачать или экспортировать.
Через 3 дня доступ снимается автоматически. Тимлид видит статус «Доступ истек» и при необходимости нажимает «Отозвать сейчас». Важно, что подрядчику не нужно знать пароли и «секретные фразы», а команде не нужно ничего пересылать в личные чаты.
Где обычно ошибаются: отправляют файл в мессенджер, кидают архив «с паролем в следующем сообщении» или дают общий логин «на пару дней». После этого непонятно, кто и что делал, а отзыв доступа превращается в смену пароля для всех.
Следующие шаги: как быстро проверить и улучшить UX безопасности
Если безопасность ломается в реальности, дело часто в мелочах: непонятном тексте, лишнем шаге, странном дефолте. Выберите один поток и доведите его до состояния, когда пользователю не хочется искать обход.
Сначала решите, что болит сильнее всего: вход, обмен доступом или восстановление. Один поток за раз дает результат быстрее, чем попытка «починить все».
Сделайте подготовку еще до разработки: пропишите экранные тексты и состояния. Что видит человек при неверном коде, истекшей сессии, утерянном устройстве, попытке открыть приглашение без прав. Часто уже на этом шаге видно, где начнут пересылать секреты в мессенджерах.
Быстрая проверка за 1-2 дня
Опишите «идеальный путь» сценария в 5-7 шагов, набросайте экраны и тексты ошибок, затем дайте 3-5 людям пройти сценарий без подсказок. Запишите, где они застревают и что пытаются сделать «в обход». После этого правьте формулировки, дефолты и порядок шагов.
Если вы собираете приложение на платформе с разработкой через чат, прототип таких потоков можно поднять особенно быстро. Например, в TakProsto (takprosto.ai) удобно описать нужные экраны и правила словами, получить рабочую заготовку и сразу прогнать тест на реальных пользователях.
Итерация, которая дает эффект
Запланируйте короткий цикл правок: поменять формулировки, сделать безопасный вариант дефолтом, убрать лишний ввод, добавить понятное объяснение «почему так». Затем повторите тест на новых 3-5 людях. Два круга обычно дают больше, чем неделя споров в чате.
FAQ
Почему люди обходят безопасность, даже если понимают риски?
Потому что человек выбирает самый быстрый путь к результату. Если безопасный сценарий длиннее, непонятнее или часто ломается, его начинают обходить: пересылают коды, делятся паролями, хранят секреты в заметках.
Вывод простой: безопасность должна быть самым легким вариантом, иначе она останется «на бумаге».
В каких местах продукта UX чаще всего ломает безопасность?
Там, где нужно срочно выполнить реальную задачу:
- вход и подтверждение личности (пароли, 2FA, сессии)
- приглашения и роли (кому, зачем и на сколько дать доступ)
- ключи и секреты (где хранятся и кто их видит)
- восстановление доступа (потеря телефона/почты/устройства)
Если хотя бы в одной зоне нет быстрого безопасного пути, появляется «обходной».
Что значит «юзабельное шифрование» простыми словами?
Когда от пользователя требуют быть экспертом: выбрать «уровень шифрования», понять разницу между ключом и токеном, вручную копировать секреты.
Правильный дефолт: защита включена сразу, а продукт сам делает сложное (генерирует и хранит ключи, ограничивает попытки, подсказывает следующий шаг).
Как быстро сделать мини-модель угроз для обычного продукта?
Начните с 1–2 ключевых активов: например, доступ к аккаунту (сессии, устройства) и данные проекта (файлы, роли, история действий).
Дальше перечислите самые вероятные «бытовые» угрозы: фишинг, потеря телефона с активной сессией, общий ноутбук, пересылка секретов в мессенджерах, подрядчик с лишними правами. Этого достаточно, чтобы спроектировать удобные потоки без паранойи.
Какой вход считать удобным и безопасным по умолчанию?
Хороший базовый вариант: «самый легкий безопасный вход» + усиление по риску.
Практично выглядит так:
- удобный основной метод (одноразовый код/ссылка, passkeys)
- второй фактор не всегда, а при сигнале риска (новое устройство, странная активность)
- ограничения попыток и паузы после ошибок
- понятные тексты ошибок: что случилось и что нажать дальше
Что обязательно нужно для управления сессиями и устройствами?
Сделайте два экрана, которые решают 80% проблем:
- список активных устройств с понятными именами и датой активности
- кнопки «выйти с этого устройства» и «выйти везде»
Плюс уведомления только по важным событиям: новый вход, смена пароля/метода входа, серия неудачных попыток — и всегда с одним ясным действием.
Как сделать шаринг и приглашения так, чтобы никто не просил пароль?
Стройте процесс вокруг доступа, а не вокруг секрета.
Нормальный поток:
- приглашение по email/телефону
- понятная роль (просмотр/редактирование/владелец)
- срок действия приглашения и/или доступа
- отзыв доступа одной кнопкой
Если пользователю приходится копировать длинные строки или «скинуть логин и пароль», процесс почти гарантированно будет обходиться.
Как управлять ключами и секретами, чтобы люди не сохраняли их в заметках?
Не заставляйте пользователя хранить «секрет в голове».
Рабочие паттерны:
- ключи генерируются и хранятся внутри продукта/устройства, без ручного копирования
- добавление нового устройства через подтверждение на доверенном устройстве
- резервные коды (показать один раз, затем спрятать)
- честное восстановление: что вернется, а что нет, и почему
Ручной экспорт ключей лучше оставлять как редкую опцию для продвинутых.
Какие UX-ошибки чаще всего заставляют пользователей действовать небезопасно?
Чаще всего ломают безопасность не алгоритмы, а мелочи в интерфейсе:
- «Сохраните этот ключ и не потеряйте» без нормального способа восстановления
- слишком много одинаковых предупреждений (их перестают читать)
- ошибки без следующего шага (пользователь начинает импровизировать)
- путаница терминов: пароль/PIN/код/ключ называются похоже
- нет быстрого отзыва доступа или «выйти везде»
Исправление обычно в дефолтах, текстах и коротких сценариях, а не в новых запретах.
Как быстро проверить, что безопасность в продукте не будут обходить?
Возьмите один сценарий (например, «дать доступ подрядчику на 3 дня») и проверьте его на людях.
Мини-план на 1–2 дня:
- опишите идеальный путь в 5–7 шагов
- подготовьте тексты ошибок и состояний (истекший код, новая сессия, нет прав)
- дайте 3–5 людям пройти без подсказок
- фиксируйте места, где возникает желание «просто переслать код/пароль»
Если вы делаете прототип через TakProsto, такие потоки можно быстро собрать словами, прогнать тест и итеративно поправить дефолты и формулировки.