Ответ 1
Короче говоря, да, это вполне разумная вещь.
Лучшее, что вы можете сделать, - это только запутывание. Если вы храните токен в памяти, пользователь root может заглянуть в него. Если вы зашифруете его, вам также придется хранить ключ шифрования на устройстве, иначе вы не сможете использовать токен… и ключ может быть украден так же легко, как токен.
Если у кого-то есть root на устройстве, все ставки отключены. Не оптимизируйте для этого случая. Если ваше приложение обладает повышенной степенью безопасности, не позволяйте ему работать на корневых устройствах или реализуйте функцию удаленной очистки, при которой пользователь может сообщить о краже своего устройства, а вы можете аннулировать токен на сервере.
В Android 4.3 появился Android Keystore. Это якобы обеспечивает надежное хранилище для криптографических ключей. Это можно использовать для хранения ключа, который используется для расшифровки зашифрованного токена, хранящегося традиционными методами. Однако ссылка, на которую ссылаются, не упоминает о том, как корневое устройство влияет на безопасность этого.
ОБНОВЛЕНИЕ 2018: Большинство современных устройств Android имеют аппаратные хранилища ключей через доверенную среду выполнения (TEE), предоставляемую SoC. Это делает невозможным (см. ниже) для хакера получение главного ключа хранилища ключей, который в противном случае был бы необходим для расшифровки ключей, хранящихся в хранилище ключей Android.
Ну, "невозможно" - это сильное слово. Это лучше сказать как "неосуществимое". Это означает, что вам понадобится что-то вроде электронного микроскопа для сканирования битов, слитых с SoC, обеспечивающим TEE. Если вы относитесь к тому типу людей, чьи данные заслуживают такого внимания, у вас, вероятно, большие проблемы.