Защита данных с помощью Core Data в iOS

У меня есть пара проблем с защитой данных в моем приложении:

1) Мне нужно зашифровать все данные, которые я храню, с помощью Core Data, но я не нахожу отправной точки для этого. В Core В Руководстве по программированию данных говорится, что:

Core Data не дает никаких гарантий относительно безопасности постоянных хранилищ из ненадежных источников и не может определить, были ли файлы изменены злонамеренно. Хранилище SQLite предлагает немного лучшую безопасность, чем хранилища XML и двоичных файлов, но его не следует считать безопасным по своей сути. Обратите внимание, что вам также следует учитывать безопасность метаданных магазина, поскольку данные, заархивированные в метаданных, могут быть изменены независимо от данных магазина. Если вы хотите обеспечить безопасность данных, вам следует использовать такую ​​технологию, как зашифрованный образ диска.

Это не дает мне понять, что мне делать ... Я также посмотрел на Обзор безопасности Но этот документ, похоже, не касается Core Data. Тем не менее, они упоминают Data Protection для защиты файлов, но я не уверен, что это именно то, что я действительно ищу ... следует ли мне использовать Data Protection для SQLite файла, с которым работает Core Data?

Мне нужно руководство о том, как я могу зашифровать все Core Data сохраненные данные, пожалуйста

2) Что лучше - хранить пароли пользователей в связке ключей, а не шифровать и хранить их с помощью Core Data?

заранее спасибо


person AppsDev    schedule 09.09.2014    source источник
comment
Этот вопрос и ответ должен помочь вам настолько, насколько шифрование.   -  person trevorj    schedule 09.09.2014


Ответы (4)


Начиная с iOS 5, в постоянных хранилищах Core Data по умолчанию используется защита данных для шифрования данных. Из примечания к выпуску iOS 5:

Для приложений, созданных для iOS 5.0 или более поздних версий, постоянные хранилища теперь по умолчанию хранят данные на диске в зашифрованном формате. Уровень защиты по умолчанию предотвращает доступ к данным до тех пор, пока пользователь не разблокирует устройство в первый раз. Вы можете изменить уровень защиты, назначив настраиваемое значение ключу NSPersistentStoreFileProtectionKey при настройке постоянных хранилищ. Дополнительные сведения о защите данных, которые появились в iOS 5.0, см. В разделе «Улучшения защиты данных».

Это также рассматривается в сессии WWDC 2011 «Что нового в Core Data».

Рекомендуется хранить имена пользователей и пароли в связке ключей. Если вы храните имя пользователя и пароль для удаленной службы (например, HTTP-сервера, FTP-сервера и т. Д.), Предпочтительно использовать связку ключей через API NSURLCredentialStorage.

person quellish    schedule 09.09.2014

Проект "encrypted-core-data" имеет ограничения для средних и сложных данных. модели. В моем приложении для iOS у нас были отношения «многие ко многим» и отношения «один ко многим» между определенными объектами.

Код моста (код, соединяющий основные данные с SQLCihper) имеет недостатки, например, не имеет реализации NSOrderedSet. Для нас изменение кода моста было дорогостоящим.

Поэтому мы решили вместо этого зашифровать конфиденциальные данные в столбце. Таким образом, для этого мы использовали встроенные возможности ядра данных transformable attributes и использовали криптографическую библиотеку для шифрования атрибута объекта. Эта возможность шифрует данные, когда они поступают в столбец, и расшифровывает их при чтении. Это делается автоматически.

Это приводит к проблемам с производительностью, когда мы запрашиваем данные по нескольким строкам для отображения в виде списка. Чтобы решить эту проблему, мы затем восстанавливаем тип столбца до обычного типа string, а затем вручную выполняем шифрование и дешифрование в коде, но только при необходимости. Мы также используем временный атрибут в модели для хранения расшифрованной формы. Это помогает нам восстановить производительность до приемлемого уровня.

Я все еще ищу лучший способ зашифровать всю базу данных при использовании основных данных.

person Kashif    schedule 04.03.2015

Вы можете использовать что-то вроде encrypted-core-data, которое является аксессором Core Data. оболочка вокруг SQLite Cipher.

Это подкласс NSIncrementalStore, который взаимодействует с зашифрованной базой данных.

Если вы просто храните пароли, то цепочка для ключей - лучший вариант, но если вы хотите зашифровать хранилище Core Data, то вариант выше - лучший вариант.

person Rich    schedule 09.09.2014

«2. Должно ли быть лучше хранить пароли пользователей в связке ключей, а не шифровать и хранить их с помощью Core Data?»

Да, именно для этого и нужен брелок. Вероятность того, что вы сможете создать более безопасное хранилище, чем связка ключей, минимальна. Даже в случае "взломанного" iOS все еще есть тайминги безопасности, которые нельзя обойти, минимальное время на попытку доступа.

person zaph    schedule 09.09.2014