Я унаследовал приложение, которое вызывает службы, защищенные ключом API, который, к сожалению, встроен в приложение. Очевидно, это не идеально, поэтому я хочу встроить ключ API в Android Keystore. В прошлом я использовал библиотеки, такие как https://github.com/scottyab/secure-preferences, в других приложениях Android, но в этом случае эта безопасность не пройдет аудит безопасности.
Читая это: https://medium.com/@ericfu/securely-storing-secrets-in-an-android-application-501f030ae5a3 Я понимаю все, кроме того, как получить ключ API в хранилище ключей изначально как часть сборки. В идеале я должен был бы вернуть ключ API как часть процесса входа в систему, чтобы он вставлялся во время выполнения, но, к сожалению, в настоящее время я не могу изменить службу входа в систему.
Я прочитал множество сообщений, таких как: Рекомендации по хранению и защите закрытых ключей API в приложениях, но большинство из них сосредоточено на том, чтобы ваши ключи не попадали в репозиторий исходного кода.
Итак, возникает вопрос: существует ли механизм сборки gradle (или любой другой механизм), который может вставлять определенный фрагмент данных в хранилище ключей Android во время сборки?
Is there a gradle build mechanism (or any mechanism) that can insert a specific piece of data into the Android Keystore at build time?
По определению это невозможно. AndroidKeyStore находится на устройствах Android пользователей, а не на машинах разработчиков. Во время сборки ваше приложение не находится на устройствах Android пользователей и не может с ними ничего делать.
@PerryHoekstra: Или вызывайте эти веб-службы не из вашего приложения, а со своего собственного сервера. Насколько это практично, зависит от характера веб-службы и от того, как вы ее используете. Вы можете использовать такие продукты, как DexGuard, чтобы попытаться затруднить злоумышленникам извлечение ключа API, упакованного в ваш APK, хотя «сложнее»! = «Невозможно». Будет ли работать ваш подход (ключ API в ответе на вход) зависит от того, как используется этот ключ API. Например, если ключ API должен быть в манифесте, ваш подход не подходит.
Спасибо за предложение, но я связан существующими в настоящее время службами (и их механизмами безопасности). Я рассмотрел подход обфускации, задокументированный в вопросе StackOver, на который я ссылался, но поскольку это не было полным доказательством, я не знаю, пройдет ли он проверку у аудитора безопасности организации.
Я так и думал. Итак, единственный способ надежно сохранить ключ API - это включить его как часть ответа процесса входа в систему и сохранить в AndroidKeyStore во время выполнения. Это подводит итог?