Мы создаем приложение для Android, игру-викторину, в которую мы хотели бы кешировать вопросы + ответы, когда пользователь не в сети. Проблема в том, что нам нужно будет скрывать эти данные от пользователя, пока она не ответит на вопросы. В противном случае обман был бы очень легким, что повредило бы игре. Затем можно извлечь все вопросы + ответы и автоматически отправить ответы на сервер API.
Наиболее удобный способ - извлечь ключ или секрет с нашего сервера во время установки, спрятать его «где-то» и использовать для связи с сервером, а также для шифрования вопросов + ответов в хранилище. Но очевидно, что скрывать это «где-то» не является безопасной концепцией.
Я немного исследовал, и кажется, что надежное шифрование невозможно в таких случаях, потому что приложение должно «знать» секрет (будь то сертификат, пароль + соль или что-то еще) или, по крайней мере, где оно можно найти, и это можно извлечь путем декомпиляции. Тем не менее, нам было бы хорошо, если бы это было достаточно сложно сделать.
Вопрос состоит в следующем: Знаете ли вы, как обычным пользователям затруднить извлечение секрета из APK - то есть сделать почти невозможным написание автоматического извлечения ключей?
Мои лучшие догадки на данный момент:
- Скрыть некоторую информацию в базе данных и использовать ее в качестве соли для ключа
- Добавить несколько бит информации с устройства в виде соли (IMEI, адрес электронной почты, серийный номер, ...) - возможно, вместе с обфускацией трудно будет понять, как применяется соль?