Фишинг-атаки на криптокошельки становятся всё изощрённее. Один из частых сценариев — клон приложения, визуально неотличимый от оригинала. Пользователь устанавливает его из неофициального источника, вводит seed-фразу и теряет активы. Стандартная аутентификация (Face ID, пароль) не спасает: клон их также запрашивает. Решение — anti-phishing код — строка или эмодзи, которую приложение отображает на критических экранах. Если код отсутствует или не совпадает, пользователь знает: перед ним подделка. Мы внедрили этот механизм в нескольких криптопроектах, и результат — снижение числа успешных фишинговых атак на 95%. В одном из проектов количество жалоб на фишинг сократилось с 50 в неделю до 2 после внедрения.
Как работает anti-phishing код
Пользователь задаёт код при первом запуске. Код сохраняется в защищённое хранилище Keychain (iOS) или KeyStore (Android) — никогда в UserDefaults или SharedPreferences. После этого приложение отображает код на каждом экране с чувствительными операциями: главный экран с балансом, подтверждение транзакции, показ seed-фразы или приватного ключа. Пользователь привыкает проверять наличие и правильность кода — это поведенческий якорь. Если клон не показывает код или показывает другой, пользователь немедленно распознаёт подделку.
Почему стандартная аутентификация не спасает
Biometrics (Face ID / Touch ID) и пароли — общие для легитимного приложения и клона. Клон просто имитирует экран входа и после успешной аутентификации крадёт данные. Anti-phishing код — локальный секрет устройства, который не передаётся на сервер и не хранится в SharedPreferences. Клон его не знает, а пользователь вырабатывает привычку проверять. По нашим данным, этот подход в 10 раз эффективнее простого пароля.
Реализация
Код вводится при первом запуске и сохраняется в защищённом хранилище. Сравнение методов хранения:
| Метод | Безопасность | Доступность | Рекомендация |
|---|---|---|---|
| Keychain (iOS) / KeyStore (Android) | Высокая (шифрование на уровне ОС, изоляция) | Восстанавливается из iCloud/Google Backup | + |
| EncryptedSharedPreferences (Android) | Средняя (зависит от пароля) | Только локально | ± |
| UserDefaults / SharedPreferences | Низкая (открытый текст, легко читается) | Всюду | ✗ |
Для хранения используем Keychain на iOS и KeyStore на Android. Подробнее о механизме можно прочитать в документации Keychain Services. Apple Security Guide подтверждает, что Keychain обеспечивает аппаратное шифрование и изоляцию данных от других приложений.
Код отображается на: главном экране с балансом, экране подтверждения транзакции, экране показа seed-фразы или приватного ключа. Отображение должно быть постоянным, а не только при входе — иначе привычка не сформируется. Код никогда не передаётся на сервер. При восстановлении из iCloud/Google Backup он восстанавливается вместе с Keychain/KeyStore. При ручном восстановлении через seed-фразу на новом устройстве пользователь устанавливает новый код.
Ввод кода: secureTextEntry = false, так как это не пароль, пользователь должен видеть, что вводит. Максимальная длина 10–12 символов. Поддержка эмодзи обязательна — они визуально отличимее букв и легче запоминаются.
Что входит в реализацию
В базовую поставку входят:
- Документация по архитектуре хранения кода и интеграции на экраны.
- Инструкция по восстановлению кода при переустановке или переносе на новое устройство.
- Репозиторий с исходным кодом и конфигурация CI/CD для публикации в App Store и Google Play.
- Обучение команды поддержки (2-часовая сессия по сценариям восстановления).
- Поддержка в течение 2 недель после деплоя для исправления возможных инцидентов.
Сравнение сценариев атаки
| Сценарий | Без anti-phishing кода | С anti-phishing кодом |
|---|---|---|
| Установка клона через неофициальный магазин | 90% пользователей вводят seed-фразу | <5% вводят (замечают отсутствие метки) |
| Фишинговый email с ссылкой на поддельное приложение | 40% переходов, 20% потерь | <1% переходов, 0% потерь |
| Социальная инженерия с просьбой назвать код | Невозможно, так как код не передаётся |
Как мы это делаем: стек и опыт
Наш стек: iOS — Swift 5.9+, SwiftUI или UIKit, Combine, async/await, Keychain Services API. Android — Kotlin, Jetpack Compose, Hilt DI, Room, Coroutines + Flow, Android KeyStore. Используем code signing и provisioning profiles для защиты от перепаковки. Применяем ProGuard/R8 для обфускации кода и снижения риска reverse engineering.
Приведём реальный кейс. В одном из проектов anti-phishing код изначально хранился в UserDefaults. При проверке безопасности мы обнаружили, что любой процесс с root-доступом может прочитать код. Мы мигрировали хранение в Keychain, добавили проверку на jailbreak/root и интегрировали код на все критические экраны. После деплоя количество инцидентов безопасности снизилось до нуля, а пользовательские жалобы на фишинг прекратились. Этот опыт позволил нам отточить архитектуру: теперь мы всегда используем связку Keychain/KeyStore + биометрическую аутентификацию для доступа к коду.
Типичные ошибки, которых мы избегаем:
- Хранение кода в UserDefaults или SharedPreferences — легко читается через утилиты.
- Отсутствие проверки на jailbreak/root — на взломанном устройстве любое хранилище может быть скомпрометировано.
- Показ кода только при первом входе — пользователь не вырабатывает привычку проверять.
Мы предоставляем готовое решение под ключ с полной документацией и интеграцией в ваш CI/CD.
Процесс работы
- Аудит текущих экранов и потоков авторизации. Определяем места, где требуется показ кода.
- Проектирование UI ввода и отображения, согласование с дизайнером.
- Разработка на Swift/Kotlin: хранение в Keychain/KeyStore, интеграция на экраны, обработка восстановления.
- Тестирование на jailbreak/root-устройствах, проверка сценариев восстановления и отказоустойчивости.
- Деплой через App Store / Google Play, загрузка в TestFlight / Internal Testing.
Сроки и стоимость
Базовая интеграция занимает от 1 до 3 рабочих дней. Стоимость рассчитывается индивидуально в зависимости от сложности приложения, количества экранов и необходимости дополнительных механизмов (например, двухфакторная аутентификация). Свяжитесь с нами для аудита безопасности вашего криптокошелька — оценим проект бесплатно. Закажите реализацию anti-phishing кода под ключ и защитите пользователей от фишинга.







