Надо шифровать определенные данные. Если ключ и данные сохранять на устройстве - взломают без проблем.
Была мысль результат шифрования сохранять на устройстве, а ключ передавать на сервер. Но злоумышленник может декомпилировать приложение и посмотреть что откуда берется - то же не вариант.
Была мысль использовать в качестве ключа какой-либо пин-код (чтоб юзер вводил каждый раз) - но это обычно 4-6 цифр - там перебором элементарно вычислить.
Поэтому встает вопрос: можно ли надежно зашифровать и хранить данные на устройстве, так, чтоб при рут-достпе к устройству злоумышленник не мог расшифровать?
Александр: я могу хранить их и на сервере, а ключ на устройстве. Но по сути злоумышленник может так же скачать их и расшифровать. Единственный надежный способ, как мне представляется, это хранить и ключ и данные на сервере, и все манипуляции с ними выполнять на сервере, а приложению отдавать лишь токен, но в мем случае данные должны обрабатываться приложением...
mitaichik: В чем проблема хранить данные на сервере и отдавать из приложению по мере необходимости? Просто не храните данные ни в SharedPreferences, ни в DB, ни в каких-либо других местах. Или Вы боитесь, что злоумышленник в рантайме приложения будет декомпилировать .dex, чтобы вытащить оттуда данные?
100% способа защиты при наличии рута - нет.
Это факт, есть только способы осложнить декомпиляцию и сделать ее не выгодной с точки зрения человеко-часов.
Можете подумать в сторону Android NDK еще.
По факту при наличии рута в любом случае можно найти лазейку декомпилировав приложение и отключив например таймаут на количество неверно введенных паролей. Именно по этому тот же Сбербанк клиент при наличии рута на телефоне не позволяет производить денежные операции.
А вообще вы ответили на свой вопрос - используйте пинкод, а чтоб его не взломали делайте таймаут. Либо используйте сложный ключ, зашифрованный пинкодом. При определенном неверном количестве ввода пинкода, пароль удаляется безвозвратно.
Так с Android 4.4 есть опция шифровать хранилище. А сбер скорее всего палит su и считает устройство порутеным. поставь на su чмод для всего и убери стики бит , потом можешь его перед запуском переименовывать например в su2 и смотреть палит ли его сбер =)