通过Monodroid开箱即可在Android中获得安全存储吗?

像许多人一样 – 我正在开发一个共享代码库的应用程序(Windows Store + Android + MonoTouch + [更高版本] WP8)。

此外,与许多应用程序一样,我有地方状态,我需要坚持这个应用程序。

我存储的一条信息是login用户的身份validation令牌。 在Windows Store平台上,我已经实现了这个存储,这个存储包含令牌的辅助数据(用户名和发布date)的漫游设置( ApplicationData.Current.RoamingSettings )和实际令牌值的PasswordVault 。 因此令牌被操作系统级内省保护,因为它被操作系统encryption。

现在我正在为我的MonoDroid构build实现相同的接口,而且我看不到由平台提供的任何方式来存储只能由我的应用程序解密的数据 – 就像可以使用密码库一样为商店应用程序。

因此,目前,我只是通过Application.Context.GetSharedPreferences方法使用Android.Content.ISharedPreferences接口读取和写入这些值。

所以我是否正确的假设平台(MonoDroid或Android)没有提供安全的存储OOB? 是在应用程序内实现encryption的唯一替代scheme – 这当然需要将encryption密钥烘焙到代码中? 或者我可以获取用于签署应用程序的证书并将其用作密钥?

最终,如果我不能encryption这些数据,那么世界并不是世界末日,因为令牌是有时间限制的 – 但是如果我能够正确地做到这一点,那将是非常好的!

Solutions Collecting From Web of "通过Monodroid开箱即可在Android中获得安全存储吗?"

您可以结合使用Keychain API (API级别14以上版本)和使用Keychain API中的证书使用Cipher APIencryption数据。

请注意:根据Android安全性概述文档,如果设备已根植,则无法保证: http : //source.android.com/tech/security/index.html#rooting-of-devices

也许从这里引用可以帮助你:

在Android端OOB不支持公共API,所以事情变得棘手。 我相信这是因为Honeycomb 3.2没有正式支持OOB绑定的bluez堆栈,但是Google有某种编码的实现。我相信这是因为如果你看看蓝牙适配器和蓝牙设备类的gingerbread源代码,你可以请参阅可用的OOB方法,但不通过logging的API公开。

这些方法仍然是公开的,所以你可以通过reflection来调用它们。 使用reflection,您也可以获得一个类中的所有方法签名。 这就是我如何弄清楚我有什么方法可用。

当心,尽pipe许多没有logging,并不明显有些做。 重要的是要注意的是适配器类中的readOutOfBandData()和设备类中的setDeviceOutOfandData()。