Цивільно-імперські послуги; структурне будівництво
Реалізація шифрування даних для зберігання даних чутливих Ios
Table of Contents
Розуміння шифрування даних на iOS
iOS реалізує шифрування на декількох шарах для захисту конфіденційних даних. На рівні апаратного забезпечення безпечне Enclave керує ключами шифрування та криптографічними операціями. На рівні операційної системи Data Protection] використовує шифрування рівня, що зберігає ключі шифрування до коду пристрою. Для конкретних даних розробники можуть використовуватися рамки, такі як CryptoKit, CommonCrypto та рамки безпеки для шифрування окремих записів, файлів або мережевих перевантажень.
Шифрування перетворює звичайний текст у ciphertext за допомогою алгоритму і ключа. Без правого ключа дані залишаються непрочитаними. Apple iOS Data Protection API автоматично зашифровує файли в іншому випадку, але розробники потребують чіткого шифрування для даних, що зберігаються за межами захищеної файлової системи — наприклад, у Core Data, UserDefaults або користувацьких кешах.
Ключове запровадження: шифрування конфіденційних даних, коли він переходить на пристрій, навіть якщо шифрування iOS включена за замовчуванням. Це забезпечує захист від фізичного доступу до пристрою, судового видобутку, або шкідливі програми, що працюють в одній пісочній коробці.
IOS Encryption Frameworks та API
Apple надає кілька криптографічних бібліотек. Вибираючи правильний, залежить від цілі розгортання та рівня контролю, необхідного для роботи.
CryptoKit – сучасний Swift API
Впроваджений в iOS 13, CryptoKit пропонує Swift-native інтерфейс для симетричної та симетричної криптографії, хешування та ключової угоди. Він використовує AES-GCM для автентичного шифрування, яке захищає як конфіденційність, так і цілісність. Нижче є типове шифрування та розшифрування шаблону:
import CryptoKit
func encryptSensitiveData(_ plaintext: String, using key: SymmetricKey) throws -> Data {
let inputData = Data(plaintext.utf8)
let sealedBox = try AES.GCM.seal(inputData, using: key)
return sealedBox.combined
}
func decryptSensitiveData(_ encryptedData: Data, using key: SymmetricKey) throws -> String {
let sealedBox = try AES.GCM.SealedBox(combined: encryptedData)
let decryptedData = try AES.GCM.open(sealedBox, using: key)
return String(decoding: decryptedData, as: UTF8.self)
}
Завжди зберігайте в Брелокі, не в UserDefaults або звичайний файл. Використовуйте з ], щоб зв'язати ключ до пристрою і присутності користувача.
ЗагальніCrypto - C-Based Гнучкість
Для додатків, які підтримують старі версії iOS або вимагають користувацького блоку, режимів cipher (наприклад, CBC з HMAC), CommonCrypto надає функції низького рівня C. Він підтримує AES, DES, 3DES та різні алгоритми хешування. Приклад шифрування AES-CBC:
#include <CommonCrypto/CommonCryptor.h>
- (NSData *)aes256Encrypt:(NSData *)plaintext withKey:(NSData *)key iv:(NSData *)iv {
size_t outLength;
NSMutableData *ciphertext = [NSMutableData dataWithLength:plaintext.length + kCCBlockSizeAES128];
CCCryptorStatus status = CCCrypt(kCCEncrypt, kCCAlgorithmAES, kCCOptionPKCS7Padding,
key.bytes, key.length, iv.bytes,
plaintext.bytes, plaintext.length,
ciphertext.mutableBytes, ciphertext.length,
&outLength);
if (status == kCCSuccess) {
ciphertext.length = outLength;
return ciphertext;
}
return nil;
}
Управління активами ручного управління векторами ініціалізації (IVS) та аутентифікації. Для автентичного шифрування пар AES-CBC з роздільною HMAC або перемикачем до AES-GCM через CryptoKit при можливості.
Рамки безпеки та ключ
Рамки безпеки надає послуги Keychain для безпечного зберігання ключів, сертифікатів та паролів. Використовуйте для зберігання ключів з суворими контрольними доступами (наприклад, для отримання доступу користувачів біометри). Безпечний Enclave може генерувати та зберігати приватні ключі для операцій ECC, забезпечуючи ключ ніколи не залишає апаратного забезпечення.
Реалізація шифрування для різних типів даних
Не всі дані потребують такої ж стратегії шифрування. Покрашайте підхід до того, як і де використовується інформація.
Зашифрування даних користувачів та Core
КористувачіДафроуси та Core Data зберігає файли, які не зашифровані. Для Core Data, увімкніть NSFileProtectionType] атрибут на файлі магазину. Для більш дрібної гранульації, зашифруйте індивідуальні атрибути або всі об'єкти перед збереженням:
- Використовуйте Core Data перетворюються атрибути з користувальницького трансформатора значення, який зашифрує / розшифровує на читання / виписку.
- Сфералізуйте весь керований об'єкт як JSON, зашифруйте його, і зберігайте ciphertext в бінарному атрибуті.
- Для користувачів, які не зберігають сировинні рядки, зашифруйте кожну вартість та зберігайте зашифровані дані.
Приклад зберігання зашифрованих даних у Користувача
let key = SymmetricKey(size: .bits256)
let data = "user_ssn".data(using: .utf8)!
let sealedBox = try AES.GCM.seal(data, using: key)
UserDefaults.standard.set(sealedBox.combined, forKey: "encrypted_ssn")
UserDefaults.standard.synchronize()
Шифрування файлів з захистом файлів
IOS пропонує методи захисту файлів: , , і . Встановити ці атрибути при створенні або переміщення файлів:
let fileURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!.appendingPathComponent("data.bin")
try FileManager.default.setAttributes([.protectionKey: FileProtectionType.complete], ofItemAtPath: fileURL.path)
У поєднанні захисту файлів з явним шифруванням, якщо дані повинні зберігатися захищеними навіть коли пристрій розблоковано. Наприклад, зашифрувати файл з ключем, що зберігається в Keychain і доступний тільки після автентифікації.
Шифрування мережевих даних (Транспортний шар безпеки)
Додаток Транспортна безпека (ATS) дотримується HTTPS за замовчуванням. Для користувацького підключення TCP використовуйте з TLS або реалізовувати SSL-пінінг для запобігання нападів на ман-всередині. Зашифруйте навантаження на шар програми для додаткового захисту-глибина: навіть якщо TLS є компромісом, дані залишаються захищені.
Основні практики управління
Зашифрування є лише міцним, оскільки ключове управління. Дотримуйтесь цих інструкцій щодо збереження безпеки:
- Генерейтові ключі з використанням криптографічно захищеного генератора випадкових чисел] – Використовуйте або .
- Стой ключі виключно в Keychain з відповідними атрибутами доступності: запобігає бекапуванню і зв'язує ключ до пристрою.
- Використовувати біометричну або переадресацію коду перед перерозподілом ключа – з ] верифікації користувачів.
- Rotate keys on the site or after the Security event – Перешифрувати дані з новими ключами та надійно видаляти старі ключі.
- Не вказаний ключ кодів] у вихідному коді або файлах конфігурації. Видаляє ключі від паролів користувачів, використовуючи функцію повільного видалення ключів (PBKDF2 або scrypt) при необхідності.
- Проведення захищеного енклара для симетричного генерування ключів – приватні ключі не можуть експортувати, запобігаючи ексфільтрації.
Для додатків, які використовують високочутливі дані, розглянемо , модуль безпеки програм (HSM)] через мережеві послуги, хоча це вводить затримки і вимагає підключення до Інтернету.
Ключове обертання та перешифрування
Коли ключ є компромісом або після визначеного періоду (наприклад, кожні 90 днів), обертається ключ. Це передбачає розшифрування всіх даних з старим ключем, створення нового ключа і перешифрування. Для великих даних реалізовано версію ключової схеми:
- Зберігайте ключовий ідентифікатор (наприклад, UUID) поряд з кожним зашифрованим записом.
- Збережіть відображення ідентифікаторів на реальні ключі в Keychain (розшифровано в іншому місці).
- Під час обертання додайте новий запис без негайного перешифрування всіх даних. Зашифруйте лізилі на доступі.
Відповідність та нормативні акти
Багато нормативних актів мандатного шифрування для чутливих даних. GDPR вимагає відповідних технічних заходів, а шифрування є визнаною методикою псевдонімізації. HIPAA] mandates шифрування ePHI на відпочинок і в транзиті. PCI DSS вимагає шифрування даних власників карток. У iOS, наступні принципи захисту даних Apple, поєднані з вимогами шифрування додатків, що задовольняє більшість вимог. Документація вашого впровадження шифрування, ключові політики життєвого циклу і перевірки для регулятора.
Референт офіційної документації Apple за останні рекомендації: Посібник із розробки CryptoKit , Keychain Services, і Захист конфіденційності користувачів]. Для галузевих інструкцій див. ]OWASP Mobile Security Testing Guide і NIST SP 800-175B - Cryptographic Standards.
Тестування та перевірка
Після здійснення шифрування, перевірте його правильно:
- Написати тести, які зашифрують та розшифрують відомі рівнинні елементи та стверджують результати.
- Випробування крайових випадків: порожні дані, дуже великі навантаження, і пошкоджені ciphertexts.
- Виконувати тестування безпеки за допомогою пристрою jailbroken для імітації сценаріїв атаки. Перевірити, що ключі залишаються недоступними без автентифікації.
- Використовуйте статичні інструменти для забезпечення не жорстких дисків або слабких алгоритмів.
- Перегляд журналів – ніколи не журнальний plaintext конфіденційні дані або ключі шифрування.
Висновок
Реалізація шифрування даних для конфіденційного зберігання даних iOS є багатошаровим процесом. Поєднання захисту файлів iOS, шифрування додатків з CryptoKit або CommonCrypto, і суворе управління ключем через Keychain і Secure Enclave розробники можуть значно зменшити ризик впливу даних. Відповідаючи правила, такі як GDPR і HIPAA вимагає документованого, перевіреного практики шифрування. Регулярне тестування та налаштування ключа забезпечують довгострокову безпеку. Інвестування в архітектуру надійного шифрування не тільки захищає дані користувачів, але і будує довіру і відповідає нормативним очікуванням.