Защита информации базы данных iOS

Я занят написанием коммерческого электронного приложения типа словаря слов для iPhone и iPad iOS7. Ценность приложения действительно заключается в базе данных, над которой я работал много лет, а не в самом приложении. База данных очень большая (195 МБ на компьютере с Windows до преобразования во что-то вроде SQLLite), и я хотел бы знать, как лучше всего защитить данные в ней, чтобы приложение могло их читать, но другие люди не могут читать/получать Это. Кажется, что большинство мобильных разработчиков используют SQLLite, но данные можно легко прочитать с помощью обычного шестнадцатеричного редактора.

Из этого и других форумов я понял, что SQLCipher — хороший инструмент. Моя проблема в том, что КАЖЕТСЯ, что SQLCipher шифрует базу данных, а затем расшифровывает ее, когда ее нужно прочитать во временном файле, а затем снова шифрует ее. Если это так, то у меня две проблемы.

  1. База данных очень большая, и ее расшифровка каждый раз и повторное шифрование сделают приложение очень медленным.
  2. Что мешает хакеру прочитать/скопировать расшифрованный (временный) файл, когда он доступен даже в течение короткого времени?

Правильно ли я понимаю, что SQLCipher работает правильно, если да, то есть ли какие-либо другие инструменты/методы для шифрования/защиты базы данных, чтобы программа по-прежнему могла читать ее с помощью SQL-запросов, не делая данные так легко доступными каким-либо образом, или какие-либо другие предложения, которые вы должно быть?

Спасибо


person JayCee    schedule 18.12.2013    source источник


Ответы (1)


Согласно этой странице: http://sqlcipher.net/design они не расшифровывают вашу базу данных в целом, так что ответ на ваш вопрос № 1 - нет. Они заявляют о накладных расходах на 5-15% по сравнению со стандартной производительностью SQLite.

Что касается № 2 - SQLCipher будет расшифровывать базу данных на страницах, поэтому теоретически кто-то может получить доступ к этой странице в памяти в расшифрованном виде. Однако это справедливо для любого используемого вами метода шифрования. Просто подумайте об этом - даже если вы расшифруете полную базу данных, вашему приложению потребуется каким-то образом отобразить/получить доступ к некоторым данным из нее в какой-то момент. И в этот момент данные должны быть расшифрованы. Вопрос здесь только в том, сколько данных будет расшифровано в данный момент.

Другая альтернатива, которая у вас есть, - попытаться реализовать шифрование/дешифрование самостоятельно, используя стандартный SQLite и стандартную библиотеку шифрования. Вы можете, например, зашифровать каждую строку (или даже поля с конфиденциальными данными) по отдельности и расшифровать их при необходимости, но опять же, в определенный момент эта конкретная строка будет в памяти расшифрована и видна хакеру.

person sha    schedule 18.12.2013
comment
Что, если я хочу зашифровать текстовый файл, возможно ли это? - person PeterK; 19.12.2013
comment
Конечно. Вы можете зашифровать текстовый файл, но вам нужно будет расшифровать его в памяти вашего приложения, верно? - person sha; 19.12.2013
comment
Спасибо за ваш ответ. Если это происходит только на уровне памяти или на уровне памяти, я вполне доволен, если весь файл не расшифрован как временный файл, который кто-то может просто скопировать, пока он находится в расшифрованном формате. Мне было интересно, является ли SQLLite самым простым форматом базы данных для работы в iOS7, или, может быть, есть другой формат со встроенными функциями шифрования, которому вообще не нужно что-то вроде SQLCipher? - person JayCee; 19.12.2013
comment
С SQLite довольно легко работать. CoreData может быть другим вариантом. - person sha; 19.12.2013