Подтвердить что ты не робот

Android: Хорошо ли хранить токен аутентификации в общих настройках?

У меня есть приложение, которое общается с сервером. Когда пользователь входит в приложение, токен аутентификации разбивается на сервер и сохраняется в SharedPreferences приложения, и всякий раз, когда приложение запрашивает данные из веб-службы, токен аутентификации проверяется.

Мой вопрос: безопасно ли хранить токен аутентификации в SharedPreferences? Я спрашиваю, потому что пользователь с привилегиями root может получить доступ к настройкам, извлечь токен и использовать его.

Есть ли в любом случае больше безопасности в этом отношении?

4b9b3361

Ответ 1

Короче говоря, да, это вполне разумная вещь.

Лучшее, что вы можете сделать, - это только запутывание. Если вы храните токен в памяти, пользователь root может заглянуть в него. Если вы зашифруете его, вам также придется хранить ключ шифрования на устройстве, иначе вы не сможете использовать токен… и ключ может быть украден так же легко, как токен.

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

В Android 4.3 появился Android Keystore. Это якобы обеспечивает надежное хранилище для криптографических ключей. Это можно использовать для хранения ключа, который используется для расшифровки зашифрованного токена, хранящегося традиционными методами. Однако ссылка, на которую ссылаются, не упоминает о том, как корневое устройство влияет на безопасность этого.

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

Ну, "невозможно" - это сильное слово. Это лучше сказать как "неосуществимое". Это означает, что вам понадобится что-то вроде электронного микроскопа для сканирования битов, слитых с SoC, обеспечивающим TEE. Если вы относитесь к тому типу людей, чьи данные заслуживают такого внимания, у вас, вероятно, большие проблемы.

Ответ 2

Если есть опасение, что токен может быть прочитан из SharedPreferences, хорошее эмпирическое правило - обеспечить определенный уровень запутывания для сохраняемых данных.

Этот ответ обрисовывает в общих чертах простой класс, чтобы запутать данные SharedPreferences: Какой способ хранения пользовательских настроек наиболее подходит для приложений Android?