14

像许多人一样 - 我正在开发一个具有共享代码库的应用程序(Windows Store + Android + MonoTouch + [后来的] WP8)。

此外,与许多应用程序一样,我需要为该应用程序保留本地状态。

我存储的一条信息是登录用户的身份验证令牌。在 Windows 应用商店平台上,我使用令牌辅助数据(用户名和发行日期)的漫游设置 ( ApplicationData.Current.RoamingSettings) 和PasswordVault实际令牌值来实现存储。因此,令牌受到操作系统级别内省的保护,因为它是由操作系统加密的。

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

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

那么我的假设是否正确,即平台(MonoDroid 或 Android)不提供安全存储 OOB?是在应用程序中实现加密的唯一替代方案 - 当然需要将加密密钥烘焙到代码中?或者我可以获取用于签署应用程序的证书并将其用作密钥吗?

最终,如果我不能加密这些数据,这不是世界末日,因为令牌无论如何都是有时间限制的——但如果我真的能正确地做到这一点,那就太好了!

4

2 回答 2

1

您可以将它与Keychain API(从 API 级别 14 起提供)结合使用,并使用来自 Keychain api 的证书使用Cipher API加密数据。

请注意:根据 Android 安全概述文档,不能保证设备是否已植根:http: //source.android.com/tech/security/index.html#rooting-of-devices

于 2013-06-13T04:36:41.093 回答
0

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

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

这些方法仍然是公开的,因此您可以通过反射调用它们。使用反射,您还可以获得类中的所有方法签名。这就是我如何弄清楚我可以使用哪些方法。

请注意,尽管许多都没有记录在案,而且有些人做了什么并不明显。需要注意的重要一点是适配器类中的 readOutOfBandData() 和设备类中的 setDeviceOutOfandData()。

于 2013-06-08T17:47:49.483 回答