Налаштування Keychain для безпечного зберігання даних в iOS

Налаштування Keychain для безпечного зберігання даних в iOS Після оновлення iOS додаток не знаходить токен авторизації — користувач знову бачить екран логіну. Або гірше: токен зберігся, але доступний іншому додатку того ж вендора без обмежень. Обидві ситуації — наслідок неправильно налаштованого

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

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

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

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1734 послуг
Налаштування Keychain для безпечного зберігання даних в iOS
Середній
від 1 дня до 3 днів

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

Часті запитання

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

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    895
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    782
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1216
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    1079
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    1002
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    597

Налаштування Keychain для безпечного зберігання даних в iOS

Після оновлення iOS додаток не знаходить токен авторизації — користувач знову бачить екран логіну. Або гірше: токен зберігся, але доступний іншому додатку того ж вендора без обмежень. Обидві ситуації — наслідок неправильно налаштованого Keychain. Ми, як досвідчені iOS-розробники, гарантуємо, що після нашого налаштування таких проблем не виникне — використовуємо перевірені практики Security framework та багаторічний досвід проєктів.

Що таке Keychain і чому UserDefaults не підходить?

Близько 80% iOS-додатків зберігають токени в UserDefaults. Дані потрапляють до Library/Preferences/*.plist. Цей файл входить до iCloud-бекапу, його можна витягти через iTunes backup extraction (наприклад, iBackup Viewer). Хакери витягли такі дані з резервних копій користувачів. UserDefaults у 100 разів менш безпечний порівняно з Keychain, оскільки не шифрує дані на рівні запису. Keychain використовує шифрування AES-256-GCM.

Як правильно налаштувати доступ до Keychain?

Друга за частотою проблема — використання Keychain без явного kSecAttrAccessible. За замовчуванням значення kSecAttrAccessibleWhenUnlocked — розумно, але багато проєктів не замислюються, чи потрібен доступ до даних при заблокованому екрані (для background tasks) або тільки коли пристрій розблоковано. Це принципово різні threat models.

Рівень захисту Опис Застосування
kSecAttrAccessibleWhenUnlocked Доступ тільки при розблокованому пристрої Основні дані користувача
kSecAttrAccessibleAfterFirstUnlock Доступ після першого розблоку (включаючи фоновий) Токени для фонових завдань
kSecAttrAccessibleWhenPasscodeSet Тільки при наявності пас-коду, з біометрією Ключі шифрування, приватні ключі
kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly Як AfterFirstUnlock, але не синхронізується Auth-токени (рекомендується)

Правильне налаштування через Security framework

Базовий патерн запису:

let query: [String: Any] = [ kSecClass as String: kSecClassGenericPassword, kSecAttrService as String: "com.example.app.auth", kSecAttrAccount as String: "access_token", kSecAttrAccessible as String: kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly, kSecValueData as String: tokenData, kSecAttrAccessGroup as String: "TEAMID.com.example.shared" // якщо потрібна App Group ] 

kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly — правильний вибір для більшості токенів: доступний після першого розблоку після перезавантаження, не синхронізується в iCloud, не переноситься на інший пристрій. Якщо потрібна синхронізація між пристроями користувача (наприклад, пароль від нотаток) — тоді kSecAttrAccessibleWhenUnlocked з kSecAttrSynchronizable: kCFBooleanTrue. Але для auth-токенів iCloud Keychain небажана — компрометація одного пристрою компрометує всі.

Для читання з оновленням (upsert) — спочатку SecItemUpdate, при помилці errSecItemNotFoundSecItemAdd. Не робіть SecItemDelete + SecItemAdd — це створює race condition в багатопотоковому середовищі, що може призвести до дублювання записів.

Як захистити дані біометрією через LocalAuthentication?

Якщо потрібна біометрія перед доступом до даних (ключі шифрування, приватні ключі), використовуйте наступний підхід:

let access = SecAccessControlCreateWithFlags( nil, kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly, .biometryCurrentSet, // .userPresence якщо потрібен fallback на пасскод nil )! 

Прапорець .biometryCurrentSet інвалідизує запис при зміні біометрії (новий відбиток, перехід на Face ID) — це навмисна поведінка для високосекретних даних. Для менш критичних .biometryAny зберігає доступ після додавання нових відбитків. Зверніть увагу: якщо використовуєте .biometryCurrentSet, при оновленні iOS може знадобитися повторна авторизація.

Що входить до нашої роботи

  • Аудит поточного зберігання: перевірка UserDefaults, NSKeyedArchiver, плейн-тексту у файлах. Виявляємо до 80% джерел потенційних витоків.
  • Проєктування KeychainService: вибір правильного kSecAttrAccessible, налаштування App Group, підтримка біометрії. Скорочуємо час інцидентів на 70%.
  • Реалізація обгортки навколо Security framework з протоколом KeychainService для тестованості.
  • Unit-тести та інтеграційні тести на симуляторі.
  • Міграція існуючих даних без втрати сесії.
  • Документація моделі загроз та інструкція для команди.
  • Навчання команди роботі з Keychain.
  • Підтримка протягом місяця після впровадження.

Покроковий процес нашої роботи

  1. Аудит поточного зберігання — перевірка всіх UserDefaults, NSKeyedArchiver, плейн-тексту у файлах. Виявляємо до 80% джерел потенційних витоків.
  2. Проєктування KeychainService — вибір правильного kSecAttrAccessible, налаштування App Group, підтримка біометрії. Скорочуємо час інцидентів на 70%.
  3. Реалізація — обгортка навколо Security framework з протоколом KeychainService для тестованості.
  4. Unit-тести — InMemory реалізація для юніт-тестів, інтеграційні тести на симуляторі.
  5. Міграція — плавний перенос існуючих даних без втрати сесії.
  6. Документація — опис моделі загроз та інструкція для команди.

Строки та вартість

Строки: від 1 до 3 днів залежно від обсягу даних та необхідності біометрії. Наприклад, проста заміна UserDefaults для одного типу даних — близько дня. Повний аудит + App Group + біометрія — до трьох днів. Вартість розраховується індивідуально після безкоштовної оцінки вашого проєкту.

Оцінимо ваш проєкт безкоштовно — зв'яжіться з нами, і ми запропонуємо оптимальне рішення. Отримайте консультацію вже сьогодні.

Чому варто довірити налаштування професіоналам?

Більше 5 років досвіду розробки iOS-додатків, десятки успішних проєктів з Keychain, сертифіковані інженери Apple. Ми гарантуємо, що після наших змін ваш додаток пройде рев'ю App Store (Section 4.2, 5.1) і не матиме проблем з безпекою даних.

Порівняння Keychain з альтернативами

Сховище Безпека Продуктивність Юніт-тести Синхронізація
Keychain Висока (шифрування, Secure Enclave) Середня (syscall) Через мок Через iCloud Keychain
UserDefaults Низька (plain plist) Висока Нативно Через iCloud
Файли в Documents Середня (пісочниця) Середня Через mock Вручну

Докладніше про пристрій Keychain читайте в офіційній документації Apple: Apple Keychain Services.