Это действительно все зависит от того, насколько безопасным вам нужно или вы хотите, чтобы ваше приложение было, и насколько чувствительны эти учетные данные. Поскольку хранить и извлекать их со стороны сервера нельзя, лучше всего встраивать их где-то в коде. APK очень легко декомпилируются, поэтому ваши учетные данные всегда будут так или иначе доступны. На самом деле вопрос в том, насколько сложным должен быть процесс реверса.
Оттуда учетные данные будут извлечены как BuildConfig.FIELD_NAME. Могу ли я быть на 100% уверен, что они не могут быть извлечены из apk при обратном проектировании?
Я на 100% уверен, что его можно получить :). Java не будет зашифровывать какие-либо строки, и все они будут храниться в виде необработанного текста в файлах dex, готовые для использования в grep'd.
Оттуда ваши следующие шаги будут шифровать ключи в коде, используя статический ключ. Некоторые инструменты сделают это за вас, например DexGuard, Dasho, Dexprotector - вы также можете придумать свое собственное решение. Эта статья объясняет это хорошо.
Имейте в виду, что как ваше собственное решение, так и решение, предоставленное сторонним инструментом, может оказаться легко изменить: см. этот пример для DexGuard. Также обратите внимание, что при расшифровке во время выполнения эти учетные данные будут храниться в оперативной памяти устройства, что позволяет отладчику легко их читать.
Ваша следующая лучшая ставка - использовать зашифрованные строки внутри собственного кода: сложнее повернуть и отследить, но все же выполнимо.
Затем вы можете использовать криптографию whitebox, опять же со сторонними инструментами, такими как предложенные Inside Secure. Это будет по существу смешивать как алгоритм шифрования, так и ключ с обфусцированным нативным кодом, что может затруднить обратное преобразование и отладку методов шифрования / дешифрования. Здесь вы будете включать только зашифрованные учетные данные в ваше приложение, и они будут надежно дешифрованы внутри whitebox. Белый ящик, как правило, очень безопасен (но не невозможно взломать), но после расшифровки учетные данные будут храниться в памяти устройства. Это защитит вас от простой декомпиляции.
Тогда ... Я не думаю, что вы можете пойти гораздо дальше, не задействуя аппаратное решение (KeyStore, встроенный безопасный элемент) и сервер для резервного копирования всего.