我目前在我的应用程序中遇到安全问题。 我的应用程序每 10 分钟记录一次用户的 GPS 位置,并在 12 小时后将数据发送到服务器。 我目前正在将用户的位置保存在内存中的 *.txt 文件中。 现在,我需要保护此文件,以便它只能在我的应用程序中进行编辑,这样用户就无法破解它并更改记录的 gps 位置。
我读过有关加密字符串或文件本身的内容,但这是我的问题。 整个 stackoverflow 的人都不建议对密码进行硬编码,即使使用代码混淆也是如此。 我还能如何保护此文件上的数据?自己使用 ProGuard + 代码混淆(位移位、数学运算等)不足以将密码保存在我的代码中? 任何评论表示赞赏,我需要这是安全的,因为数据必须保持不变。 谢谢!!
最佳答案
如果密码在内存中,即使未加密/混淆,如果用户知道他们在做什么,它也可以恢复和/或滥用。
要解决此问题,您应该让应用程序从服务器请求一个 key 以用于加密。 key 本身应该使用 SSL 加密/签名,以便您可以保证您的服务器发送了 key ,并且 key 不会在此过程中被拦截。立即从内存中清除 key ,使其不会保留在设备上。
这个解决方案仍然不是万无一失的。用户可以对应用程序进行逆向工程并告诉它使用任何旧 key 。只要您将坐标存储在设备上,它们就会以某种方式受到攻击。使用我刚才描述的技术,攻击者仍然可以欺骗 GPS 源,或使用重播攻击。为防止这种情况,您需要为每次保存使用不同的 key ,并在服务器上跟踪 key 的应用顺序。
更安全的方法是根本不在设备上存储位置。一旦它们可用,请尽快上传它们,使用加密/签名 SSL 方法来防止篡改。在服务器上对它们进行完整性检查以排除不良的欺骗作业。当信任来自设备的数据(例如 GPS 坐标)时,您将面临被聪明的攻击者操纵的风险。
关于java - 加密文件或字符串安全 android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15142960/