Что такое шифрование и как оно применяется в iOS?

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

Ответ

Шифрование — это криптографическое преобразование читаемых данных (открытого текста) в нечитаемый формат (шифротекст) с использованием алгоритма и секретного ключа. Обратный процесс — расшифрование.

Основные типы в контексте iOS:

  • Симметричное: Один ключ для шифрования и расшифрования (быстро, для больших данных). Алгоритмы: AES, ChaCha20.
  • Асимметричное: Пара ключей (публичный и приватный). Публичным шифруют, приватным расшифровывают (для обмена ключами, цифровых подписей). Алгоритмы: RSA, ECC.

Практическое использование с CryptoKit (iOS 13+):

import CryptoKit

// 1. Симметричное шифрование (AES-GCM)
let plainText = "Конфиденциальные данные"
let plainData = Data(plainText.utf8)
let key = SymmetricKey(size: .bits256) // Генерация ключа

// Шифрование
let sealedBox = try! AES.GCM.seal(plainData, using: key)
// sealedBox.combined содержит шифротекст и nonce

// Расшифрование
let restoredBox = try! AES.GCM.SealedBox(combined: sealedBox.combined!)
let decryptedData = try! AES.GCM.open(restoredBox, using: key)
let decryptedText = String(data: decryptedData, encoding: .utf8)!

// 2. Хеширование (для проверки целостности)
let hash = SHA256.hash(data: plainData)
print(hash.description) // Отпечаток данных

Критически важные практики безопасности в iOS:

  1. Хранение ключей: Никогда не храните ключи в UserDefaults, plist или коде. Используйте Keychain Services или SecureEnclave (для приватных ключей).
  2. Целостность данных: Используйте аутентифицированные режимы шифрования (как AES-GCM в примере), которые одновременно обеспечивают и конфиденциальность, и целостность.
  3. Передача данных: Все сетевые запросы должны использовать HTTPS (TLS). Для дополнительной защиты можно применять сквозное шифрование (E2EE).
  4. Биометрия и пароли: Используйте LAContext (Local Authentication) для аутентификации пользователя, а не изобретайте свои методы.