Как безопасно хранить пароли и чувствительные данные в iOS-приложении?

«Как безопасно хранить пароли и чувствительные данные в iOS-приложении?» — вопрос из категории Софт-скиллы, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый пример ответа, который можно адаптировать под свой опыт.

Ответ

Единственный безопасный способ — использование Keychain Services. Это зашифрованное системное хранилище, защищенное даже на устройствах с jailbreak.

Пример сохранения пароля:

import Security

let password = "secret123".data(using: .utf8)!
let query: [CFString: Any] = [
    kSecClass: kSecClassGenericPassword,
    kSecAttrAccount: "userAccount",
    kSecValueData: password
]
let status = SecItemAdd(query as CFDictionary, nil)
// Проверяем статус: status == errSecSuccess

Практические подходы:

  • Использование оберток: KeychainAccess или собственный безопасный враппер.
  • Для работы с биометрией (Face ID/Touch ID) — LAContext и Secure Enclave.
  • Никогда не хранить в UserDefaults, .plist-файлах, базе данных или в виде строк в коде.

Правило: Любые долгосрочные секреты — только в Keychain. Временные данные (например, токен сессии) можно держать в памяти (RAM).