Android: как защитить данные в базе данных SQLite?
В настоящее время я разрабатываю Android-игру, которая сохраняет данные в базу данных SQLite. Это не очень "чувствительные" данные, но я не хочу, чтобы пользователи могли изменять его (по понятным причинам игрового баланса, так как это было бы обманом). И довольно легко получить доступ и изменить SQLite db , когда ваш телефон укоренен (на рынке есть много приложений).
Так что я должен даже беспокоиться об этом или подумать, что пользователи с укоренившимся телефоном могут делать все, что захотят, включая обман и их выбор? Или я могу как-то зашифровать данные, которые я не хочу им изменять, или добавить контрольную сумму MD5 или что-то подобное?
Другим подходом было бы вообще отказаться от SQLite и использовать какие-то двоичные файлы с игровыми данными.
Пожалуйста, дайте мне знать, если некоторые из вас уже столкнулись с подобными проблемами, и какие подходы вы следовали, а также "хорошие практики" в сообществе разработчиков игр для Android.
Спасибо.
Ответы
Ответ 1
Доступ к корням для всех и безопасность взаимоисключающие.
Любое приложение или пользователь с правами root может читать и изменять каждый файл в вашей системе, а также всю основную память. Это не оставляет много мест для хранения потенциального ключа шифрования для базы данных.
Вы можете скрыть части ключа в исполняемых файлах, конфигурационных файлах и т.д., но все, что вы могли бы придумать, было бы не чем иным, как запутыванием и безопасностью безвестности.
Если пользователь предпочитает предоставлять root-доступ всем, это их решение, и это не ваша работа в качестве разработчика приложений, чтобы предотвратить любой вред, который может быть вызван.
Обновление:
Сохранение ключей API в Android, достаточно ли обфустация? - довольно похожая проблема - это защита ключей API, но такая же ситуация с вашими параметрами.
Ответ 2
sqlcipher для Android может помочь здесь.
https://guardianproject.info/code/sqlcipher/
Ответ 3
Я думаю, что на основе вашего требования лучший метод использует согласованность данных,
например MD5, счет и время, затем поместите счет и время и MD5 в таблицу, затем каждый раз, когда вы хотите использовать эту строку DB, проверьте MD5 оценки и времени, если один в БД и тот, который был рассчитан, одинаковы, строка согласована, иначе она была взломана!
Ответ 4
Вы можете найти свое счастье в файлах настроек. Посмотрите здесь