2016-04-10 2 views
5

Какое лучшее место для хранения ключей API, ключей шифрования базы данных и т. Д. В коде приложения, чтобы никто не мог его получить, декомпилировав код? Я использовал proguard для обфускации кода, но он не работал на Strings.Какое место лучше всего хранить в приложении для Android?

+2

Этот вопрос был [задан уже] (http://stackoverflow.com/questions/14570989/best-practice-for-storing -private-api-keys-in-android) – Dmitriy

+0

Возможный дубликат [Лучшая практика хранения частных ключей API в Android] (https://stackoverflow.com/questions/14570989/best-practice-for-storing-private-api -keys-in-android) – Suhaib

ответ

2

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

Для аутентификации серверам, ваше приложение должно, вероятно, получить токены аутентификации (или аналогичные) путем обмена введенными пользователем учетных данных для таких токенов аутентификации или путем получения этих токенов auth из AccountManager или аналогичных API. Вы также можете использовать SafeNet Attest API (https://developer.android.com/training/safetynet/index.html), чтобы подтвердить свои серверы, что это приложение подписано с вашим ключом подписи, который делает запрос.

Для шифрования базы данных приложение может генерировать случайный ключ шифрования на устройстве, связанный с введенными пользователем учетными данными или хранящийся в Android Keystore, или просто полагаться на защиту, предлагаемую Android для приложений. Это зависит от вашей модели угрозы (например, почему вы считаете, что вам нужно шифровать базы данных?)

+0

Как это препятствует тому, чтобы приложение-мошенник выдавало себя за ваше приложение при разговоре с сервером? – pete

+0

Ваш сервер может потребовать, чтобы все запросы (или логин или аналогичные) содержали токен/утверждение аттестата SecurityNet. Затем сервер будет проверять, что (1) аттестованный токен/утверждение действительно был выпущен инфраструктурой SafeNet Attest Google, и (2) извлечь имя пакета + подпись сертификата приложения из токена/утверждения и проверить, соответствуют ли они вашему приложению. По сути, ваш сервер будет доверять тому, что очень сложно ввести в заблуждение инфраструктуру SafeNet Attest (как на стороне клиента, так и на стороне сервера). –