Безопасность и SQLite в Android

#android #security #sqlite

#Android #Безопасность #sqlite

Вопрос:

Я разрабатываю видеоигру для Android. Это будет онлайн-игра, которая сохранит статистику пользователя, достижения, объекты и т.д. в локальной базе данных SQLite.

Думая о безопасности… Я читал, что пользователь может редактировать все свои базы данных, сохраненные на корневом устройстве Android. Я бы не хотел, чтобы пользователь мог редактировать базу данных игры.

Итак, что я могу сделать? Есть ли какой-нибудь вариант сделать базу данных действительно безопасной? Пароль? Шифрование?

Спасибо

Комментарии:

1. Для этого нет действительно безопасного способа: на корневом устройстве ваше приложение также может быть прочитано, включая, например, пароль, который вы используете для шифрования. Однако шифрование немного усложнит задачу злоумышленнику.

Ответ №1:

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

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

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

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

Редактировать:

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

Комментарии:

1. Меня не волнует, может ли пользователь прочитать BD, но я не хочу, чтобы они могли его изменять… У меня тоже есть сервер, так что, могу я что-то с этим сделать? Я имею в виду, я мог бы сохранить пароль на сервере и, когда я вхожу в игру, получить его и войти с ним в базу данных … может ли это быть решением?

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

Ответ №2:

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

Однако я бы не стал слишком сходить с ума, если у вас нет серьезной игры.

Ответ №3: