Реализация графического ключа для входа в мобильное приложение

TRUETECH занимается разработкой, поддержкой и обслуживанием мобильных приложений iOS, Android, PWA. Имеем большой опыт и экспертизу для публикации мобильных приложений в популярные маркеты Google Play, App Store, Amazon, AppGallery и другие.
Разработка и поддержка любых видов мобильных приложений:
Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Предлагаемые услуги
Показано 1 из 1 услугВсе 1735 услуг
Реализация графического ключа для входа в мобильное приложение
Средняя
от 1 рабочего дня до 3 рабочих дней
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    760
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    646
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1063
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    947
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    878
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    450

Реализация графического ключа для входа в мобильное приложение

Графический ключ — паттерн из Android, в iOS встречается реже (нет системного аналога). Принцип тот же, что и у PIN: локальная разблокировка хранилища без отправки секрета на сервер. Но у паттерна есть специфические проблемы безопасности, которые надо понимать до начала реализации.

Проблема жирных следов

На экране телефона остаются следы от пальца. Паттерн из 9 точек восстанавливается визуально с расстояния 1–2 метра под правильным углом освещения. Исследование Авраама и коллег (2010) показало: большинство пользователей рисуют L-, Z- или S-образные паттерны — 12 наиболее популярных паттернов покрывают ~20% пользовательской базы. Это важный контекст для клиента при выборе метода аутентификации.

Кодирование паттерна

Стандартная сетка 3×3 — 9 точек с индексами 0–8. Паттерн — последовательность индексов. Минимальная длина — 4 точки (требование Android). Из 9 точек с минимальной длиной 4 возможных паттернов ~389 112 — существенно меньше, чем у 6-значного PIN (1 000 000 комбинаций).

Кодируем паттерн в строку индексов: [0,1,2,5,8]"01258". Эту строку используем как input для деривации ключа — та же схема PBKDF2, что и для PIN. Паттерн в plaintext никогда не сохраняем.

Кастомная реализация View

На Android можно взять com.github.itsxtt:pattern-lock или аналогичные open-source библиотеки — базовую логику рисования линий. Но в enterprise-проектах мы пишем сами: полный контроль над визуалом, криптографической частью, и нет зависимости от неподдерживаемой библиотеки.

Jetpack Compose:

@Composable
fun PatternLockView(
    onPatternComplete: (List<Int>) -> Unit
) {
    val selectedDots = remember { mutableStateListOf<Int>() }
    var currentPosition by remember { mutableStateOf(Offset.Zero) }

    Canvas(
        modifier = Modifier
            .fillMaxSize()
            .pointerInput(Unit) {
                detectDragGestures(
                    onDragStart = { offset -> /* найти ближайшую точку */ },
                    onDrag = { change, _ ->
                        currentPosition = change.position
                        // добавить точку если касание в радиусе
                    },
                    onDragEnd = {
                        if (selectedDots.size >= 4) onPatternComplete(selectedDots.toList())
                        selectedDots.clear()
                    }
                )
            }
    ) {
        // рисуем точки и линии между selectedDots + линию до currentPosition
    }
}

Ключевые детали: точку можно посетить только один раз; линия, пересекающая незатронутую точку, автоматически её добавляет (стандартное поведение Android Pattern Lock); минимальное расстояние касания до точки — ~24dp.

Скрываем паттерн через 500–800мс после завершения ввода — линии исчезают, точки остаются. Это предотвращает shoulder surfing.

iOS: кастомная реализация

В iOS нет системного Pattern Lock. Реализуем через SwiftUI Canvas + DragGesture. Логика аналогичная, визуал адаптируем под iOS Human Interface Guidelines. На iOS паттерн встречается реже — обычно это специфический запрос клиента (например, детские приложения или специализированные enterprise-инструменты).

Fallback и счётчик ошибок

После 5 неудачных попыток — требуем полный логин через credentials. Счётчик в Keychain (iOS) или EncryptedSharedPreferences (Android). После успешного логина сбрасываем счётчик и предлагаем перерисовать паттерн — важно предупредить пользователя, что старый паттерн сброшен.

Когда не стоит использовать

Паттерн — слабее PIN при равном числе символов. Для банковских приложений, медицинских данных или корпоративного доступа — рекомендуем PIN 6+ цифр с PBKDF2 или биометрию. Паттерн уместен в приложениях, где удобство важнее максимальной безопасности: трекеры, органайзеры, приложения для детей.

Сроки

Кастомная реализация PatternLock с правильной криптографической схемой на одной платформе — 5–8 рабочих дней. На обеих платформах — 10–14 дней (с адаптацией UX под каждую ОС).