Android:在共享首选项中存储身份验证令牌是一个好主意吗?

Eri*_*man 34 authentication android web-services token sharedpreferences

我有一个与服务器通信的应用程序.当用户登录到应用程序时,在服务器上创建身份验证令牌并将其存储在SharedPreferences应用程序中,并且每当应用程序从Web服务请求数据时,验证身份验证令牌.

我的问题是,将身份验证令牌存储在SharedPreferences?中是否安全?我问,因为具有root权限的用户可以访问首选项,提取令牌并使用它.

无论如何,在这方面有更多的安全吗?

Jef*_*man 42

简而言之,是的,这是一件非常合理的事情.

你可以做的最好的只是混淆.如果将令牌保留在内存中,则root用户可以查看该令牌.如果您对其进行加密,则必须将加密密钥存储在设备上,否则您将无法使用该令牌......并且密钥可以像令牌一样容易被盗.

如果有人在设备上有root,则所有投注均已关闭.不要针对那种情况进行优化.如果您的应用程序具有超级高安全性,请不要让它在root设备上运行,或实现远程擦除功能,用户可以报告其设备被盗,并且您可以使服务器上的令牌无效.

Android 4.3推出了Android Keystore.据称这为加密密钥提供了一个安全的存储.这可用于存储用于解密使用传统方法存储的加密令牌的密钥.但是,引用的链接没有提到root设备如何影响其安全性.

更新2018年:大多数现代Android设备都通过SoC提供的可信执行环境(TEE)拥有硬件支持的密钥库.这使得黑客无法获得密钥库主密钥,否则密钥库主密钥将被解密您存储在Android密钥库中的密钥.

好吧,"不可能"是一个强有力的词.最好说"不可行".意思是,您需要像电子显微镜这样的东西来扫描融合到提供TEE的SoC中的位.如果您是那种数据需要这种关注的人,那么您可能会遇到更大的问题.