Розробка Pattern Lock для iOS та Android: безпека та юзабіліті

Графічний ключ — зручний спосіб захистити мобільний застосунок, але без продуманої реалізації він легко вразливий до підглядання та зламу. Ми розробляємо pattern lock для iOS та Android з урахуванням усіх нюансів безпеки та юзабіліті. Наша команда реалізує проєкт під ключ — від аудиту загроз до впровадження та подальшої підтримки, забезпечуючи надійну автентифікацію, яка не дратує користувачів.

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

Це лише деякі з типів мобільних додатків, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1734 послуг
Розробка Pattern Lock для iOS та Android: безпека та юзабіліті
Середній
від 1 дня до 3 днів
Часті запитання

Реалізація графічного ключа для входу в мобільний додаток

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

Чому графічний ключ вразливий для shoulder surfing?

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

Як кодується патерн і захищається криптографією?

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

Кодуємо патерн у рядок індексів: [0,1,2,5,8] → "01258". Цей рядок використовуємо як input для деривації ключа — та сама схема PBKDF2, що й для PIN. Патерн у plaintext ніколи не зберігаємо. Для зберігання похідного ключа використовуємо Keychain (iOS) або EncryptedSharedPreferences (Android).

Докладніше про криптографічну схему PBKDF2 з сіллю та 100 000 ітерацій — мінімальний поріг. На Android додатково застосовуємо шифрування за допомогою Android Keystore, на iOS — Secure Enclave. Це забезпечує захист навіть при компрометації пристрою.

Кастомна реалізація View на Jetpack Compose

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

@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: кастомна реалізація через SwiftUI

У iOS немає системного Pattern Lock. Реалізуємо через SwiftUI Canvas + DragGesture. Логіка аналогічна, візуал адаптуємо під iOS Human Interface Guidelines. На iOS патерн зустрічається рідше — зазвичай це специфічний запит клієнта (наприклад, дитячі додатки або спеціалізовані enterprise-інструменти). Гарантуємо безшовну інтеграцію з біометрією (Face ID / Touch ID) та, за потреби, з кастомною UI-анімацією.

Як реалізувати Pattern Lock на обох платформах?

  1. Проектуємо UX-патерн: мінімальна довжина, таймери, анімації.
  2. Реалізуємо кастомне View (Compose/SwiftUI) з обробкою жестів.
  3. Вбудовуємо криптографічний захист: PBKDF2, зберігання в захищеному контейнері.
  4. Інтегруємо з біометрією та fallback-логіном.
  5. Документуємо код та описуємо схему.
  6. Тестуємо на реальних пристроях (мінімум 5 моделей).
  7. Забезпечуємо підтримку після впровадження (2 тижні).

Порівняння реалізації на iOS та Android

Параметр iOS Android
Мова Swift 5.9+, UIKit/SwiftUI Kotlin, Jetpack Compose
Зберігання Keychain, Secure Enclave EncryptedSharedPreferences, Android Keystore
Stealth-режим Таймер 500мс, анімація затухання Таймер 800мс, анімація затухання
Біометрія Face ID / Touch ID BiometricPrompt
Терміни 5–8 днів 5–8 днів

Порівняння патерну та PIN-коду

Критерій Графічний ключ (3×3) PIN-код (6 цифр)
Кількість комбінацій ~389 112 (мін. 4 точки) 1 000 000
Стійкість до shoulder surfing Вразливий, потрібен захист Помірна
Зручність введення Висока, інтуїтивно Середня
Рекомендація Для додатків з низькими вимогами Для банків, мед.даних

Fallback та лічильник помилок

Після 5 невдалих спроб — вимагаємо повний логін через credentials. Лічильник у Keychain (iOS) або EncryptedSharedPreferences (Android). Після успішного логіну скидаємо лічильник і пропонуємо перемалювати патерн — важливо попередити користувача, що старий патерн скинутий. Цей механізм обов'язковий для захисту від брутфорсу та економить ресурси підтримки.

Коли не варто використовувати

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

Що входить у роботу

  • Проектування UX-патерну: вибір мінімальної довжини, таймери, анімації.
  • Реалізація кастомного View (Compose/SwiftUI).
  • Криптографічний захист: PBKDF2, зберігання в захищеному контейнері.
  • Інтеграція з біометрією та fallback-логіном.
  • Документація коду та опис схеми.
  • Тестування на реальних пристроях (як мінімум 5 моделей).
  • Підтримка після впровадження (2 тижні).

Терміни орієнтовно

Кастомна реалізація Pattern Lock з правильною криптографічною схемою на одній платформі — 5–8 робочих днів. На обох платформах — 10–14 днів (з адаптацією UX під кожну ОС). Вартість розраховується індивідуально. Оцінюємо проект — зв'яжіться з нами, щоб обговорити деталі. Отримайте консультацію: наші інженери мають понад 5 років досвіду в мобільній розробці та сертифікації Apple / Google.

Наші компетенції:

Останні роботи

  • Розробка мобільного додатка для компанії FEEDME
    Розробка мобільного додатка для компанії FEEDME
    1009
  • Розробка мобільного додатку для компанії XOOMER
    Розробка мобільного додатку для компанії XOOMER
    902
  • Розробка мобільного додатку для компанії RHL
    Розробка мобільного додатку для компанії RHL
    1331
  • Розробка мобільного додатку для компанії ZIPPY
    Розробка мобільного додатку для компанії ZIPPY
    1179
  • Розробка мобільного додатку для компанії Affhome
    Розробка мобільного додатку для компанії Affhome
    1106
  • Розробка мобільного додатку для компанії FLAVORS
    Розробка мобільного додатку для компанії FLAVORS
    713