Как и многие люди, я разрабатываю приложение с общей кодовой базой (Windows Store + Android + MonoTouch + [позже] WP8).
Кроме того, как и во многих приложениях, у меня есть локальное состояние, которое необходимо сохранить для этого приложения.
Одной частью информации, которую я храню, является токен аутентификации для пользователя, который выполнил вход. На платформе Windows Store я сохранил это хранилище со смесью параметров роуминга (ApplicationData.Current.RoamingSettings
) для вспомогательных данных токена (имя пользователя и дата выпуска) и PasswordVault
для фактического значения токена. Таким образом, токен защищен от интроспекции уровня ОС, поскольку он зашифрован ОС.
Теперь я реализую один и тот же интерфейс для своей сборки MonoDroid, и я не вижу способа, предоставляемого платформой, для хранения данных, которые могут быть дешифрованы только моим приложением - так же, как и хранилище паролей может использоваться для приложений Store.
В результате на данный момент я просто использую интерфейс Android.Content.ISharedPreferences
с помощью метода Application.Context.GetSharedPreferences
для чтения и записи этих значений.
Как я исхожу в своем предположении, что платформа (MonoDroid или Android) не предлагает защищенного хранилища OOB? Является единственной альтернативой внедрению шифрования в приложении - что, конечно же, потребует выкидывания ключа шифрования в код? Или я могу захватить сертификат, используемый для подписания приложения, и использовать его в качестве ключа?
В конце концов, это не конец света, если я не могу зашифровать эти данные, так как токен ограничен во времени, но было бы неплохо, если бы я мог сделать это правильно!