加密文件或字符串安全android

时间:2013-02-28 18:30:06

标签: java android security encryption aes

我目前在我的应用中遇到了安全问题。 我的应用程序每10分钟记录一次用户的GPS位置,12小时后将数据发送到服务器。 我目前正将用户的位置保存在内部存储器的* .txt文件中。 现在,我需要保护此文件,以便它只能编辑我的应用程序,这样用户就无法破解它并更改记录的gps位置。

我已经阅读过有关加密字符串或文件本身的内容,但这是我的问题。 即使使用代码混淆,所有stackoverflow人员也不建议对密码进行硬编码。 我怎么能保护这个文件的数据?单独使用ProGuard +代码混淆(位移,数学运算等)还不足以在我的代码中保存密码? 任何评论都赞赏,我需要这是安全的,因为数据必须保持不变。 谢谢!

1 个答案:

答案 0 :(得分:3)

如果密码在内存中,即使是未加密/混淆,如果用户知道他们在做什么,也可以恢复和/或滥用密码。

要解决此问题,您应该让应用程序从服务器请求密钥以用于加密。密钥本身应使用SSL加密/签名,以便您可以保证服务器发送密钥,并且密钥在此过程中无法被截获。立即从内存中清除密钥,使其不会保留在设备上。

这个解决方案仍然不是万无一失的。用户可以对应用程序进行反向工程,并告诉它使用任何旧密钥。只要您将坐标存储在设备上,它们就会以某种方式受到攻击。使用我刚才描述的技术,攻击者仍然可以欺骗GPS源,或者使用重放攻击。为了防止这种情况,您需要为每个保存使用不同的密钥,并在服务器上跟踪应用密钥的顺序。

更安全的方法只是根本不存储设备上的位置。一旦可用,就使用加密/签名SSL方法上传它们以防止篡改。 Sanity在服务器上检查它们以排除坏的欺骗性工作。当信任来自设备的数据(例如GPS坐标)时,您有可能被聪明的攻击者操纵。