2015-04-28 2 views
0

Мне нужно разработать приложение как для iOS, так и для Android. Это приложение использует небольшую базу данных sqlite с конфиденциальными данными, и в зависимости от ввода пользователя она обрабатывает некоторые данные. После того, как этот процесс будет выполнен, база данных больше не будет доступна, если пользователю не потребуется вводить новый вход (это не вероятно, что это происходит).Самая безопасная стратегия для мобильной базы данных

Поскольку база данных имеет конфиденциальные данные, я должен ее защитить. Я знаю, что невозможно получить полную защиту, но я хотел бы сделать жизнь более трудной для возможного злоумышленника.

И так как я не знаю слишком много о безопасности, я не уверен, что было бы лучшей альтернативой с учетом «трудности/безопасности».

Я думал, что в двух альтернатив:

1) Включить базу данных в приложениях и зашифровать или запутать его.

Но я думаю, что получить базу данных с корневым Android не составит труда.

2) Храните базу данных на сервере, каждый раз, когда пользователь вводит ввод, приложение загружает базу данных, процесс выполняется, после чего я удаляю базу данных из приложения.

Но процесс занимает 5-10 минут, и, возможно, этого достаточно, чтобы получить базу данных из приложения, поэтому мне пришлось бы добавить такую ​​же защиту, как в 1), плюс защиту на сервере.

Какой был бы лучший вариант (сложный/безопасный)? Будут какие-то другие варианты?

Я пробовал несколько поисков Google, но я запутался со всей этой информацией, и я хотел бы попробовать с огромным признанием этого сообщества.

ОБНОВЛЕНО:

Ну, читая ваши ответы я склонен иметь бэкенд и не загружать базу данных в приложении. Это не предпочтительное решение клиента, но, похоже, это лучше всего, поэтому я попытаюсь убедить его. В любом случае, из-за типа процесса, которое приложение должно делать, я не уверен, возможно ли это с помощью бэкэнд. Поскольку это совершенно иной вопрос, который я хотел бы спросить его в другом потоке: https://stackoverflow.com/questions/29942688/remote-sqlite-queries-from-app

NEW UPDATE:

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

SERVER -> моя база данных SQLite & веб-сервисы PHP

DEVICE -> а TXT файл с вводимыми пользователем (20Mb)

  1. Device: В устройстве текстовый файл сжат (10Мб)
  2. Устройство: приложение отправляет txt-файл на сервер через веб-службу POST.
  3. Сервер: Этот txt-файл хранится на сервере.
  4. Сервер: этот файл txt распаковывается.
  5. Сервер: Этот txt-файл загружается в новую таблицу InputTable внутри моей базы данных sqlite.
  6. Сервер: Создана новая таблица UserFinalDataTable (почти 10000 строк), создающая множество запросов с использованием InputTable и остальной части моей базы данных.
  7. Сервер: UserFinalDataTable преобразуется в JSON и отправляется обратно на устройство в качестве ответа на веб-службу, вызываемой на этапе 2.
  8. Устройство: приложение получает этот JSON и преобразует его в что-то полезное для приложения.

Возможно ли это или любые (если не все) шаги выполнить?

ответ

-1

Ни то, ни другое. Наиболее безопасным способом является сохранение базы данных на сервере и доступ к ней только через webservice с надлежащей аутентификацией учетной записи. Если вы отправляете какие-либо данные клиенту, он получит достаточно мотивированного злоумышленника. В случае всего файла базы данных было бы тривиально укоротить устройство и прочитать его. И если вы включите его, SQLite не сможет его прочитать (не говоря уже о том, что ключ дешифрования был бы локальным, так что быстрая обратная инженерия).

+0

И сервер не может быть взломан? –

+0

Я боялся этого. Я отказался от этого параметра, потому что мой клиент не хочет иметь поддержку бэкэнд, он принимает только «backend» minimun, только для загрузки базы данных, он не хочет никакой аутентификации пользователя или хранения каких-либо пользовательских данных. – Wonton

+0

Да @BojanKseneman, конечно, но я всегда думал, что взломать Android-приложение проще (безусловно), чем взломать сервер. Из-за этого я думаю об этом. – Wonton

-1

Самая безопасная стратегия, которую вы говорите .... сервер с сервером db и веб-сервисом.

-1

Используйте SQLCipher, чтобы зашифровать свой дБ.

Он работает либо на прошивке и Android

+0

Как ключ, доступный для приложения, безопасным образом? – zaph

+0

@zaph Я не понимаю вашего комментария. Вы можете объяснить? –

+0

Зашифрованы и дешифрованы данные на одном устройстве, сервере или устройстве iOS? Если нет, то как они используют один и тот же ключ безопасным образом? – zaph

0

Самого безопасный и надежный способ для хранения базы данных на сервере, шифруется с помощью алгоритма симметричного шифрования. Еще лучше, если вы также используете асимметричный алгоритм шифрования, если это возможно, с какой-то скрытой секретностью, в случае взлома вашего сервера. Все зависит от того, какую степень безопасности вы хотите достичь.

Другим способом было бы сохранить базу данных на устройстве с помощью ключа шифрования сервера, при необходимости отправить базу данных на ваш сервер для дешифрования и вернуть дешифрованный вывод. Хотя это не имеет смысла в большинстве ситуаций, особенно ваших.

Смежные вопросы